Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


7885 / 13645 ツリー ←次へ | 前へ→

【36274】押されたボタン名の取得方法 sin 06/3/27(月) 13:24 質問[未読]
【36276】Re:押されたボタン名の取得方法 Kein 06/3/27(月) 13:53 回答[未読]
【36289】Re:押されたボタン名の取得方法 sin 06/3/27(月) 16:15 お礼[未読]
【36277】Re:押されたボタン名の取得方法 つん 06/3/27(月) 13:54 回答[未読]
【36290】Re:押されたボタン名の取得方法 sin 06/3/27(月) 16:22 お礼[未読]

【36274】押されたボタン名の取得方法
質問  sin  - 06/3/27(月) 13:24 -

引用なし
パスワード
   よろしくお願いします。
作成されたボタン名に応じて処理を分けたいのですが、
押されたボタン名の取得方法がわかりません。
キャプションでも名前でもいいので
どなたかご存知でしたらご教授ください。

以下ではボタン5個ですが、実際には数十個で
条件によって数は変動します。

―――――――――――――――――――――――――――――――

Sub test()
  Dim i As Integer
  
  For i = 1 To 5
    With ActiveSheet.Buttons.Add(200, 30 * i, 80, 15)
      .Characters.Text = "ボタン" + CStr(i)
      .Name = "BUTTON" + CStr(i)
      .OnAction = "test2"
    End With
  Next i

End Sub

Function test2()

  '***ここでボタン名を取得したい***

  '以下ボタン名に応じた処理

End Function

―――――――――――――――――――――――――――――――

【36276】Re:押されたボタン名の取得方法
回答  Kein  - 06/3/27(月) 13:53 -

引用なし
パスワード
   Sub test()に対応する、呼び出し側マクロのコードは

Sub test2()
  Dim x As Variant
 
  x = Application.Caller
  If VarType(x) <> 8 Then Exit Sub
  Select Case x
   Case "BUTTON1": 'BUTTON1 が押されたときの処理
   Case "BUTTON2": 'BUTTON2が押されたときの処理
   'Case ?: BUTTON?が押されたときの処理
  End Select
End Sub

というような感じになります。VarType関数の戻り値が 8 の場合は、マクロを
登録したオブジェクトの名前(即ち文字列)を返している、と判断します。
それ以外の例えば、エラー値(VarType = 10)などは「ツール」「マクロ」で
出てくるダイアログから選んで実行された場合ですから、判定したら即中止、
とします。それが定石です。

【36277】Re:押されたボタン名の取得方法
回答  つん E-MAIL  - 06/3/27(月) 13:54 -

引用なし
パスワード
   こんにちは^^

「Caller プロパティ」

でなんとかなりそうな気がします。
どかな?

【36289】Re:押されたボタン名の取得方法
お礼  sin  - 06/3/27(月) 16:15 -

引用なし
パスワード
   ▼Kein さん:
>Sub test()に対応する、呼び出し側マクロのコードは
>
>Sub test2()
>  Dim x As Variant
> 
>  x = Application.Caller
>  If VarType(x) <> 8 Then Exit Sub
>  Select Case x
>   Case "BUTTON1": 'BUTTON1 が押されたときの処理
>   Case "BUTTON2": 'BUTTON2が押されたときの処理
>   'Case ?: BUTTON?が押されたときの処理
>  End Select
>End Sub
>
>というような感じになります。VarType関数の戻り値が 8 の場合は、マクロを
>登録したオブジェクトの名前(即ち文字列)を返している、と判断します。
>それ以外の例えば、エラー値(VarType = 10)などは「ツール」「マクロ」で
>出てくるダイアログから選んで実行された場合ですから、判定したら即中止、
>とします。それが定石です。

早速のご回答ありがとうございます。
”Application.Caller”で解決しました。
本当に助かりました。
ありがとうございました。

【36290】Re:押されたボタン名の取得方法
お礼  sin  - 06/3/27(月) 16:22 -

引用なし
パスワード
   ▼つん さん:
>こんにちは^^
>
>「Caller プロパティ」
>
>でなんとかなりそうな気がします。
>どかな?

解決しました、ありがとうございました。

7885 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free