質問: vba プロシージャの名前の取得 プロシージャ名を取得できないかなと考えています。 ・form_openプロシージャ内で「form_open」という文字を取得 ・フォーム上に「新規登録」というボタンを作成、クリックした時にできる「新規登録_click」プロシージャ内で「新規登録_click」という文字を取得 不可能な場合、各プロシージャに「form_open」や「新規登録_click」をベタ書きしようと考えていますが、非効率と考え、やりたくありません。 できればバージョンは2000以降で、excelでもaccessでも構いません。 可能かどうかだけでも教えてください。
回答: こんにちは。 >できればバージョンは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 発生の際のどこから発生しているか、それを提示する以外には、プロシージャ名を取るのはあまり意味がありません。 大事なことは、最終的に、何をしたいかなのです。