次のような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も見ています
-
【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
【お題】 ・存在しそうで存在しないモノマネ芸人の名前を教えてください
-
【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
2024年は「名探偵コナン30周年」「涼宮ハルヒ20周年」などを迎えますが、 あなたが「もうそんなに!?」と驚いた○○周年を教えてください。
-
遅刻の「言い訳」選手権
よく遅刻してしまうんです…… 「電車が遅延してしまい遅れました」 「歯医者さんが長引いて、、、」 「病院が混んでいて」 などなどみなさんがこれまで使ってきた遅刻の言い訳がたくさんあるのではないでしょうか?
-
【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
【お題】 ・買ったばかりの自転車を分解してひと言
-
好きな和訳タイトルを教えてください
洋書・洋画の素敵な和訳タイトルをたくさん知りたいです!【例】 『Wuthering Heights』→『嵐が丘』
-
VBA プロシージャの名前の取得
その他(Microsoft Office)
-
Excel-VBAのmsgBox()の不思議
Visual Basic(VBA)
-
Excel VBA 選択範囲の罫線色の変更プロージャの動作速度の改善について
Visual Basic(VBA)
-
-
4
VBA 複数条件の分岐処理の上手な方法
Visual Basic(VBA)
-
5
VBAに詳しい方教えてください。
Visual Basic(VBA)
-
6
VBAなくなるの?
Visual Basic(VBA)
-
7
時間短縮のために、テキストファイルの入出力をメモリを使って出来ないですか?
Visual Basic(VBA)
-
8
VBAコードのインデント表示
Visual Basic(VBA)
-
9
VBA コードどこがおかしいですか?
Visual Basic(VBA)
-
10
IF文、条件分岐の整理方法
Visual Basic(VBA)
-
11
エクセルVBAにて =A1=B1とすれば A1とB1のセル内容が一緒だった場合 TRUE 違っていれ
Visual Basic(VBA)
-
12
VBAで大量のファイルをシート名ごとに転記やらいろいろしたい!
Visual Basic(VBA)
-
13
VBA レジストリの値の読み方について教えてください
Visual Basic(VBA)
-
14
VBA一覧取得 再投稿
Visual Basic(VBA)
-
15
VBA指定行削除
Visual Basic(VBA)
-
16
左右の表のキー位置を合わせたい
Visual Basic(VBA)
-
17
Word VBA MSGBOX 内で降順表示
Visual Basic(VBA)
-
18
Vba 実数および実数タイプの変数について教えてください
Visual Basic(VBA)
-
19
現在のブックを閉じないで、マクロ抜きの(現在のブックの)コピーを作成したい
Visual Basic(VBA)
-
20
Vba SelStart、SelLen教えてください教えてください
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・ハマっている「お菓子」を教えて!
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBAでリンク切れをチェッ...
-
偶数/奇数の判定
-
POSTでデータを送信する方法。
-
excel2010で「次の非表示モジュ...
-
ベースモジュールって?
-
VBでグローバル変数を宣言するには
-
VBA This Workbookモジュール...
-
モジュールからフォームのボタ...
-
VBAで旧字体を異字体に一括で変...
-
モジュールの最大数はいくつな...
-
VB.NETでの他アプリケーション...
-
グラフのX,Y座標を取得したい
-
エクセルVBA クラスモジュール...
-
SendKeysの使い方について
-
Perlでモジュールをインストー...
-
クラスの関数へユーザー定義型...
-
ExcelVBA:パブリック オブジェ...
-
パワーポイントでマクロ(Auto_C...
-
Excel VBA でのAPI呼び出しが・...
-
ユーザーフォームに最小化・最...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBAでリンク切れをチェッ...
-
Excel VBAで、ユーザーフォーム...
-
ユーザー定義関数に#NAME?が返...
-
Excel VBA 『Call』で呼び出す...
-
エクセルVBAでシートモジュール...
-
VBAで別モジュールへの変数の受...
-
モジュールの最大数はいくつな...
-
VBでグローバル変数を宣言するには
-
グラフのX,Y座標を取得したい
-
VBA This Workbookモジュール...
-
モジュールとクラスの違いって...
-
【vba】フォームに書いてあ...
-
VBAで旧字体を異字体に一括で変...
-
vba userFormのSubを標準モジュ...
-
ベースモジュールって?
-
標準モジュールを削除したい。(...
-
Access VBA標準モジュールにつ...
-
Form間の値の渡し方
-
VBAProjectのモジュ...
-
'Range'メソッドは失敗しました
おすすめ情報