Excel VBA質問箱 IV

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

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


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

【67321】メニューバーに設置したコンボボックスの値を取得したい やまたか 10/11/24(水) 11:50 質問[未読]
【67322】Re:メニューバーに設置したコンボボックス... sasa 10/11/24(水) 12:30 回答[未読]
【67323】Re:メニューバーに設置したコンボボックス... やまたか 10/11/24(水) 14:52 お礼[未読]
【67324】Re:メニューバーに設置したコンボボックス... やまたか 10/11/24(水) 15:07 質問[未読]
【67325】Re:メニューバーに設置したコンボボックス... sasa 10/11/24(水) 15:29 回答[未読]
【67326】Re:メニューバーに設置したコンボボックス... やまたか 10/11/24(水) 19:16 お礼[未読]
【67327】Re:メニューバーに設置したコンボボックス... sasa 10/11/25(木) 0:56 回答[未読]
【67376】Re:メニューバーに設置したコンボボックス... やまたか 10/11/29(月) 11:46 お礼[未読]

【67321】メニューバーに設置したコンボボックスの...
質問  やまたか  - 10/11/24(水) 11:50 -

引用なし
パスワード
   VBAマクロ作成は我流でセオリーは知らないレベルなのですが、
メニューバーにポップアップボタンとその中にボタンとコンボボックスをコード1で作成しました。
そこで、コンボボックス選択時にその値かインデックス値を取得したいのですが、エラー1となりうまく出来ません。
どなたか、対処方法をご教授願えないでしょうか?宜しくお願いいたします。

○コード1
Sub OnCommandButtonAdd()
  Call OnCommandButtonDel
  Set mymbar = Application.CommandBars("Worksheet Menu Bar")
  Set mymbar1 = mymbar.Controls.Add(Type:=msoControlPopup)
  With mymbar1
    .TooltipText = ThisWorkbook.Name
    .Caption = "ユーザメニューボタン"
  End With
  Set mymbar2 = mymbar1.Controls.Add(Type:=msoControlButton)
  With mymbar2
    .Style = msoButtonIconAndCaption
    .Caption = "XX"
    .OnAction = "OnCbarChg"
  End With
  Set mymbar2 = mymbar1.Controls.Add(Type:=msoControlComboBox)
  With mymbar2
    .Caption = "ComboBox"
    .OnAction = "コンボボックス値表示"
    .AddItem "表示A"
    .AddItem "表示B"
    .ListIndex = 1
  End With
End Sub
Sub コンボボックス値表示()
   MsgBox Application.CommandBars("Worksheet Menu Bar").Controls("ComboBox").Text
End Sub

○エラー1
プロシジャーの呼び出し、引数が不正です


尚、メニューバーではなく、
新たなツールバー(コマンドバー)とその中にボタンとコンボボックスをコード2で作成した場合は、
コンボボックス選択時にその値が取得出来ました。
コード1との相違点は、見た目でも分かるのですが、私の知識レベルの限界となってしまいました。

○コード2
Sub OnCbar
  mycbarbutton = "ユーザコマンドボタン"
  On Error Resume Next
  CommandBars(mycbarbutton).Delete
  Set mycbar1 = Application.CommandBars.Add(Name:=mycbarbutton, Position:=msoBarFloating, temporary:=True)
  Set mycbar2 = mycbar1.Controls.Add(Type:=msoControlButton)
  With mycbar2
    .Style = msoButtonIconAndCaption
    .Caption = "XX"
    .OnAction = "OnCbarChg"
  End With
  Set mycbar2 = mycbar1.Controls.Add(Type:=msoControlComboBox)
  With mycbar2
    .Caption = "ComboBox"
    .OnAction = "コンボボックス値表示"
    .BeginGroup = True
    .AddItem "表示A"
    .AddItem "表示B"
    .ListIndex = 1
  End With
  With Application.CommandBars(mycbarbutton)
    .Visible = True
    .Position = msoBarTop
  End With
End Sub
Sub コンボボックス値表示()
  MsgBox CommandBars(mycbarbutton).Controls("ComboBox").Text
End Sub

【67322】Re:メニューバーに設置したコンボボック...
回答  sasa  - 10/11/24(水) 12:30 -

引用なし
パスワード
   CommandBars("Worksheet Menu Bar")の下に "ユーザメニューボタン" を作り
その下に"ComboBox"を作っていますよ...
MsgBox Application.CommandBars("Worksheet Menu Bar").Controls("ComboBox").Text
↑"ユーザメニューボタン"がどこにも表れていません。

もっともこの場合はActionControlプロパティを用いるのが簡単です。
MsgBox Application.CommandBars.ActionControl.Text

【67323】Re:メニューバーに設置したコンボボック...
お礼  やまたか  - 10/11/24(水) 14:52 -

引用なし
パスワード
   sasa さん
ご教授有難う御座います。

”ユーザメニューボタンがどこにも表れていない”指摘箇所について、
なんとなくダメな気がしており、ドンピシャ指摘だったので苦笑してしまいました。

ご教授して頂いた通りのコードで値の取得が出来ました。
>MsgBox Application.CommandBars.ActionControl.Text

有難う御座いました。

【67324】Re:メニューバーに設置したコンボボック...
質問  やまたか  - 10/11/24(水) 15:07 -

引用なし
パスワード
   sasa さん

>MsgBox Application.CommandBars.ActionControl.Text
で、
コンボボックス選択アクション直後の値取得が可能となるとの事了解致しました。

ついては、もう一つ質問なのですが、
コンポボックスをコード3の様に複数配置し、
各々の値を同時に取得する為には、どの様な対処が可能でしょうか?

"ユーザメニューボタン"がどこにも表れていない事が本質的な原因と思いますが、
メニューバーに配置した"ユーザメニューボタン"の指定の仕方などあるでしょうか?

○コード3
Sub OnCommandButtonAdd()
  Call OnCommandButtonDel
  Set mymbar = Application.CommandBars("Worksheet Menu Bar")
  Set mymbar1 = mymbar.Controls.Add(Type:=msoControlPopup)
  With mymbar1
    .TooltipText = ThisWorkbook.Name
    .Caption = "ユーザメニューボタン"
  End With
  Set mymbar2 = mymbar1.Controls.Add(Type:=msoControlButton)
  With mymbar2
    .Style = msoButtonIconAndCaption
    .Caption = "XX"
    .OnAction = "OnCbarChg"
  End With
  Set mymbar2 = mymbar1.Controls.Add(Type:=msoControlComboBox)
  With mymbar2
    .Caption = "ComboBox"
    .OnAction = "コンボボックス値表示"
    .AddItem "表示A"
    .AddItem "表示B"
    .ListIndex = 1
  End With
  Set mymbar2 = mymbar1.Controls.Add(Type:=msoControlComboBox)
  With mymbar2
    .Caption = "ComboBox2"
    .OnAction = "コンボボックス値表示"
    .AddItem "表示C"
    .AddItem "表示D"
    .ListIndex = 1
  End With
End Sub
Sub コンボボックス値表示()
   MsgBox Application.CommandBars("Worksheet Menu Bar").Controls("ComboBox").Text ←ダメ例※お恥ずかしい...
   MsgBox Application.CommandBars.ActionControl.Text               ←アクション直後の値
   コンボボックス値表示の値表示  ←やりたい事
   コンボボックス値表示2の値表示 ←やりたい事
End Sub

【67325】Re:メニューバーに設置したコンボボック...
回答  sasa  - 10/11/24(水) 15:29 -

引用なし
パスワード
   ▼やまたか さん:
>コンポボックスをコード3の様に複数配置し、
>各々の値を同時に取得する為には、どの様な対処が可能でしょうか?
>"ユーザメニューボタン"がどこにも表れていない事が本質的な原因と思いますが、
>メニューバーに配置した"ユーザメニューボタン"の指定の仕方などあるでしょうか?

変数にsetしたり、tagを使ったり、色々ありますが、
基本的にはaddした順番通りに指定すれば良いと思います。
↓一例
MsgBox Application.CommandBars("Worksheet Menu Bar").Controls("ユーザメニューボタン").Controls("ComboBox").Text

【67326】Re:メニューバーに設置したコンボボック...
お礼  やまたか  - 10/11/24(水) 19:16 -

引用なし
パスワード
   sasa さん

ご教授有難う御座いました。

メニューバーやコマンドバーでコンボボックスの値を取得出来るようになりました。
”変数set”、”順番通りに指定すればよい”、Captionが、理解するポイントでした。
なるほどです。本当に有難う御座いました。


(出来上がったコードの例)
・・・・
  Set mymbar2 = mymbar1.Controls.Add(Type:=msoControlComboBox)
  With mymbar2
    .Caption = "コマンドバーフォーム表示条件"
    .OnAction = "OnCbarFormAdd"
    .BeginGroup = True
    .AddItem "Cbar優先"
    .AddItem "Form優先"
    .AddItem "CbarForm交互"
    .AddItem "CbarForm同時"
    .ListIndex = 1
  End With
  Set mymbarCBox1 = Application.CommandBars("Worksheet Menu Bar").Controls(cn_mbaricon).Controls(mymbar2.Caption)  ←これですね!
・・・・
  msgbox mymbarCBox1.Text
・・・・

【67327】Re:メニューバーに設置したコンボボック...
回答  sasa  - 10/11/25(木) 0:56 -

引用なし
パスワード
   ▼やまたか さん:
>  Set mymbarCBox1 = Application.CommandBars("Worksheet Menu Bar").Controls(cn_mbaricon).Controls(mymbar2.Caption)  ←これですね!
>・・・・
>  msgbox mymbarCBox1.Text

エッ、ぱっと見ですが
mymbar2とmymbarCBox1 は同じでは?
Set mymbarCBox1 はいらなくて、
msgbox mymbar2.Text でいいのでは...

【67376】Re:メニューバーに設置したコンボボック...
お礼  やまたか  - 10/11/29(月) 11:46 -

引用なし
パスワード
   sasa さん

>mymbar2とmymbarCBox1 は同じでは?
>Set mymbarCBox1 はいらなくて、
>msgbox mymbar2.Text でいいのでは...

ご指摘有難う御座います。(お返事遅れてスイマセン)

えーと、
うまく伝わるか?なのですが、次の理由からSet mymbarCBox1をしました。
解釈誤ってるでしょうか?

1.参照したいコンボボックス対象を予めセット(定義)しておく
 CommandBars→Controls(cn_mbaricon)→Controls(mymbar2.Caption)
 の順など、最後のControls(mymbar2.Caption)で対象が決まると解釈したので、
 必須なのかと...

2.複数のコンボボックスを登録し各々取得したい際にも耐えられる
 標準的なコードを作っておきたい。

3.mymbar2.Textで試したところ、やりたい制御が出来なかった。
 やりたい制御は、コンボボックス値のマクロ側からの更新もあります。


マクロ作成は我流でセオリーを知らないレベルでお恥ずかしいのですが、
作業効率を高めるため、無い知識を振り絞って理解を深めていきたいです。

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