プロシジャを変数名で呼び出す方法は?

このQ&Aのポイント
  • プロシージャー名を変数にして呼び出す方法を教えてください。
  • Googleで検索しても見つからないので質問します。
  • Visual Basic 2010以外の環境で、Callの部分を変数にして動的にプロシージャーを変更する方法があるか教えてください。
回答を見る
  • ベストアンサー

プロシジャを変数名で呼び出す方法は?

確か、以前にこの方法を何処かで発見した記憶があるのですが、Googleで検索しても見付からないので質問とさせていただきます。 --------------------- Sub t() Call ("test" & 1) End Sub ----- Sub test1() MessageBox.Show("1が選択されました") End Sub ----- Sub test2() MessageBox.Show("2が選択されました") End Sub --------------------- 上記はエラーが出ます(「式はメソッドではありません」エラー) このように、プロシージャー名の一部や全部を変数にしてCallする方法は存在していなかったでしょうか? 何処でというのも忘れてしまいましたし、Visual Basic 2010ではなく、ExcelかAccessのVBAだったと思うのですが、このCallの部分を変数にして、動的に呼び出すプロシージャーを変更する事ができた記憶があるのですが… 御存知の方、いらっしゃいましたら、よろしくお願いします。

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

  • ベストアンサー
回答No.1

http://note.phyllo.net/?eid=1106221 これのことですか? VB6、VBAならこれでいけると思いますが。

ky2605
質問者

お礼

ありがとうございます。 ですが、これではないようです。 もしかすると、Callでプロシジャ名を変数で変更できる事そのものが記憶違いだったのかも……

その他の回答 (1)

  • kngj1740
  • ベストアンサー率18% (197/1052)
回答No.2
ky2605
質問者

お礼

すみません。これも記憶の方法と違います。 NO,1の方のは、DIMで変数の設定が必要でしたし、こちらは自作のプロシージャーを呼び出すのではなく、関数ポインタを呼び出す方法のようです。 () で内容を閉じて、文字列を変数を組み合わせてプロシージャー名として認識させるには、何か加える必要があったような記憶があるのですが… だんだん記憶に自信がなくなって来ました…

関連するQ&A

  • プロシージャー名を変数にはできない?

    シートに test1 test2 test3 として、 -------------------------------- Sub Sample() Dim myRow As Long Dim procedure As String For myRow = 1 To Cells(Rows.Count, "A").End(xlUp).Row procedure = Cells(myRow, 1) Call procedure Next myRow End Sub Sub test1() End Sub Sub test2() End Sub Sub test3() End Sub -------------------------------- こういう事ってできないのでしょうか? シートの文字を読み取ってプロシージャーを実行できれば、順番変えたり、要らないプロシージャーを消したりを、シート上で管理できるから楽なのになと思ったのですが。 これをやろうとすると、procedureというプロシージャーがないから Sub、Function、または Property が必要です。 になってしまいます。

  • 参照渡しをする時は、渡される側は違う変数を使う?

    参照渡しをする時は、渡される側は違う変数を使うべきなのでしょうか? VBAのお勉強をしているのですが Sub test1() Dim mystr As String mystr = "a" Call test2(mystr) Call test3(mystr) End Sub Sub test2(ByRef mystr As String) MsgBox mystr End Sub Sub test3(ByRef mystr2 As String) MsgBox mystr2 End Sub この場合、test2とtest3ではどちらを使ったほうがいいのでしょうか? test3は、mystr2 というmystrとは違う変数を使っていますが、 test2は、test1のmystrと同じ変数を使っています。 test1と同じ変数を使おうが違う変数を使おうが どちらにしろ (ByRef 変数名 As String) で宣言するから、変わらないのでしょうか?

  • excel/vba/public変数

    excel VBAで下記のようなコードを書きました。 他のプロシージャでも共通の変数を使用したいと思っています。 その為、public変数を宣言して使用したいと設定しましたが。 うまくいきません。 testmainを実行し、iに何も入っていないことを確認しました。 その後『1』を代入し、testmainは終了します。 testsubをその後実行し、iに先ほど代入された値を確認しようとしても何も代入されていない状態です。 全プロシージャでその変数を使用したいと思っているのですが、 何か方法、もしくはこのような使用方法ではないのでしょうか? public変数を使用してもプロシージャが終了すれば変数はクリアされるのでしょうか? 構造化の方法の問題上参照渡しや、戻り値など、指定する方が複雑になっていきます。 ご指導よろしくおねがいします。 Public i As Variant Sub testmain() MsgBox test i = 1 End Sub Sub testsub() MsgBox i End Sub

  • プロパティを通さなければアクセスできない変数を設定したい(VB2005)

    下記はメンバ変数とプロパティのコードです。 -------------------------------------- 'メンバ変数 Private _hoge As Integer = 1 'プロパティ Private ReadOnly Property phoge()   Get     Return _hoge   End Get End Property -------------------------------------- 上記の構造だと、同じクラス内であれば、下記のようにメンバ変数へプロパティを通さずアクセスが可能です。 Private Sub aaa()   MessageBox.Show(_hoge)   ' 1 と表示される(ここでエラーを出したい) End Sub 質問内容は、変数_hogeに対してアクセスするには、(同じクラス内からのアクセスであっても)プロパティを通さなければならない形にしたい、というものです。 つまり、下記のような形でないとエラーが発生するようにしたいと考えています。 Private Sub aaa()   Dim foo As Integer = phoge()   MessageBox.Show(foo) End Sub どうぞよろしくお願い致します。

  • vb.net 今日の日付を取得

    vb.net 今日の日付を取得 vbaの Sub vba() MsgBox Date End Sub をvbでやるとどうなるのでしょう? Private Sub Button1_Click(ByVal s MessageBox.Show date End Sub だと、 エラー 1 'Date' は型です。有効な式ではありません。 エラー 2 メソッドの引数は、かっこで囲む必要があります。 エラー 3 '.' が必要です。 と、3つのエラーになります。 ご教授よろしくお願い致します。

  • Application.OnTime Nowの変数

    他のプロシージャに1秒後に変数を渡すテストをしました。 Sub test01() Dim ws As Worksheet Set ws = ActiveSheet Application.Wait Now + TimeValue("0:00:01") Call AAA(ws) 'ただしく渡される End Sub Sub test02() Dim ws As Worksheet Set ws = ActiveSheet Application.OnTime Now + TimeValue("00:00:01"), "AAA(" & ws & ")" 'エラー End Sub Sub AAA(ByVal ws As Worksheet) MsgBox ws.Name End Sub Application.OnTime を使ったほうがエラーになるのはなぜでしょうか? どうやれば正しく渡せるうのでしょうか?

  • VBAのプロシージャのことで

    TEST1のプロシージャ内に使用している readfileという変数の中にテストという文字列を代入し、 文字列が代入された状態で Callによって別のプロシージャを読みにいったとき TEST(変数)に入った文字列ごと持っていくには どの様に記述すればよいかどなたか教えていただけませんでしょうか・・・。。 ----------------------------------------------------------- Sub TEST () Dim readfile As String readfile = "テスト" Call TEST2 End Sub ----------------------------------------------------------- Sub TEST2() readfile ←テストという文字列をTESTプロシージャから持ってきたい End Sub ----------------------------------------------------------- 単純に書いてみたコードですが、この様なことは可能なのでしょうか? すいませんがいただけないでしょうか><;

  • vbaの 変数の宣言 記号は使えない?

    vbaの 変数の宣言 記号は使えない? Sub test1() dim st @ End Sub みたいに変数の型を As String ではなく記号で表現ってできないんでしたっけ? エラーになってしまいます。

  • グローバル変数などについて

    Option Explicit Dim str1 As String '・・・(1) Sub テスト() Dim str2 As String '・・・(2) str1 = "テスト1" str2 = "テスト2" MsgBox str1 MsgBox str2 End Sub (1)はグローバル変数と言うとの事ですが (2)は何変数と言うのでしょうか? ローカル変数ですか? また、(1)がdimではなく、 Public str1 As String となった場合でも、 プロシージャーの外にあれば、グローバル変数と言うのでしょうか?

  • エクセルVBAユーザーフォームの変数の設定方法について

    すいません、エクセルVBAのユーザーフォームの変数の設定方法について質問があります。 1 ユーザーフォームを2つ用意する。 2 それぞれにComboBox1をおく。 3 立ち上げたユーザーフォームについて、UserForm_InitializeでComboBox1に"a"のAddItemを作る。 この、「立ち上げたフォームのComboBox1に"a"のAddItemを作る」 という作業を各々のユーザーフォームに記載するのではなく、標準モジュールでまとめて記載する方法で躓いています。 Public m As String Private Sub UserForm_Initialize() ’フォーム1を立ち上げた場合   m = "UserForm1"   Call Test1(m) End Sub Private Sub UserForm_Initialize() ’フォーム2を立ち上げた場合   m = "UserForm2"   Call Test1(m) End Sub ↓ 標準モジュールに記載 Sub Test1(m As String) VBA.UserForms.Add(m).ComboBox1.AddItem "a" End Sub これだとUserForm_InitializeとTest1の間で無限ループが始まってしまい、うまく進んでくれません。 ヘルプを見ましたが、Add(変数)でユーザーフォームを変数で指定できるということ以上のことは発見できず行き詰っています。  それぞれのフォームに書けばいいだけの話なのかもしれませんが、メンテを考えると出来ればまとめて記述しておきたいと考えています。 解決方法がありましたらどうぞよろしくご教示願います。

専門家に質問してみよう