色彩を教える人になるための講座「色彩講師養成講座」の魅力とは>>

すいません、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)
としても、コンパイルエラーとなってしまいます。
よろしくご教示をお願いいたします。

gooドクター

A 回答 (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
    • good
    • 1
この回答へのお礼

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

お礼日時:2009/07/28 00:59

>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 という通常使われないプロパティーを利用するとか..
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/07/28 01:00

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

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

gooドクター

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

人気Q&Aランキング