Excel VBA質問箱 IV

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

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


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

【50475】コマンドバーポップアップでクリック時に処理したい 山形 07/7/26(木) 23:16 質問[未読]
【50476】Re:コマンドバーポップアップでクリック時... ichinose 07/7/26(木) 23:31 発言[未読]
【50477】Re:コマンドバーポップアップでクリック時... 山形 07/7/26(木) 23:38 発言[未読]
【50478】Re:コマンドバーポップアップでクリック時... bykin 07/7/27(金) 0:22 回答[未読]
【50480】Re:コマンドバーポップアップでクリック時... 山形 07/7/27(金) 0:32 発言[未読]
【50479】Re:コマンドバーポップアップでクリック時... ichinose 07/7/27(金) 0:26 発言[未読]
【50481】Re:コマンドバーポップアップでクリック時... 山形 07/7/27(金) 0:34 発言[未読]
【50482】Re:コマンドバーポップアップでクリック時... bykin 07/7/27(金) 0:39 発言[未読]
【50483】Re:コマンドバーポップアップでクリック時... 山形 07/7/27(金) 0:47 発言[未読]

【50475】コマンドバーポップアップでクリック時に...
質問  山形  - 07/7/26(木) 23:16 -

引用なし
パスワード
   コマンドバーポップアップでクリック時に処理したいのですが、
フォーカスを当てただけで、処理が行われてしまいます。

クリックした時だけ処理を行うにはどうしたらよいのでしょうか?

今ボタンを追加する処理等は下記のようになってます。

Sub AddCommandBar
  Dim MyCB As CommandBar
  Dim MyCBC1 As CommandBarPopup

  Set MyCB = Application.CommandBars("Cell")

  Set MyCBC1 = MyCB.Controls.Add(Type:=msoControlPopup)
  MyCBC1.OnAction = "Macro1"
  MyCBC1.Parameter = "0"

  Set MyCBC2 = MyCBC1.Controls.Add(Type:=msoControlButton)
  MyCBC2.OnAction = "Macro1"
  MyCBC2.Parameter = "1"

End Sub

Sub Macro1
  
  '行いたい処理
End Sub

【50476】Re:コマンドバーポップアップでクリック...
発言  ichinose  - 07/7/26(木) 23:31 -

引用なし
パスワード
   ▼山形 さん:
こんばんは。
>コマンドバーポップアップでクリック時に処理したいのですが、
>フォーカスを当てただけで、処理が行われてしまいます。
>
>クリックした時だけ処理を行うにはどうしたらよいのでしょうか?
>
>今ボタンを追加する処理等は下記のようになってます。
>
>Sub AddCommandBar
>  Dim MyCB As CommandBar
>  Dim MyCBC1 As CommandBarPopup
>
>  Set MyCB = Application.CommandBars("Cell")
>
>  Set MyCBC1 = MyCB.Controls.Add(Type:=msoControlPopup)
'  MyCBC1.OnAction = "Macro1"
↑これが要りません
>  MyCBC1.Parameter = "0"
>
>  Set MyCBC2 = MyCBC1.Controls.Add(Type:=msoControlButton)
>  MyCBC2.OnAction = "Macro1"
>  MyCBC2.Parameter = "1"
>
>End Sub
>
>Sub Macro1
>  
>  '行いたい処理
>End Sub

【50477】Re:コマンドバーポップアップでクリック...
発言  山形  - 07/7/26(木) 23:38 -

引用なし
パスワード
   ▼ichinose さん:
>▼山形 さん:
>こんばんは。
>>コマンドバーポップアップでクリック時に処理したいのですが、
>>フォーカスを当てただけで、処理が行われてしまいます。
>>
>>クリックした時だけ処理を行うにはどうしたらよいのでしょうか?
>>
>>今ボタンを追加する処理等は下記のようになってます。
>>
>>Sub AddCommandBar
>>  Dim MyCB As CommandBar
>>  Dim MyCBC1 As CommandBarPopup
>>
>>  Set MyCB = Application.CommandBars("Cell")
>>
>>  Set MyCBC1 = MyCB.Controls.Add(Type:=msoControlPopup)
> '  MyCBC1.OnAction = "Macro1"
>↑これが要りません
>>  MyCBC1.Parameter = "0"
>>
>>  Set MyCBC2 = MyCBC1.Controls.Add(Type:=msoControlButton)
>>  MyCBC2.OnAction = "Macro1"
>>  MyCBC2.Parameter = "1"
>>
>>End Sub
>>
>>Sub Macro1
>>  
>>  '行いたい処理
>>End Sub

説明不足ですいません。

MyCBC1とMyCBC2は似ているけど、別の処理で、
Macro1内で区別して処理しています

【50478】Re:コマンドバーポップアップでクリック...
回答  bykin  - 07/7/27(金) 0:22 -

引用なし
パスワード
   こんばんわ。

ichinoseはんのご意見が正しいと思うねんけどな・・・
CommandBarPopupとCommandBarButtonの違い、わかってまっか?

↓こういうことやないのかな?

Sub AddCommandBar()
  Dim MyCB As CommandBar
  Dim MyCBP As CommandBarPopup
  Dim MyCBC1 As CommandBarButton
  Dim MyCBC2 As CommandBarButton

  Set MyCB = Application.CommandBars("Cell")
  Set MyCBP = MyCB.Controls.Add(Type:=msoControlPopup)
  MyCBP.Caption = "Popup"
  Set MyCBC1 = MyCBP.Controls.Add(Type:=msoControlButton)
  MyCBC1.OnAction = "Macro1"
  MyCBC1.Caption = "Macro1-0"
  MyCBC1.Parameter = "0"

  Set MyCBC2 = MyCBP.Controls.Add(Type:=msoControlButton)
  MyCBC2.OnAction = "Macro1"
  MyCBC2.Caption = "Macro1-1"
  MyCBC2.Parameter = "1"

End Sub

Sub Macro1()
  MsgBox Application.CommandBars.ActionControl.Parameter
  '行いたい処理
End Sub

ただし、こういうときはWith使えば簡略化できまっせ。↓こんな感じ。

Sub AddCommandBar2()
  With Application.CommandBars("Cell")
    With .Controls.Add(Type:=msoControlPopup)
      .Caption = "Popup"
      With .Controls.Add(Type:=msoControlButton)
        .OnAction = "Macro1"
        .Caption = "Macro1-0"
        .Parameter = "0"
      End With
      With .Controls.Add(Type:=msoControlButton)
        .OnAction = "Macro1"
        .Caption = "Macro1-1"
        .Parameter = "1"
      End With
    End With
  End With
End Sub

せやけど、実際はこのコードでは実行するたびに、メニュー項目が増えるから
ちゃんと存在チェックかけなあきまへんで。

試してみてな。
ほな。

【50479】Re:コマンドバーポップアップでクリック...
発言  ichinose  - 07/7/27(金) 0:26 -

引用なし
パスワード
   >>>コマンドバーポップアップでクリック時に処理したいのですが、
>>>フォーカスを当てただけで、処理が行われてしまいます。
>>>
>>>クリックした時だけ処理を行うにはどうしたらよいのでしょうか?
>>>
>>>今ボタンを追加する処理等は下記のようになってます。
>>>
>>>Sub AddCommandBar
>>>  Dim MyCB As CommandBar
>>>  Dim MyCBC1 As CommandBarPopup
>>>
>>>  Set MyCB = Application.CommandBars("Cell")
>>>
>>>  Set MyCBC1 = MyCB.Controls.Add(Type:=msoControlPopup)
>> '  MyCBC1.OnAction = "Macro1"
>>↑これが要りません
>>>  MyCBC1.Parameter = "0"
>>>
>>>  Set MyCBC2 = MyCBC1.Controls.Add(Type:=msoControlButton)
>>>  MyCBC2.OnAction = "Macro1"
>>>  MyCBC2.Parameter = "1"
>>>
>>>End Sub
>>>
>>>Sub Macro1
>>>  
>>>  '行いたい処理
>>>End Sub
>
>説明不足ですいません。
>
>MyCBC1とMyCBC2は似ているけど、別の処理で、

ん?どいうことでうか?上記のコードの
ポップアップ コントロール にOnactionプロパティを設定しているから

>>>フォーカスを当てただけで、処理が行われてしまいます。

という現象が起こっています。
よって、これを外しては? と申し上げました。

>Macro1内で区別して処理しています

これは、Application.Callerで区別しているのですか?

【50480】Re:コマンドバーポップアップでクリック...
発言  山形  - 07/7/27(金) 0:32 -

引用なし
パスワード
   ▼bykin さん:
>Sub AddCommandBar()
>  Dim MyCB As CommandBar
>  Dim MyCBP As CommandBarPopup
>  Dim MyCBC1 As CommandBarButton
>  Dim MyCBC2 As CommandBarButton
>
>  Set MyCB = Application.CommandBars("Cell")
>  Set MyCBP = MyCB.Controls.Add(Type:=msoControlPopup)
>  MyCBP.Caption = "Popup"
>  Set MyCBC1 = MyCBP.Controls.Add(Type:=msoControlButton)
>  MyCBC1.OnAction = "Macro1"
>  MyCBC1.Caption = "Macro1-0"
>  MyCBC1.Parameter = "0"
>
>  Set MyCBC2 = MyCBP.Controls.Add(Type:=msoControlButton)
>  MyCBC2.OnAction = "Macro1"
>  MyCBC2.Caption = "Macro1-1"
>  MyCBC2.Parameter = "1"
>
>End Sub
>
>Sub Macro1()
>  MsgBox Application.CommandBars.ActionControl.Parameter
>  '行いたい処理
>End Sub

上記も考えたのですが、
ポップアップ用1つと処理用2つになるので、

ポップアップをデフォルト処理用
ボタンをイレギュラー処理用にしようと思って試してました。

>ただし、こういうときはWith使えば簡略化できまっせ。↓こんな感じ。

With文はデバッグ時に変数の値がヒントに表示されないので、使って無いです

【50481】Re:コマンドバーポップアップでクリック...
発言  山形  - 07/7/27(金) 0:34 -

引用なし
パスワード
   >ん?どいうことでうか?上記のコードの
>ポップアップ コントロール にOnactionプロパティを設定しているから
>
>>>>フォーカスを当てただけで、処理が行われてしまいます。
>
>という現象が起こっています。
>よって、これを外しては? と申し上げました。

説明不足ですいません。

フォーカスを当てた時(クリックする前)に処理して欲しくなく、
クリックした時に処理して欲しいのです。

>>Macro1内で区別して処理しています
>
>これは、Application.Callerで区別しているのですか?

Application.CommandBar.ActiveControl
で判別しています。

Application.Caller と言うのは使ったことないです。

【50482】Re:コマンドバーポップアップでクリック...
発言  bykin  - 07/7/27(金) 0:39 -

引用なし
パスワード
   せやから・・・

ポップアップでは、フォーカス当たるだけでOnActionが実行されてまうって
ことですわ。

これを回避する方法はないと思うよ。
ほな。

【50483】Re:コマンドバーポップアップでクリック...
発言  山形  - 07/7/27(金) 0:47 -

引用なし
パスワード
   ▼bykin さん:
>せやから・・・
>
>ポップアップでは、フォーカス当たるだけでOnActionが実行されてまうって
>ことですわ。
>
>これを回避する方法はないと思うよ。
>ほな。

そうですか、諦めます。
ありがとうございました。

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