4年に一度のスポーツの祭典 全競技速報中

プロシージャ名を取得できないかなと考えています。
・Form_Openプロシージャ内で「Form_Open」という文字を取得
・フォーム上に「新規登録」というボタンを作成、クリックした時にできる「新規登録_Click」プロシージャ内で「新規登録_Click」という文字を取得
不可能な場合、各プロシージャに「Form_Open」や「新規登録_Click」をベタ書きしようと考えていますが、非効率と考え、やりたくありません。
できればバージョンは2000以降で、ExcelでもAccessでも構いません。
可能かどうかだけでも教えてください。

gooドクター

A 回答 (3件)

>不可能な場合、各プロシージャに「Form_Open」や「新規登録_Click」をベタ書きしようと考えていますが



何がしたいのか全く解りませんが、”プロシージャ名取得”の関連情報のリンクだけ紹介しておきます。


http://oshiete1.goo.ne.jp/qa1219426.html
http://park7.wakwak.com/cgi-bin/sbox/~efc21/exqa …
http://www.officetanaka.net/excel/vba/vbe/05.htm
http://support.microsoft.com/kb/410621/ja

http://search.goo.ne.jp/web.jsp?dummy=%F3%FE%F3% …
    • good
    • 2

こんにちは。



>できればバージョンは2000以降で、ExcelでもAccessでも構いません。

最初に、もし、マクロを作成しようとするなら、アプリケーションは決めてください。内容的にみて、設計のあやふやなものは、回答しにくいです。Excelは、Excel VBAで、Access はAccess VBAのスタイルがあります。共有する部分はあっても、スタイルが違います。

ハンドル名から、VBAをjobにしているなら、素人の方だとは思いませんが、タスク(仕事)と、その作業過程の、主と従は混同しないほうがよいです。その過程の内容を限定して、可能かどうかと聞かれても、経験の多少に関わらず、ご自身でさえ見通しの立てられないものは、掲示板で聞いても、ほぼ無理と考えたほうがよいです。

今回は、Yes ともNoとも回答できません。
編集のテクニックなのか、マクロ作業中なのか、その区分けすら分かりません。

>・Form_Openプロシージャ内で「Form_Open」という文字を取得

>・フォーム上に「新規登録」というボタンを作成、クリックした時にできる「新規登録_Click」プロシージャ内で「新規登録_Click」という文字を取得

実際に、実行中のプロシージャ名を取るのは、VB.Net にはありますが、VB6系では用意されていません。少なくとも私は知りません。コードの中にあらかじめ書いておくしかありません。そんなに手間でもないと思います。

'例:
MsgBox "Run on procedure CommandButton1_Click of Form UserForm1"

しかし、このようなスタイルが成立するのは、On Error Goto ErrorHandler で、エラーが起きたときだけです。

稼働中のコントロール名を取得するなら、こうなります。
MsgBox ActiveControl.Name

こちらは、実行後にコントロールのプロパティを変更する場合に使用します。

この辺りは、どこまでできているのでしょう。

『「新規登録_Click」をベタ書き』というのは、それぞれのコードに書き入れたくないということでしょうか。何に対して非効率なのか、いまひとつ、共感が沸きません。たとえば、まさかコピー&ペーストが面倒だということでもないと思います。

どういう状況でなぜ必要なのかとか、そういう説明がありません。Error 発生の際のどこから発生しているか、それを提示する以外には、プロシージャ名を取るのはあまり意味がありません。

大事なことは、最終的に、何をしたいかなのです。
    • good
    • 0

Excelの場合


workbookに含まれるVBのコードを扱うには次のObjectを使用します

ActiveWorkbook.VBProject.VBComponents
メソッドやプロパティは自分で調べてください。

私はVBのコードをテキストに吐き出して分析するために以下のようなコードを書きました。(一部ですが)
For Each vbo In ActiveWorkbook.VBProject.VBComponents
If (vbo.Type = 1 Or vbo.Type = 2) And vbo.Name <> "VBE" Then
i = i + 1
モジュール名(i) = vbo.Name
vbo.Export filename:=tempパス & モジュール名(i) & ".bas"
End If
Next
VBAのコードを書き換えることがVBAでできるかどうかはわかりません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング