VBAの使い方を教えてください!

このQ&Aのポイント
  • VBAの使い方を教えてください!どうやって使えばいいのでしょうか?色々なヘルプを見ている中で、気になるコード(Module.CountOfDeclarationLines プロパティ)を見つけましたが、標準モジュールに貼りつけても動きません。
  • VBAの使い方を教えてください!具体的には、上記のコード(Module.CountOfDeclarationLines プロパティ)を使いたいですが、標準モジュールに貼りつけても動かない状況です。
  • VBAの使い方を教えてください!上記のコード(Module.CountOfDeclarationLines プロパティ)を使ってモジュール行数と宣言セクション行数を表示したいですが、どのようにすればいいのでしょうか?
回答を見る
  • ベストアンサー

使い方がわかりません。ヘルプ

このサンプルコード、どうやって使えばいいのでしょうか? ヘルプを色々見てたら気になるコードを見つけました。(アクセスです) Module.CountOfDeclarationLines プロパティです。 サンプルコードは、 ********************************************** Public Sub ModuleLineTotal(ByVal strModuleName As String) Dim mdl As Module ' Modules コレクションに含まれるモジュールを開きます。 DoCmd.OpenModule strModuleName ' Modules オブジェクトへの参照を返します。 Set mdl = Modules(strModuleName) ' モジュールの行数を表示します。 Debug.Print "モジュール行数: ", mdl.CountOfLines ' 宣言セクションの行数を表示します。 Debug.Print "宣言セクション行数: ", _ mdl.CountOfDeclarationLines End Sub ********************************************** なのですが、標準モジュールに貼りつけて、F5を押しても動きません。 Sub test() Call ModuleLineTotal End Sub を作ってF5を押すと、「引数は省略できません。」となります。 使い方を教えてください。ご回答よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • m3_maki
  • ベストアンサー率64% (295/459)
回答No.1

「ModuleLineTotal」 は 引数にモジュール名を渡す必要があります。   Call ModuleLineTotal("ModuleTest") とか   ModuleLineTotal "ModuleTest" などで、実行できます。 すべてのモジュールについて実行したければ Sub test()   Dim mdl As Object   For Each mdl In CurrentProject.AllModules     Debug.Print mdl.Name     ModuleLineTotal mdl.Name   Next End Sub

i9u8y7hkg
質問者

お礼

ありがとうございました。

i9u8y7hkg
質問者

補足

Sub test()   Dim mdl As Object   For Each mdl In CurrentProject.AllModules     Debug.Print mdl.Name     ModuleLineTotal mdl.Name   Next End Sub で、うまくいきました! 大変たすかりました。自分じゃ思いつきません。

関連するQ&A

  • VBEが閉じてしまいます。

    Sub Sample() Dim mdlName As String mdlName = "test" Debug.Print AllProcName(mdlName) End Sub Function AllProcName(ByVal strModuleName As String) As String Dim mdl As Module Dim lngDecCnt As Long '宣言セクションの行数 Dim strName As String 'プロシージャ名比較用 Dim strProcName As String '全プロシージャ名 Dim lngR As Long 'プロシージャの種類 Dim i As Long DoCmd.OpenModule strModuleName Application.VBE.MainWindow.Visible = False Set mdl = Modules(strModuleName) '宣言セクションの行数格納 lngDecCnt = mdl.CountOfDeclarationLines '最初のプロシージャ名格納 strName = mdl.ProcOfLine(lngDecCnt + 1, lngR) strProcName = strName & vbNewLine '宣言セクションの次行から最終行までループ For i = lngDecCnt + 1 To mdl.CountOfLines '新規プロシージャ名取得 If strName <> mdl.ProcOfLine(i, lngR) Then strName = mdl.ProcOfLine(i, lngR) 'プロシージャ名追加 strProcName = strProcName & strName & vbCrLf End If Next i Set mdl = Nothing AllProcName = strProcName End Function と言うコードをVBE画面でF5で実行すると、VBEが閉じてしまいます。 しかしF8でゆっくりやっていくとVBE画面は閉じません。 なぜ一気にやると閉じてしまうのでしょうか? Application.VBE.MainWindow.Visible = False をコメントアウトすると VBE画面は閉じませんが該当のモジュールが実行後にアクティブになります。 環境はwin8.1、アクセス2010です。

  • 引数 compareについて

    エクセルで Sub sample() Debug.Print InStr(1, "abcde", "C", vbTextCompare) End Sub このコードを実行する際、vbTextCompareはどういう役目を果たしてるのでしょうか? Sub sample() Debug.Print InStr(1, "abcde", "C") End Sub や Sub sample() Debug.Print InStr(1, "abcde", "C", vbBinaryCompare) End Sub にすると0が返りますが、 なぜ0が返るのかわかりません。 ヘルプを読むと、vbTextCompareは 「テキスト モードの比較を行います。」と書いてありますが、それがどういう意味なのか分かりません。 Sub sample() Debug.Print InStr(1, "abcde", "C", vbDatabaseCompare) End Sub にすると、エクセルで実行しているからかエラーになりました。 Sub sample() Debug.Print InStr(1, "abcde", "C", vbUseCompareOption) End Sub これだと、コンパイルエラーになりました。

  • 変数iもjも同じく値を保持できるからどちらを使って

    このサンプルコードは、 変数iもjも同じく値を保持できるから、test1を使ってもtest2を使っても一緒なのでしょうか? Option Explicit Dim i As Integer Sub test1() Static j As Integer j = j + 1 Debug.Print j End Sub Sub test2() i = i + 1 Debug.Print i End Sub ご回答よろしくお願いします。

  • Phonetic[型が一致しません]になる理由

    Sub サンプル1() Debug.Print Application.WorksheetFunction.Phonetic(Range("A1")) End Sub はうまくいくのに、 Sub サンプル1() Debug.Print Application.WorksheetFunction.Phonetic("日本") End Sub ********************************************************* は、[型が一致しません]になるのはなぜでしょうか? オブジェクトブラウザを見ると、 Function Phonetic(Arg1 As Range) As String になってることから、rangeを指定しなくていけないからですか?

  • 標準モジュールで 『Sub test(ByVal Target As Range)』は動かない?

    選択されている複数のアドレスが知りたいので 標準モジュールに Sub test(ByVal Target As Range) Debug.Print Target.Address End Sub と書きました。 しかしF5ボタンを押しても何も起こりません。 デバッグ→コンパイルをしてもエラーになりません。 シートのイベントプロシージャーではなく 標準モジュールにした理由は イベント発生時ではなく、任意で起動させたいためです。 ためしに、 Sub test(ByVal Target As Range) Debug.Print Target.Address End Sub の下に、 Sub test2() Call test End Sub と書いたら、 「引数は省略できません。」 というエラーになりました。 何がダメなのかわかりません。 ご教授よろしくお願い致します。

  • Publicで宣言しているから起きる現象?

    Option Explicit Public i As Long Sub test1() i = i + 1 Debug.Print i End Sub これを数回実行すると イミディエイトウインドウには 1 2 3 4 5 と記載されていきます。 なぜEnd Subで終わっているのにiの値がリセットされないのでしょうか? 「Public」で宣言しているからですか? Publicで宣言しつつ、1から開始したい場合は Sub test2() i=0 i = i + 1 Debug.Print i End Sub とするべきなのでしょうか? またtest1のiの値はどこかに保存されているのでしょうか? よろしくお願いします。

  • vbaにおいてセミコロン;はどういう意味ですか?

    Sub Sample() Debug.Print "OK"; End Sub を実行すると、OKが返るのですが、 このコードにおいて セミコロンは何の意味があるのですか? OK; になると思ってました。

  • VBA モジュールの一覧は何順なんでしょうか?

    Dim mdl As Object For Each mdl In CurrentProject.AllModules Debug.Print mdl.Name Next で取得される標準モジュールの一覧は何順なんでしょうか? どうやら作成日でも、名前順でもない模様です。

  • Randomizeがある時とない時の違いがわからな

    vbaです Sub Sample1() Randomize Debug.Print Int((6 - 1 + 1) * Rnd + 1) End Sub Sub Sample2() Debug.Print Int((6 - 1 + 1) * Rnd + 1) End Sub の違いがわからないのですが、 Randomizeはどのような役割をなしてるのでしょうか? Sample1の結果は、 5 3 3 4 3 1 6 5 3 4 で、 Sample2の結果は、 4 5 4 3 4 1 4 1 6 1 5 5 でした。

  • VBA 複数の文字のコードを一気に返すには

    Sub test1() Dim myStr As String myStr = "abc" Debug.Print Asc("a") Debug.Print Asc(myStr) End Sub このコードは、どちらも97が返るのですが、 myStrは3文字です。 3文字全ての文字コードを返すには、 Sub test2() Dim myStr As String myStr = "abc" Debug.Print Asc(Mid(myStr, 1, 1)) & Asc(Mid(myStr, 2, 1)) & Asc(Mid(myStr, 3, 1)) End Sub のようにするしかないのでしょうか?

専門家に質問してみよう