お世話になります。
エクセル2003/XP 使用です。
イベントプロシージャに引数を渡せまるかどうか教えていただけますでしょうか?
下記のコード中の変数mysheetnameを
ユーザーフォーム、→ CommandButton1のプロシージャに
引数として渡して行きたいのですが、
実行すると、一番最初のWorkbook_SheetBeforeRightClickの時点で、
コンパイルエラー:
プロシージャの宣言が、イベントまたはプロシージャの定義と一致していません。
とエラー表示されます。
イベントプロシージャに引数を渡すことはできますでしょうか?
----------
ThisWorkBook内
----------
Public mysheetname As String
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
mysheetname = ActiveSheet.Name
UserForm1.Show (mysheetname) '←変数mysheetnameの値をユーザーフォームに渡したい。
End Sub
----------
ユーザーフォーム
----------
Private Sub UserForm_Initialize(ByVal mysheetname As String )
処理
End Sub
Private Sub CommandButton1_Click(ByVal mysheetname As String )
処理
End Sub
’--------- ここまで
引数について少し理解し始めたばかりの者です。
よろしくお願いします。
とりあえずアナタがやってみたかったことは、だいたいこんなカンジで。
’ThisWorkbook:
Public mysheetname As String
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
mysheetname = ActiveSheet.Name
UserForm1.Show
cancel = true
End Sub
’UserForm1:
Private sub UserForm_Initialize()
me.commandbutton1.caption = thisworkbook.mysheetname
end sub
private sub CommandButton1_Click()
msgbox thisworkbook.mysheetname
end sub
#参考
>Private Sub UserForm_Initialize(ByVal mysheetname As String )
>Private Sub CommandButton1_Click(ByVal mysheetname As String )
いずれも勿論デタラメですね。
イベントプロシジャは、引数の有無等も含め定められた文法でしか使用する事はできません。
引数を持っているイベントプロシジャは、その文法に定められた引数をイベント発生に合わせて自動でセットされます。
引数を持っていないイベントに勝手にそれっぽいモノを書き足しても、当然文法間違いで動かないだけです。
お礼
keithinさま、いつもありがとうございます^^ 文法間違いの件は理解しました。 アドバイスいただいたコードで、 変数の値が、イベントプロシージャに引き継がれていくことが確認できました。 自分が作った処理のコードでは、 変数のシート名のところで、 インデックスが有効範囲にありません とエラー表示されたので、 変数の値を引き継げないものと思っておりました。 再度、見直します。 ありがとうございました(^^♪