• ベストアンサー

EXCEL VBAのユーザーフォームに引数を渡す方法について

すいません、EXCEL VBAのユーザーフォームに引数を渡す方法についてご質問があります。 シート上にコマンドボタンを2つ用意する。 コマンドボタン1を押すと変数mは1 コマンドボタン2を押すと変数mは2 としてユーザーフォームを呼び出す。 Public m As Integer Private Sub CommandButton1_Click()  m = 1  Call フォーム呼び出し(m) End Sub Private Sub CommandButton2_Click()  m = 2  Call フォーム呼び出し(m) End Sub Sub フォーム呼び出し(m As Integer)  UserForm1.Show End Sub 次にユーザフォームにコマンドボタンを1個置き、 ボタンを押したとき、mが1であれば「ボタン1」 mが2であれば「ボタン2」 とメッセージボックスを出し、ユーザーフォームを閉じる。 Private Sub CommandButton1_Click()   If m = 1 Then    MsgBox "ボタン2"   ElseIf m = 2 Then    MsgBox "ボタン2"   End If  Unload UserForm1 End Sub プロシージャ間の引数渡しは色々なテキストに載っているのですが ユーザーフォームに引数を渡す方法はどうも見つからず、 Private Sub CommandButton1_Click(m) としても、コンパイルエラーとなってしまいます。 よろしくご教示をお願いいたします。

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

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

こんばんは。 引数の渡し方には二種類ありますから、それを混乱しているのだと思います。必ずしも、以下の方法が良いというわけではありませんが、UserForm の立ち上げに対して、渡しようがない場合は、プロジェクト・スコープの変数を用いて、以下のようなスタイルで変数として渡すのが良いのではないかと思います。 '------------------------------------------- '標準モジュール Public m As Integer '------------------------------------------- 'シートモジュール Private Sub CommandButton1_Click()  m = 1  Call フォーム呼び出し End Sub Private Sub CommandButton2_Click()  m = 2  Call フォーム呼び出し End Sub Sub フォーム呼び出し()  UserForm1.Show End Sub '------------------------------------------- 'UserForm モジュール Private Sub CommandButton1_Click()  MsgBox "ボタン" & m & "が押されました。", vbInformation  Application.Wait Now + TimeSerial(0, 0, 1)  Unload Me End Sub

takohasisa
質問者

お礼

出来ました!ありがとうございました。 ですが、自分が作ったものとどこが違うのかまだよく理解できていません。参照渡しと値渡しのところをもう一度今から勉強してみます。 わからないことがありましたら別途ご質問させていただきたいと思います。

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

その他の回答 (1)

  • ASIMOV
  • ベストアンサー率41% (982/2351)
回答No.1

>Sub フォーム呼び出し(m As Integer) > UserForm1.Show >End Sub は、 Sub フォーム呼び出し(m As Integer)  if m=1 then   UserForm1.Show  elseif m=2 then   UserForm2.Show  endif End Sub という具合に、この時点で分岐してしまえば、引数は要りません どうしても...というのなら Tag という通常使われないプロパティーを利用するとか..

takohasisa
質問者

お礼

ありがとうございます。シート上のコマンドボタンにtagの設定の仕方を調べてみます。

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

関連するQ&A

専門家に質問してみよう