Excel VBA質問箱 IV

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

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


58791 / 76732 ←次へ | 前へ→

【22664】Re:application.callerについて
発言  ichinose  - 05/2/26(土) 0:44 -

引用なし
パスワード
   ▼ponpon さん:
こんばんは。

>>Sub sample1()
>>'各ボタンに登録するマクロ
>>' msgbox typename(application.caller)
>>  If LCase(TypeName(Application.Caller)) = "variant()" Then
>>   c_inf = Application.Caller
>>   '配列を返します c_inf(1)---インデックス
>>   '        c_inf(2)---コマンドバーの名前
>↑
>配列のことが十分わかっていないし、もちろん使いこなしていないのですが、
>c_inf()には、二つの値が配列ではいているということでしょうか?
>  c_inf(1)---インデックス c_inf(2)---コマンドバーの名前
>私のイメージからすると、ボタンの名前?ボタンのコレクション?(この場合1,2,3,4,5,6,7,8,9,0)が、配列の値として、入っているような気がしたのですが・・・・・。
c_inf(1)には、ボタンに表示されている数字が入っているのではありませんよ!!
Captionとc_inf(1)が一致してしまった例題だったので紛らわしいですね。
c_inf(1)には、コマンドバー「サンプル」の中でのインデックスが入っています。

これは、作成されたコマンドバー「サンプル」の左から何番目のボタンか
という意味です。

コードをちょっとだけ変更します。
'===============================================================
Const cbdnm As String = "サンプル"
'===============================================================
Sub 設定1()
'サンプルというコマンドバーを作成し、その中に10個のボタンを配置します
  Dim cmdb As CommandBar
  Dim cmd As CommandBarControl
  Set cmdb = Application.CommandBars.Add(cbdnm)
  dd = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 0)
  For idx = LBound(dd) To UBound(dd)
   cmdb.Visible = True
   Set cmd = cmdb.Controls.Add(msoControlButton)
   With cmd
    .Style = msoButtonCaption
    .Caption = dd(idx) & "の処理"
    .OnAction = "sample1"
    End With
   Next
 
End Sub
'===============================================================
Sub sample1()
'各ボタンに登録するマクロ
' msgbox typename(application.caller)
  Const mystr As String = "の処理"
  If LCase(TypeName(Application.Caller)) = "variant()" Then
   c_inf = Application.Caller
   '配列を返します c_inf(1)---インデックス
   '        c_inf(2)---コマンドバーの名前
   MsgBox c_inf(1)
   With Application.CommandBars(c_inf(2))
    Select Case .Controls(c_inf(1)).Caption
     Case "1" & mystr
      MsgBox "1が押されたので、1の処理"
     Case "2" & mystr
      MsgBox "2が押されてしまった"
     Case "9" & mystr
      MsgBox "9なんか押して"
     Case Else
      MsgBox "その他の数字処理だよ"
     End Select
'この場合は、ボタンに表示されている文字列で分岐しました。
'ボタンのCaptionプロパティです。
    End With
   End If
End Sub
'=================================================================
Sub 設定消去()
'作成したコマンドバーを削除
  On Error Resume Next
  Application.CommandBars(cbdnm).Delete
  On Error GoTo 0
End Sub

これでいかがですか?

0 hits

【22660】application.callerについて ponpon 05/2/25(金) 22:19 質問
【22664】Re:application.callerについて ichinose 05/2/26(土) 0:44 発言
【22669】Re:application.callerについて ponpon 05/2/26(土) 10:17 お礼

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