VBAの使い方を教えてください!
- 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を押すと、「引数は省略できません。」となります。 使い方を教えてください。ご回答よろしくお願いします。
- i9u8y7hkg
- お礼率100% (35/35)
- オフィス系ソフト
- 回答数1
- ありがとう数1
- みんなの回答 (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
関連する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 のようにするしかないのでしょうか?
- ベストアンサー
- オフィス系ソフト
お礼
ありがとうございました。
補足
Sub test() Dim mdl As Object For Each mdl In CurrentProject.AllModules Debug.Print mdl.Name ModuleLineTotal mdl.Name Next End Sub で、うまくいきました! 大変たすかりました。自分じゃ思いつきません。