プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (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

この回答への補足

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

補足日時:2006/07/28 11:05
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/07/28 11:02

訂正します。


>つまり、カスケード型のメニューがほしいということですね。

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

Wendy02です。




>▼マークがついたボタンを作りたいってことにもなります。

まとまった時間が取れそうもないので、サンプルは作れませんが、それは、ツールボタンの種類のことですね。

#1 で、ふと気にはなっていましたが、そういう下位のメニューなどは、サンプルとしてはと面倒なので、割愛してしまいました。つまり、カスケード型のメニューがほしいということですね。

それは、.Controls.Add Type:=msoControlButtonDropdown
などのことをさすのでしょうか?

後は、ヘルプなどでごらんになれば、見当が付くのではないかと思います。
    • good
    • 0

こんばんは。

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

この回答への補足

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

補足日時:2006/07/18 22:14
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!