• ベストアンサー

VBA プロシージャの名前の取得

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

質問者が選んだベストアンサー

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>不可能な場合、各プロシージャに「Form_Open」や「新規登録_Click」をベタ書きしようと考えていますが 何がしたいのか全く解りませんが、”プロシージャ名取得”の関連情報のリンクだけ紹介しておきます。 http://oshiete1.goo.ne.jp/qa1219426.html http://park7.wakwak.com/cgi-bin/sbox/~efc21/exqalounge.cgi?print+200905/09050016.txt 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%FE%F3%FE&status=select&from=goo_oshiete&PT=goo_oshiete&nsMT=&MT=vba+%A5%D7%A5%ED%A5%B7%A1%BC%A5%B8%A5%E3%CC%BE+%BC%E8%C6%C0&c=0

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 >できればバージョンは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 発生の際のどこから発生しているか、それを提示する以外には、プロシージャ名を取るのはあまり意味がありません。 大事なことは、最終的に、何をしたいかなのです。

全文を見る
すると、全ての回答が全文表示されます。
  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.2

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でできるかどうかはわかりません。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ACCESS VBAで別のプロシージャを呼びだした後

    いつもお世話になります。 ACCESS VBAで、別のプロシージャを呼びだし、 フォームを開き、あるコマンドボタンをクリックすると、 もとに戻ってくるようにしたいのですが、 call で別のプロシージャを呼びだし、フォームを開くところまではうまくいくのですが、コマンドボタンをクリックする前に戻ってきてしまいます。 コマンドボタンにはイベントプロシージャを設定しているのですが、 それではダメなんですよね? どのようなコードになるのでしょうか?よろしくお願いします。

  • アクセスvba [イベント プロシージャ]つけたい

    もうフォームモジュールにイベントは出来上がってるのですが コントロールの名前を変更したため デザインビューのプロパティの[イベント プロシージャ]と言う文字が消えてしまいました。 フォーム上の全てのコマンドボタンのクリック時に [イベント プロシージャ]と言う文字を入れたいのですが そのような作業は可能でしょうか? [イベント プロシージャ]と言う文字が入れば、該当のイベントは既にモジュールにある為 イベントとして機能します。

  • access vba プロシージャの呼び出し

    access vba についての質問です。 フォームにテキストボックスが二つあるのに対して、 オプションボタンが三つあります。(グループです) テキストボックス1に文字列を入力し、コマンドボタンを押すと 選択されているオプションボタンのcaptionをテキストボックス1の文字列と合わせる形でテキストボックス2に反映させたいです。 コマンドボタンのクリックで以上の動きをするfunctionプロシージャを呼び出したいのですが、呼び出す側プロシージャと呼び出される側プロシージャの変数の設定がわかりません。 超初心者のため初歩的、かつ説明がわかりづらくて恐縮ですが、理解のため省略などをしない形でコードの見本等お教え願えませんでしょうか。 よろしくおねがいします。

  • 他のモジュールのプロシージャの呼び出したい。

    VB6でForm間でのプロシージャの呼び出しができなくて困っています。 例えば、Form1,Form2のフォームを2つ用意し、Form2上にCommand1というコマンドボタンを配置します。 Form1でForm2のCommand1_Clickするには、Form1のコードで、Call Form1.Command1_Click ではだめなのでしょうか。

  • Access VBAで

    VBAの超初心者です。 Accessのフォームでコマンドボタンを押すと、決まった文字が入力できるフォームを作りたいと思っています。 クリック時のイベントプロシージャーはどのように記入すればよいのでしょうか。 ど素人な質問ですみません。

  • サブフォームのプロシージャーの呼び出し方

    Access2010です。 別フォームの、サブフォームのプロシージャーの呼び出し方が分かりません。 呼び出すフォーム名 メイン サブフォーム名 メインSF プロシージャー名 取り込み4 です 以下のようにやってみましたが、エラーになってしまいます。 Call Forms_メイン_メインSF.Form.取り込み4 よろしくお願いします

  • 「サブフォーム」の名前を取得したい

    アクセスのフォームの中にサブフォームが2つあります。 このうちの一つのサブフォームをクリックした時に 自身のフォーム名をVBAで取得したいのですが、 サブフォームのモジュールで Debug.Print Screen.ActiveForm.Name をすると、 親フォームが取得されます。 Forms("親フォーム").Controls("サブフォーム").Form.Controls("担当者").Value の部分の、「親フォーム」が取得されます。 「サブフォーム」の部分を取得するコードはありますか?

  • ACCESS VBAサブフォーム(DATA SHEET)の値の取得方法

    いつもお世話になっております。 ACCESS VBAでメインフォームに貼りついているサブフォームの値をとりたいのですが、うまくいっていません。 現状は module1でaをPublicで宣言 サブフォーム中のFORM_CURRENT()中で me.field1.setfocus a = me.field1.value として取得しています。 (実装ではメインのほうのボタンAを押したときに サブフォーム、FORM_CURRENT()で取得しておいた値を 別の変数に入れようとしています。) サブフォームのみで実行するとうまくいくようですが、 メインフォームに貼り付けるとうまくいかないようです。 (メインフォームに貼り付けて、サブフォームのFORM_CURRENTにブレイクを 貼って止めようとするが止まらない) そこでメインフォームボタンAクリックイベントで dim a1 as integer Forms![mainform]![subform].form.[field1].setfocus a1 = Forms![mainform]![subform].form.[field1].value として値をとろうと思ったのですが メインフォームからサブフォームにフォーカスをうつせない? らしく、サポートされていませんの旨のメッセージがでてしまいます。 やりたいこととしては、メインフォームに貼りついたサブフォームの 選択レコードのフィールド値を、メインフォームのボタンを押したときに 取得する。ということなのですが、うまくいっていません。 別の方法でもいいので、実現方法をご存知の方、よろしくお願いします。 ちなみにACCESSは2000を使用、ADOはサポートされていますがDAOは 非サポートのようです。

  • アクセスでイベントプロシージャが機能しない

    アクセス97で作成したデータベースをアクセス2000でへフォームをインポートしました。そこでデザインモードでコントロールボタンのイベントプロシージャをクリックしたら本来VBの画面になるべきところ、反応せずVB画面になりませんでした。 どうしたらいいか困っています。ご存じの方、よろしくお願いします。

  • VBAのフォームについて

    今、悩んでいるというか、不思議に思っていることがあります。 ACCESS2003 VBAで、VBAコードでメインのフォームから、ある帳票フォームのインスタンスを作成しています。メインフォームのモジュールに以下のように記述し、 Dim 帳票1 as Form で、ボタンのクリックイベントで、 set 帳票1 = New Form_帳票の元フォーム とインスタンスを生成します。更に、この帳票フォームには、同様に子フォームを持っています。こちらも同様に帳票フォームモジュールに、 Dim 詳細1 as Form として、あるボタンのクリックイベントに、 set 詳細1 = New Form_詳細フォーム と、しています。ここで、帳票1の閉じるボタンを押しても、詳細1のフォームは、閉じません。 同様に、帳票の元フォームに Dim 帳票2 as form ボタンクリックで、 Set 帳票2 = New Form_帳票2の元フォーム とします。さらに帳票2の元フォームには、 Dim Child帳票 as Form ボタンクリックで、 Set Child帳票 = New Form_帳票2の元フォーム としています。 これで、Child帳票は、いくつもいくつもインスタンス化されます。そこで、今までの動作に準じて、たくさんあるChild帳票の大元を閉じると、こちらは子フォームが全部閉じます。例えば10個子フォームを作って、途中を閉じるとちゃんとその子だけが閉じます。最初の例の帳票1フォームを閉じても、詳細1フォームが閉じないのと、何が違うのか分かりません。私は、フォームが閉じるときには、そのメンバクラス(フォーム)は、破壊されるものだと思っていたのですが、そうでもないようです。どなたかわかりやすく、教えていただけないでしょうか?

専門家に質問してみよう