コマンドバーについて(エクセルVBA)

このQ&Aのポイント
  • エクセルの表示-ユーザー設定-コマンドのコマンドで、分類を書式を選び、塗りつぶしの色、パターン、罫線などをドラッグ&ドロップしてコマンドバーに配置し、ボタンの右側の▼印をクリックするとプルダウンでメニューが出てきます。
  • そのメニューには、切り取り線「・・・・・・・」が入っており、コマンドバーから切り離して表示することが出来ます。
  • また、プルダウンメニューには、ボタンイメージが縦横に配列でき、区切り線の下に、普通のボタンイメージとテキスト表示が出来ます。(典型的な例は、罫線)
回答を見る
  • ベストアンサー

コマンドバーについて(エクセルVBA)

エクセルの表示-ユーザー設定-コマンドのコマンドで、分類を書式を選び、塗りつぶしの色、パターン、罫線などをドラッグ&ドロップしてコマンドバーに配置し、ボタンの右側の▼印をクリックするとプルダウンでメニューが出てきます。そのメニューには、切り取り線「・・・・・・・」が入っており、コマンドバーから切り離して表示することが出来ます。また、プルダウンメニューには、ボタンイメージが縦横に配列でき、区切り線の下に、普通のボタンイメージとテキスト表示が出来ます。(典型的な例は、罫線) 同じようなことをVBAから作ることってできるのでしょうか?結構便利な機能だと思うのですが・・?どなたか?詳しい方いらっしゃいましたらご指導のほど宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

ちょっと見直してみました。私は、別に本を参考にしたわけではありませんが、ここらあたりの項目については、アドインの件を含めて、しかるべき本を購入して、ご自身で研究されると良いです。もう、wan_wanさんのご質問は、掲示板では、たぶん、追いつかないように思います。 それと、こういうものは、ご自分で書いたものを構築していくのが良いと思います。SourceSafe (ソースのストック)は、Developer ToolやVB6でしか付いておりませんが、Developer もVB6も過去のものですから、フリーのアドイン MZ Tool 3.0 (www.mztools.com )が、こうしたややこしいものには、ソースをストックしておけば役に立ってくれます。使えば、使うほど、なじんできます。特に、システムを構築するときは、このMZ Toolが役に立ちます。 それから、おそらく、開発のこういう面倒な作業は、いずれなくなるかと思います。 なお、以下は、あまり詳しく検査していませんので、多少の問題は目をつぶってください。 Sub CommandMenu_Add()  Dim myCBCtrl As CommandBarControl  Dim mySubCB As CommandBarControl  Dim myCBC As CommandBar  'ユーザーメニューは、最初に、メニュー削除を置き、二重登録させないようにする  On Error Resume Next    Application.CommandBars("ユーザーメニュー").Delete  On Error GoTo 0  'オブジェクト変数を置くほうが楽  Set myCBC = Application.CommandBars.Add(Name:="ユーザーメニュー", Position:=msoBarTop, Temporary:=True)     Set myCBCtrl = myCBC.Controls.Add(Type:=msoControlPopup)  With myCBCtrl   .Caption = "メニュー(&U)"   .BeginGroup = True   .TooltipText = "ユーザーメニューの設定の仕方(&U)"  End With    Set mySubCB = myCBCtrl.CommandBar.Controls.Add(Type:=msoControlButton)  With mySubCB   .Caption = "コマンド1(&A)"   .OnAction = "msg1"   .FaceId = 481  End With  Set mySubCB = myCBCtrl.CommandBar.Controls.Add(Type:=msoControlButton)  With mySubCB   .Caption = "コマンド2(&B)"   .OnAction = "msg2"   .FaceId = 482  End With  Set mySubCB = myCBCtrl.CommandBar.Controls.Add(Type:=msoControlButton)  With mySubCB   .Caption = "メニュー消去(&X)"   .OnAction = "DeleteMenu"   .FaceId = 483  End With myCBC.Visible = True Set mySubCB = Nothing Set myCBCtrl = Nothing Set myCBC = Nothing End Sub Private Sub Msg1()  MsgBox "コマンド1が実行されました。" End Sub Private Sub Msg2()  MsgBox "コマンド2が実行されました。" End Sub Private Sub DeleteMenu()  If MsgBox("メニューを消去してよいですか?", vbOKCancel) = vbOK Then   On Error Resume Next    Application.CommandBars("ユーザーメニュー").Delete   On Error GoTo 0  End If End Sub

wan_wan
質問者

お礼

丁寧なご指導、いつもありがとう御座います。 エクセルの2007をまだダウンロードしていないのでわかりませんが、最近、.NETの本を立ち読みしてみると、確かに、メニューの作成の仕方がまるっきり変わっているように思えました。ご忠告ありがとう御座います。また、無駄な労力をしてただでさえ前に進まないのに、停滞するところでした。ご指導頂いた内容を参考に、自己研鑽に励みたいと思います。 今後とも宜しくお願い致します。

wan_wan
質問者

補足

ご指導頂いたマクロを実行しましたが、▼マークは出るのですが、切り離しが出来ませんでした。チョット、イメージと違っています。が、ご指導のように、VB6当りの本を読んで勉強してみたいと思います。 本当にご丁寧にありがとう御座いました。

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

訂正します。 >つまり、カスケード型のメニューがほしいということですね。 カスケード型ではありませんでした。あくまでも、ドロップダウンボタンによって、その中が開くものです。これらの作り方、名称については、マニュアルをみていただくのが正確です。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

Wendy02です。 >▼マークがついたボタンを作りたいってことにもなります。 まとまった時間が取れそうもないので、サンプルは作れませんが、それは、ツールボタンの種類のことですね。 #1 で、ふと気にはなっていましたが、そういう下位のメニューなどは、サンプルとしてはと面倒なので、割愛してしまいました。つまり、カスケード型のメニューがほしいということですね。 それは、.Controls.Add Type:=msoControlButtonDropdown などのことをさすのでしょうか? 後は、ヘルプなどでごらんになれば、見当が付くのではないかと思います。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。Wendy02です。 通常は、ユーザー設定で、ツールバーを新規作成して、その上に、コマンドボタンなどを乗せていく方法ですね。 >同じようなことをVBAから作ることってできるのでしょうか? 私は、前回と同じパターンになりますが、こんな風に、マクロで作ります。なお、キャプションが入れてありますので、ツールチップスのように出てきます。 ボタンを開いた後のメニューをカスケードにするのでしたら、一番上は、PopUp にしてから、繋げていってください。 Sample コード '--------------------------------------------------- Sub ToolBarsSetting() 'ツールバーの設定 Application.CommandBars.Add Name:="UserToolBars1", Temporary:=True With Application.CommandBars("UserToolBars1")   With .Controls.Add(Type:=msoControlButton, Temporary:=True)     .FaceId = 481 'ハート     .Caption = "myMacro1の実行"     .OnAction = "myMacro1"   End With   With .Controls.Add(Type:=msoControlButton, Temporary:=True)     .FaceId = 482 'ダイヤ     .Caption = "myMacro2の実行"     .OnAction = "myMacro2"   End With   With .Controls.Add(Type:=msoControlButton, Temporary:=True)     .FaceId = 483 'スペード     .Caption = "myMacro3の実行"     .OnAction = "myMacro3"   End With   With .Controls.Add(Type:=msoControlButton, Temporary:=True)     .FaceId = 484 'クローバ     .Caption = "myMacro4の実行"     .OnAction = "myMacro4"   End With   .Visible = True   .Position = msoBarLeft '左側壁面に貼り付け End With End Sub '--------------------------------------------------- Sub ToolBarsReset() 'ツールバーの解除 On Error Resume Next  Application.CommandBars("Usertoolbars1").Delete End Sub '--------------------------------------------------- Private Sub myMacro1()  MsgBox "myMacro1が実行されました", vbInformation End Sub Private Sub myMacro2()  MsgBox "myMacro2が実行されました", vbInformation End Sub Private Sub myMacro3()  MsgBox "myMacro3が実行されました", vbInformation End Sub Private Sub myMacro4()  MsgBox "myMacro4が実行されました", vbInformation End Sub '--------------------------------------------------- p.s. http://oshiete1.goo.ne.jp/kotaeru.php3?q=2259005 >PasteFaceで貼り付けると、なんと、絵が一回り小さくなってしまいます。 これについては、詳しくは分かりませんが、貼り付ける画像の種類の問題なのか、と思っています。もともと、私の情報は、海外のサイトで読んだもので、また、今のところ、Excel 2003 をいじってはいないので、深く突っ込んではいません。VB6 のような手軽さはないようです。 >肥大化の問題が残ります。 以前の話を読まれたのですね。私は、一旦、ファイルをリセットする以外に、明快な解決策を持っておりません。 私は、既存の以下のような公認されたツール以外のツールは使わない方針です。 そのようなマクロを含んだブックの肥大化の問題を解消するツールがあるのは知っておりますが、おそらくは、内容をそのまま、コピーして、中身の画像ファイルのカウントのインクリメンタルな数値などをリセットしているのだろうと思っています。 VBのディストリビューション・ウィザードは、VB6(Visual Studio) のツールです。 EXEPress インストーラ(誤:インストローラ)は、代表的なフリーのツールです。 インストーラの比較 http://dobon.net/vb/installer/index.html

wan_wan
質問者

補足

いつもいつもご指導ありがとうございます。 質問の仕方が悪かったのが原因ですが、少し意味合いが違う内容となってしまいました。確かに、ワークシート上に引張り出した時の結果は同じなのですが、コマンドバーにくっついている時の状態が私のイメージと異なっています。貴重なお時間を割いて、指導して頂いていて誠に恐縮ですが、重ね重ねご指導のほど願えないでしょうか? コマンドバーに罫線のボタンを貼り付けた時に右側に▼の印がでます。それをクリックすると下にメニューが開くのですが、・・・・で切り取り線みたいなのが出てきます。そして、「ドラッグするとメニューを切り離せます」ってコメントがでて、ドラッグすると、切り離せます。切り離したあとは、×マークで、閉じることも出きるのですが、ご指導いただいた内容ですと、またコマンドバーの表示のマクロを起動させる必要があります。しかし、標準の機能の罫線の場合は、また、▼をクリックするとメニューが展開されます。 別の言い方をすると、▼マークがついたボタンを作るりたいってことにもなります。 凄く、説明が悪くて恐縮ですが、気持ちが通じたでしょうか?お忙しい中、ご指導願えれば幸いです宜しくお願い致します。

関連するQ&A

  • コマンドバーのイメージの設定(エクセルVBA)

    アドインファイルを作ろうと考えてます。その時、アドインファイルに組み込むマクロのイベントをコマンドバーにて行おうと思っています。表示-ツールバー-ユーザー設定で、ツールバーの新規作成を行いユーザー設定のコマンドでコマンドボタンを貼り付けボタンイメージの編集でフェースを変更、マクロの割付を行いました。で、アドインファイルで保存しようと思ったのですが、コマンドバーを一緒に保存って出来るのでしょうか?それとも、Initializeで、一から作成しないと駄目なんでしょうか?その時、ボタンのイメージはどのように設定(同時に、ボタンイメージの編集で作成したイメージの保存)はどのように行えば宜しいのでしょうか? CommandBars、CommandBarControlで、コマンドバーの追加、マクロの割付までは出来るのですが、ヘルプで見ると、Obj.FaceId = 17と使用例がありますが、これだとエクセル標準のイメージしか使えないような気がしますが?ネットで配布されているアドインでは、オリジナルのコマンドーバーのイメージが使われています。どなたか、詳しい方教えて頂けないでしょうか?宜しくお願い致します。

  • vistaのコマンドバーの表示方法

    vista使用で、「お気に入り」に追加しているどのサイトを開いてもメニューバー(ファイル、編集etc)が消えてしまい、コマンドバーの「整理」ボタンからレイアウトの表示を行おうとしたのですが、コマンドバーも消えてしまっていて、メニューバーの再表示ができません。 整理ボタン(コマンドバー)の再表示方法を教えて下さい。 補足 Altキーを押してもメニューバーは表示されませんでした よろしくお願い致します

  • IE8のコマンドバーが表示できない

    Internet Explorer8で、コマンドバー(ホームページのボタンや、お気に入りセンターの表示ボタン)が表示できなくなってしまいました。 メニューバーで右クリックすると「コマンドバー(C)」という項目はあるのですが、それを選択しても表示されません。 選択してもチェックもつきません。 地震による停電でPCが落ちて、その後再起動してからこのような状況になっています。 レジストリや設定ファイルなどで何かが壊れたのでしょうか? ■環境  Windows XP SP3  Internet Explorer 8.0.6001  Googleツールバー、gooスティックを使用中

  • Word:『ページ罫線の絵柄』

    [罫線]メニュー  ↓ [罫線とページ罫線と網かけの設定]ダイアログ  ↓ [ページ罫線]パネル  ↓ 「絵柄」のプルダウンメニュー …が、変なんです☆ どんなふうに「変」かっていうと… 横の▼をクリックしても、プルダウン のメニューに絵柄が表示されません! というか、表示はされるけど、 ぐちゃぐちゃで、何の絵柄か分かりません(^^;;) でも、とりあえずどれかを選ぶと、 ダイアログのプレビューには、 ちゃんと表示されるし、そのまま [OK]ボタンをクリックすれば、 本文にも適用されます ちなみに、おかしいのはカラーの絵柄 だけで、モノクロの絵柄は、問題なく 表示されます。 これって何が原因なのでしょうか。 また、どうすれば直りますか???

  • wordとかエクセルのドロップダウンメニューにある各コマンドの横にアル

    wordとかエクセルのドロップダウンメニューにある各コマンドの横にアルファベットがありますが、切り取り(t)とかというのてす。何の意味があるのか教えて下さい。知ってると操作上役に立つとか便利とかありますか。

  • Excel VBA --- コマンドボタンが表示上で消える ---

    Excel VBAの初心者です。 今回、マニュアル本を見ながら試行錯誤でマクロにチャレンジしています。 用語や説明が上手くできないかもしれませんがよろしくお願いします。 OSはWindows2000、Excelのバージョンは2000です。 sheet1をメニュー画面として、コマンドボタンをいくつか貼り付けて、そのシート名を表示したコマンドボタンをクリックすると別のシートに 飛ぶようにしています。 別のシートに飛んで、そこで作業を終えたら、今度はそのシート上に貼り付けた『メニューに戻る』コマンドボタンをクリックしてsheet1のメニュー画面に戻るようにマクロを組みました。 ところが、作業用のシートからメニューに戻ると前回クリックしたコマンドボタンが表示上消えてしまっています。 そのコマンドボタンがあった位置にカーソルを持って行ってクリックするとちゃんとコマンドボタンの動作をします。 同じような質問がないか検索してみましたら『コマンドボタン上の文字の表示がおかしくなる』という質問があって、下記コードを入れたら解決したそうなので、Sheet1に下記のようなコードを入れてみました。 でもダメでした。 Private Sub Worksheet_Activate() Application.ScreenUpdating = False ActiveWindow.ScrollRow = 100 ActiveWindow.ScrollRow = 1 End Sub 解決方法のご教授をお願い致します。

  • エクセルVBAに関する質問です。

    フォームのコマンドボタンを押すと、シート1のA1が選択され、その後、何もせず数字を入力すると、シート1のA1にその数字が入るようにしたいのですが、どうすればよいのでしょうか? フォームはメニュー代わりに使いたいので、常に表示させておきたいです。 よろしくお願いします。

  • Excelの切取り線?

    Excel2003を使っています。 昨日友人からエクセルの「編集」メニューに「切り取り線」ボタンがあるから便利だと教えてもらいました。 自宅に帰ってみてもそんなボタンはありませんでした。どうやったら表示できるか教えて頂けませんか? 宜しくお願いします。

  • Word2007 オートSUMのボタンが見当たりません

    Word2007で、表を作り、数字を入力しました。小計をしたいのですが、Σ:オートSUMのボタンが見当たりません。 [ツール]→[ユーザ設定]→[コマンド]→  (分類)[表/罫線]→(コマンド)[オートSUM]をメニューバーまで ドラッグする という回答を見つけましたが、ツールバーの出し方も分かりません。 宜しくお願いします。

  • コンボボックスから検索するVBA(エクセル)

    sheet1にメニュー画面 sheet2に一覧表を作成しました。 (1)sheet1でユーザーフォームを起動させる。 (2)ユーザーフォームにはコンボボックスを1つ、コマンドボタンを2個配置しました  (3)コンボボックスのプルダウンメニューはsheet2の一覧表より取得しました (4)sheet2の一覧表は今後データが増えていきます(データは4行目以降) という条件で以下のコードを作成しました。 (1)と(2)のコマンドボタンは正常に作動しています。 コンボボックスのコードのみ書いています。 Private Sub UserForm_Initialize() Dim i As Long With Worksheets("sheet2") For i = 4 To .Cells(Rows.Count, 3).End(xlUp).Row ComboBox1.AddItem Cells(i, 3).Value Next i End With End Sub このときプルダウンメニューを押しても空欄が表示されてしまいます。 できない理由が分かりません。よろしくお願いします。 また、Private Sub ComboBox1_Change()とは何が違うのでしょうか? 最近 VBAを始めた初心者です。よろしくお願いします。

専門家に質問してみよう