質問するログイン新規登録
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

812閲覧

エクセルVBA ユーザフォームのコントロールに紐づいているプロシージャ名を取得したい

maru3

総合スコア19

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2023/01/22 07:49

編集2023/01/22 08:48

0

0

ユーザフォームのコントロールに紐づいているプロシージャ名を取得したいです。

ワークシートのオブジェクトに紐づいているプロシージャ名を取得する
下記コードのような感じで、ユーザフォームのコントロールに紐づいている
プロシージャ名を取得する方法はありませんでしょうか。
OnActionと同じ働きをするものが見つけられませんでした、

どうぞよろしくお願いいたします。

Dim wb As Workbook Dim shp As Shape Dim recRow As Long Set wb = ActiveWorkbook wb.Sheets(1).Activate recRow = 10 For Each shp In ActiveSheet.Shapes If shp.OnAction <> "" Then wb.Sheets(1).Cells(recRow, 2) = shp.Name wb.Sheets(1).Cells(recRow, 3) = shp.TextFrame.characters.Text wb.Sheets(1).Cells(recRow, 4) = shp.OnAction recRow = recRow + 1 End If Next shp

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

エクセルのコントロールには、フォームコントロールとActiveXコントロールがあります。
shp.OnAction はフォームコントロールに紐づいているプロシージャ名になります。
これは標準モジュールのプロシージャになります。

ユーザーフォームのコントロールは、ActiveXコントロールになります。これと紐づいているプロシージャはイベントプロシージャといって、標準モジュールのプロシージャではありません。フォームモジュール内に、
コントロール名_イベント名 という名前で存在します。

shp.OnAction は紐づけるプロシージャを変更したり、削除したりできますので、プロシージャ名を取得したいという希望がでるのは理解できますが、ActiveXコントロールのイベントプロシージャを変更したり、削除したりはできません。もし、イベントプロシージャ名を取得できたとしても意味はないです。

他人が作成したものを解析したいという目的なら、VBAウィンドウでユーザーフォームを右クリックから「コードの表示」をクリックすればフォームモジュールが開きますので、その中の「コントロール名_イベント名」のプロシージャを見ればいいでしょう。

そうでないなら、何をしたいのか具体的に説明していただけると、別案をアドバイスできるかもしれません。

投稿2023/01/22 08:34

hatena19

総合スコア34367

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maru3

2023/01/22 08:53

ご回答ありがとうございます。 私の実現したいことですが、他の人が作ったマクロを解析したく、 その内容は、イベントに呼び出されているプロシージャ名(SubまたはFunction)を、 一覧または図式化したいのです。 そのためには起点になるイベント名が必要と思い、コントロールに紐づいているイベント名を 自動で取得したかったです。 質問の所に、図を追加しました。 これは、hatena19様の、<<ユーザーフォームのコントロールは、ActiveXコントロールになります。 になると思うのですが、何か良い方法はありますでしょうか。 よろしくお願いいたします。
hatena19

2023/01/22 14:23

私の回答の「フォームモジュール」「イベント」「イベントプロシージャ」という用語の意味を理解していますか。 このような質問が出るということは理解できていないのでは、と思われます。 理解できていないなら、まずはそれを学習して理解することから始めることをお勧めします。 理解できていて、あえてこの質問を出しているということなら、下記あたりを参考にしてご希望のものを作成してください。 VBAコードの全プロシージャー・プロパティ一覧を取得|VBAサンプル集 https://excel-ubara.com/excelvba5/EXCELVBA269.html VBAでコード解析するツールとは?タイプ別にツールを紹介! https://www.sejuku.net/blog/100944
maru3

2023/03/20 08:59

hatena19さま しばらくこちらのサイトを見ていなかったもので、お返事遅れまして申し訳ございませんでした。 サイトのリンクまでつけてくださいましてありがとうございます。 早速確認してみたいと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問