
次のようなVBAのコードをご指南ください。
実行すると、アクティブブックのモジュール内で定義されたサブプロージャ名や関数名を、種類とそれが定義されたモジュール名を併記する形で、メッセージボックスで一覧表示するマクロ。
実行結果のイメージ
Sheet1 (****) プロージャー procA()
Sheet1 (****) プロージャー procB()
ThisWorkbook イベントプロージャー workbook_open()
標準モジュール プロージャー test()
標準モジュール 関数 func(hikisuA As Long, hikusuB As String)
他者がつくったマクロファイルが複雑で、モジュールがたくさんあります。どのモジュールにマクロが定義されているか、VBEを開いて1つ1つモジュールをダブルクリックして調べるのが面倒です。情報を得るのが目的なので、実行結果のイメージに深いこだわりはありません。詳しい方、よろしくお願いします。
No.1ベストアンサー
- 回答日時:
こんにちは
モジュールからプロシージャを抜き出す簡単な方法をざっと探してみましたが、見つからなかったので、以下は1行ずつ調べるというローテクな方法です。
事前に設定した(=変数pre)に該当する Sub、Function を抜き出しますので、ClassやDeclare、Proparty、Enumなどは無視します。
>メッセージボックスで一覧表示するマクロ。
対象が多い場合に、メッセージボックス表示ではあんまりと思いますので、ActiveSheetのA、B列に一覧を列挙するようにしてあります。
また、モジュール名はオブジェクト名になりますので、シートの表示名とは異なる可能性があります。
(シート名表示の方が良ければ、読み替えを追加してください)
以下、ご参考までに。
Sub Q13781167()
Dim i As Long, j As Long
Dim rg As Range, s As String
Dim pre, t, m, p
pre = Split("Sub ,Private Sub ,Public Sub ,Function ,Private Function ,Public Function ", ",")
Columns("A:B").ClearContents
Set rg = Range("A1:B1")
rg.Value = Array("[Module Name]", "[Proc Name]")
For Each t In Array(100, 1, 3)
For Each m In ActiveWorkbook.VBProject.vbcomponents
If m.Type = t Then
If rg(1).Value <> "" Then Set rg = rg.Offset(1)
rg(1).Value = m.Name
For j = 1 To m.codemodule.CountOfLines
s = m.codemodule.Lines(j, 1)
For Each p In pre
If Left(s, Len(p)) = p Then rg(2).Value = s: Set rg = rg.Offset(1): Exit For
Next p
Next j
End If
Next m
Next t
End Sub
教えてくださりありがとうございます。教えていただいたコード、私の環境でも実行でき期待した結果が得られました。回答をいただいて、コードの中身を理解するのに時間がかかり、お礼がたいへん遅くなりましたが、とても参考になりました。
m.codemodule.CountOfLinesやs = m.codemodule.Lines(j, 1)
などのcodemoduleは一度も目にしたことがありませんでした。
それから、選択範囲rgのOffsetの利用の仕方が秀逸です。Arrayの使い方も参考になりました。preをSplitで定義することで、多条件の場合分けを可能にしている点も参考になりました。
たくさんの工夫が詰め込まれたコードを教えていただきました。どこまで使いこなせるかわかりませんが、他のコードにも利用できるように勉強していきたいと思います。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) パーソナルXLSBのfuctionを呼び出すと「Functionが定義されていません」のエラーになる 2 2022/08/22 22:51
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Visual Basic(VBA) VBA Bookの表示、非表示 1 2022/09/16 20:44
- Visual Basic(VBA) マクロについて教えてください。 4 2023/06/06 09:06
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) VBAでのMATCH関数 3 2022/10/17 19:06
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- Visual Basic(VBA) Excel・ユーザーフォームの情報を受け渡したい 4 2022/06/08 10:11
- Visual Basic(VBA) Excel VBAで教えてください 4 2022/05/11 22:20
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
このQ&Aを見た人はこんなQ&Aも見ています
-
いちばん失敗した人決定戦
あなたの「告白」での大失敗を教えてください。
-
【お題】動物のキャッチフレーズ
【お題】「百獣の王 ライオン」「実は動物界最強 カバ」は分かるけど、それはちょっとピンと来ないなと思った動物のキャッチフレーズ
-
これ何て呼びますか
あなたのお住いの地域で、これ、何て呼びますか?
-
スタッフと宿泊客が全員斜め上を行くホテルのレビュー
スタッフも宿泊客も、一流を通り越して全員斜め上なホテルのレビューにありがちな内容を教えて下さい
-
かっこよく答えてください!!
あなたは今にも別れそうなカップルの彼女の恋愛相談に乗っています。
-
VBA プロシージャの名前の取得
その他(Microsoft Office)
-
プロシージャ名の取得
Visual Basic(VBA)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
-
4
エクセルVBAでプロシージャ名を取得したい
Excel(エクセル)
-
5
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
6
或るプロシージャの呼び出し元判定
その他(Microsoft Office)
-
7
VBAでワークシートを引数としてサンプル関数に渡したい
Visual Basic(VBA)
-
8
メッセージボックスを前面に表示させるには?
Visual Basic(VBA)
-
9
エクセルVBAにおけるON TIMEメソッドの解除方法について
Visual Basic(VBA)
-
10
オブジェクト型の変数が定義されているか確認するには?
Visual Basic(VBA)
-
11
押したボタンの位置取得(共通のマクロ)
Excel(エクセル)
-
12
【VBA-AC2000】カレントプロシージャ名を取得したい
Visual Basic(VBA)
-
13
Integer変数をカラにしたいのですが
Visual Basic(VBA)
-
14
ExcelのVBA。public変数の値が消える
Visual Basic(VBA)
-
15
VBAのエラー発生場所をメッセージBOXに表示
Visual Basic(VBA)
-
16
VBAProjectのモジュール存在チェック
Visual Basic(VBA)
-
17
VBAでユーザーフォームの表示を確認
Visual Basic(VBA)
-
18
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
19
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
20
エクセルVBA クラスモジュール内でパブリックユーザ定義型
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBA 定義されたプロージ...
-
Excel VBAでリンク切れをチェッ...
-
モジュールの最大数はいくつな...
-
ユーザー定義関数に#NAME?が返...
-
AddressOf と同じ機能を持った...
-
EXCELのVBAで、あるワークシー...
-
Excel VBAで、ユーザーフォーム...
-
ExcelでTelnetを動かしたい
-
Excel VBA 『Call』で呼び出す...
-
vba userFormのSubを標準モジュ...
-
msoFileDialogFolderPicker
-
ユーザー定義関数をEXCELに常駐...
-
コンボボックスの変更に応じて...
-
モジュールとは何ですか
-
モジュールからフォームのボタ...
-
VB2005ーDataGridViewの選択さ...
-
VBAで旧字体を異字体に一括で変...
-
VBAで別モジュールへの変数の受...
-
エクセルのシート上に配置され...
-
Excel VBA 標準モジュール内で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBAで、ユーザーフォーム...
-
Excel VBAでリンク切れをチェッ...
-
エクセルVBAでシートモジュール...
-
vba userFormのSubを標準モジュ...
-
ユーザー定義関数に#NAME?が返...
-
Excel VBA 『Call』で呼び出す...
-
VBでグローバル変数を宣言するには
-
Excel VBA 定義されたプロージ...
-
モジュールの最大数はいくつな...
-
VBAで旧字体を異字体に一括で変...
-
SendKeysの使い方について
-
Access VBA標準モジュールにつ...
-
モジュールからフォームのボタ...
-
VBAで別モジュールへの変数の受...
-
【vba】フォームに書いてあ...
-
エクセルVBA クラスモジュール...
-
Workbook.BeforeSave イベント...
-
モジュールとクラスの違いって...
-
ユーザー定義関数をEXCELに常駐...
-
標準モジュールを削除したい。(...
おすすめ情報