• ベストアンサー

フォームにメニューを追加するには?

Excel2007のマクロ(VBA)を使って組んでいます。 フォーム上にニューを作りたいのですが、どうしてもExcel自体のアドインの下にメニューコマンドとして出来てしまい、フォーム(UserForm)の上にできません。 VBであれば、メニューEditorがありましたが、VBAではどうしたら良いのでしょうか。 下のプログラムはModule2に記述し、UserFormからCallしています。 Sub AddMyMenu() Dim Cbar As CommandBar Dim CbarCtrl As CommandBarControl Set Cbar = Application.CommandBars("Worksheet menu bar") : : End Sub どなたかご存知であれば教えていただけないでしょうか?

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

  • ベストアンサー
  • hige_082
  • ベストアンサー率50% (379/747)
回答No.1

リンク先が参考になると思います UserFormでツールバーを使う http://officetanaka.net/excel/vba/tips/tips58.htm

cya26222
質問者

お礼

回答ありがとうございます。 メニューバーができなくても、この方法で私のイメージに近いようなので、さっそくURLを参考にして試してみました。 「Microsoft ImageList Control 6.0(SP4)」 「Microsoft Toolbar Control 6.0(SP4)」 その物がなく、(SP4)無しが一番近かったのでそれにチェックをしました。 ツールパレットにImageとToolBarは追加され、フォームにオブジェクトを追加出来たのですが、プロパティを編集仕様としたとき『次のクラスは登録されていません。次のCLSIDオブジェクトを参照してください....』と出てきて進めません。 どこかからUpdateしないといけないようなので、探してみます。 ありがとうございました。

その他の回答 (2)

noname#187541
noname#187541
回答No.3

こんにちは。 >.NETで作れたらよいのですが、ソフトを買い足さないといけないので ExpressEditionであれば、マイクロソフトから無料でダウンロードできますよ。 http://www.microsoft.com/japan/msdn/vstudio/Express/ こちらからどうぞ。

cya26222
質問者

お礼

ありがとうございます。 こんなのがあるとは知りませんでした。 さっそくダウンロードしてみましたので、インストールして使ってみます。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

http://okwave.jp/qa/q2602839.html その機能は付いてないと思う。特別のコントロールを探さないとダメと思う。 コンボででも我慢するとか。多段式のものはダメと思うし。 質問のコードはエクセルワークシートウインドウのメニューのもので、見当違いとおもう。

cya26222
質問者

お礼

回答ありがとうございます。 やはりそうですか。 .NETで作れたらよいのですが、ソフトを買い足さないといけないので、今持っているもので作ろうとしました。 別の方法も考えてみます。

関連するQ&A

  • メニューバーのイベントが2回実行される

    CommandBarControlでメニューバーを作成し、イベントを実行していますが、何故か2回実行されてしまいます。 具体的には、  Set myMenu = Application.CommandBars("Worksheet Menu Bar"). _ Controls.Add(Type:=msoControlPopup, before:=11) With myMenu .Caption = "User's MenuBar(xx)" With .Controls.Add .Caption = "フォームを開く" .OnAction = "OpenForm(2)" End With 上記で「フォームを開く」メニューバーを作成して、これを選択すると、UserForm1.Show というロジックが書かれているSubプロシジャーが実行されます。 これにより、フォームが開くのですが、どうもこのプロシジャーが2回実行されており、フォームが2つ開いているのです。 しかし、原因がわかりません。 対策としては、 1.2回実行される原因を調べる。 2.UserForm1が既に開いていたら開かないようにロジックを変更す   る。 1は皆無ですし、2はUserForm1が既に開いているかをチェックするロジックが分かりません。 どなたか教えて下さい。 よろしくお願いします m(_ _)m

  • エクセルVBA アドイン メニューの作成方法

    OS:windowsXP HomeEdition ソフト:Excel2003 アドインを作成し配布したいのですが、xla形式で保存しエクセル上でアドインさせ、 作成したメニューからテスト起動させてみると、アドインの元のファイル(拡張子xls)が 展開してしまいます。展開させずにアドインプロシージャを起動させたいのですが 何が原因か調べてもわかりませんでした。知っている方、ご助言御願い致します。 以下に、私の作成したマクロを記述します。 マクロ解説HPで勉強しつつ作成致しました。 ~~~~~~~~~~~~~~~~~~~~~~~~~ <ThisWorkBookへの記述> Dim mySubMenu As CommandBarControl Sub MakeSubMenu() Dim myMenu As CommandBar Dim cmdSubMenu As CommandBarControl 'すでにサブメニューがあれば削除する DelSubMenu Set myMenu = Application.CommandBars("worksheet Menu Bar") Set mySubMenu = myMenu.Controls.Add(Type:=msoControlPopup) mySubMenu.Caption = "メニュー" Set cmdSubMenu = myMenu.Controls("メニュー").Controls.Add(Type:=msoControlButton) cmdSubMenu.Caption = "コマンド1" 'サブメニューでコマンド1を選択したとき cmd1() を呼び出す cmdSubMenu.OnAction = "cmd1" Set cmdSubMenu = myMenu.Controls("メニュー").Controls.Add(Type:=msoControlButton) cmdSubMenu.Caption = "コマンド2" 'サブメニューでコマンド2を選択したとき cmd2() を呼び出す cmdSubMenu.OnAction = "cmd2" End Sub Sub DelSubMenu() 'メニューバーのサブメニューを削除する On Error Resume Next mySubMenu.Delete End Sub <標準モジュールへの記述> Private Sub cmd1() MsgBox "コマンド1を選択しました" End Sub Private Sub cmd2() MsgBox "コマンド2を選択しました" End Sub ~~~~~~~~~~~~~~~~~~~~~~~ 尚、マクロは簡略化し、のせております。 よろしく御願い致します。

  • Office2007でコマンドバーの作り方

    最近Officeを2003から2007に変更しました。 2003では、『頻繁におこなう作業』を『VBAでコマンドバー上のボタン』化して、効率化していました。 例) Dim MyBar As CommandBar Dim MyButton1 As CommandBarControl Set MyBar = Application.CommandBars.Add(Name:=cnstCommandBarName, Position:=msoBarLeft) MyBar.Visible = True Set MyButton1 = MyBar.Controls.Add(Type:=msoControlButton, Id:=1) ところが、2007では、コマンドバーはできず、アドインリボンにボタンができてしまいます。 コマンドバー化は2007ではできないでしょうか? Web検索でも調べていますが、Office コマンドバーなどの検索ワードだと関係ないものを拾ってしまい、なかなか調べられません。 助言お願いします。

  • Excelで追加した右クリックメニューが動かない

    Windows Vista Excel2007です。 Sheet1に、次のようにVBAでプログラミングしたのですが、 '------------------------------------------------------------------------------- Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)   Application.CommandBars("Cell").Reset   With Application.CommandBars("Cell").Controls.Add()     .Caption = "テスト"     .OnAction = "test"   End With End Sub Public Sub test()   MsgBox "OK" End Sub '------------------------------------------------------------------------------- 右クリックメニューには追加できたのですが、その「テスト」メニューをクリックすると、 次のようなエラーダイアログが表示されます。 「マクロ'Book1!test'を実行できません。このブックでマクロが使用できないか、 またはすべてのマクロが無効になっている可能性があります。」 セキュリティセンターは「すべてのマクロを有効にする」に設定しており、他のマクロは正常に動作します。 どうしてエラーになるのか全く分かりません。 どなたか原因をご存知の方、ご教示をお願いします。

  • シートのボタンからフォーム出した場合、チェックボタンの動作がうまくいきません

    フォーム上の2つのチェックボタンをトグルさせたいのですが、シート上に設定したコマンドボタンからフォームを表示させると、トグルがうまくいきません。 尚、メニューからフォームを表示させた場合、正しく動作します。 回避させる手段はあるでしょうか? これはエクセルの仕様なのでしょうか? Excel2003です(英語版)。英語版Windows7Proです。 フォームのVBA Private Sub UserForm_Initialize()   CheckBox1.Value = True   CheckBox2.Value = False End Sub Private Sub CheckBox1_Click()   CheckBox1.Value = True   CheckBox2.Value = False End Sub Private Sub CheckBox2_Click()   CheckBox2.Value = True   CheckBox1.Value = False End Sub シートのVBA Private Sub CommandButton4_Click()   sb_UserForm1Show End Sub 標準モジュール Sub sb_MenuCreate()   sb_MenuDelete   Dim myMnu As Object   Dim Cap_P As String   Cap_P = "Prototype"   Set myMnu = CommandBars("Worksheet menu bar").Controls.Add(Type:=msoControlPopup, Before:=3)   With myMnu     .Caption = Cap_P   End With   sb_Menu01 Cap_P, "Delete This Menu", "sb_MenuDelete"   sb_Menu01 Cap_P, "RecoverTest", "RecoverTest"   sb_Menu01 Cap_P, "Clear DataBase", "sb_ClearDatabaseConf"   sb_Menu01 Cap_P, "Show All Data", "sb_ShowAllData"   sb_Menu01 Cap_P, "Remove Autofilter", "sb_RemoveAutofilter"   sb_Menu01 Cap_P, "Add Autofilter", "sb_AddAutofilter"   sb_Menu01 Cap_P, "Remove Sub Total", "sb_RemoveSubtotal"   sb_Menu01 Cap_P, "Add Sub Total", "sb_AddSubtotal"   sb_Menu01 Cap_P, "Load Form", "sb_UserForm1Show"   sb_Menu01 Cap_P, "Import to FishDataBase", "sb_Main01" End Sub Sub sb_Menu01(Cont_P As String, Cap_P As String, On_Act As String) 'Menu Create submodule   With CommandBars("Worksheet menu bar").Controls(Cont_P)     .Controls.Add(Type:=msoControlButton, Before:=1).Caption = Cap_P     .Controls(Cap_P).OnAction = On_Act   End With End Sub Sub sb_UserForm1Show()   UserForm1.Show End Sub

  • ツールバー表示

    ExcelVBAで左端にツールバー表示をしたく、調べて表示する所までは出来ました。 ですが文字が縦向きになっております。 私は、横向きの文字にしたいのですが、方法はあるのでしょうか? 環境はWindowsXP、Excel2003です。 以下、その部分の関係ありそうなソース(一部)。 Private Sub Workbook_Open() Dim objBar As CommandBar Dim objCont As CommandBarControl Dim objBtn As CommandBarButton Set objBar = xlAPP.CommandBars.Add(Name:=g_cnsTITLE, Position:=msoBarLeft) Set objCont = objBar.Controls.Add(Type:=msoControlButton) Set objBtn = objCont objBtn.Caption = "ボタン1"

  • PowerPointでマクロをショートカットキーに割り当てる方法

    現在、エクセルで以下のようなマクロをアドインとして作成して、「CTRL+,」と「CTRL+.」で表示倍率を変えれるようなショートカットを割り当ててます。 同じことをパワーポイントでアドインを作成してやろうとすると、Application.OnKeyのところでエラーになってしまいます。同じVBAでも違うんでしょうか。 PowerPointで同じことをやろうとするとどうすればいいでしょうか? ご存知の方がいらっしゃれば教えてください。 ==================================================== Option Explicit Sub auto_open() Start 1 End Sub Sub Start(num%) Dim myBar As CommandBar Dim myCtrl As CommandBarControl Application.OnKey "^{.}", "Zoomup" Application.OnKey "^{,}", "Zoomdown" End Sub Sub Zoomup() If ActiveWindow.Zoom < 390 Then ActiveWindow.Zoom = ActiveWindow.Zoom + 5 End If End Sub Sub Zoomdown() If ActiveWindow.Zoom > 10 Then ActiveWindow.Zoom = ActiveWindow.Zoom - 5 End If End Sub

  • VBA を使用してexcel起動時に 右クリックメニューの行削除や列削除を無効にしようとするとエラーが出ることがある。

    お世話になります。 VBA を使用してexcel起動時に 右クリックメニューの行削除や列削除を無効して、下記VBAを作成しました。 しかしながら、起動時(実行時)に 「実行時エラー 5 プロシージャの呼び出し、または引数が不正です。」が出ることがあります。 でないときもあるのですが、 デバック時にとまるところは、毎回変わり(1)~(5)のどれかで止まります。 使用したい環境はexcel2007,excel2003で正常に動くようにしたいのですが、何卒よろしくお願いします。 *************ソース********************* Private Sub Workbook_Open() InsertEnabled False End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) InsertEnabled True End Sub Private Sub InsertEnabled(flg As Boolean) With Application (1) Application.CommandBars("Worksheet Menu Bar").Controls("挿入(&I)").Enabled = flg (2) Application.CommandBars("Cell").Controls("挿入(&I)...").Enabled = flg (3)Application.CommandBars("Cell").Controls("削除(&D)...").Enabled = flg (4)Application.CommandBars("Row").Controls("挿入(&I)").Enabled = flg (5)Application.CommandBars("Row").Controls("削除(&D)").Enabled = flg .CommandBars.FindControl(, 296).Enabled = flg .CommandBars.FindControl(, 293).Enabled = flg End With End Sub

  • VBA ユーザーフォームの Keypreview について

    いつもお世話になっています。 VBAのユーザーフォーム上で、KeyDown イベントを使いたいのですが、下のコードが動きませんでした。 Private Sub UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If e.KeyCode = Keys.z Then MsgBox "効いてるよ!" End If End Sub エラー表示も出ません。 ウェブで調べたところ、VBでは「KeyPreview」プロパティーを「true」にすれば解決するという記事をあちこちで見かけましたが、VBA(Excel2003)のユーザーフォームプロパティには、そのような項目が見当たりません。コード上で無理やり設定してみるとエラーになります。 どのようにすれば解決するでしょうか? お知恵をお貸し下さい。

  • EXCEL VBAでメニュー作成時のメニュー名表示

    EXCEL VBAでサブメニューなしのメニューを下記コードで作成したところ、 メニューにメニュー名"新しいメニュー(&C)"が表示されず、 メニューの領域(表現がいまいちですが..)のみ作成されます。 (EXCEL=2002SP3 OS=WindowsXP Home Edition Ver.2002 SP2) Dim myBar As CommandBarButton Set myBar = Application.CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlButton) myBar.Caption = "新しいメニュー(&C)" myBar.OnAction = "マクロ" myBar.Visible = True 作成したメニューで右クリックから"ユーザー設定"画面を表示し内容を見ると、 "名前(N):"には"新しいメニュー(&C)" と設定されているのですが、 "既定のスタイル(U)"にチェックが入っており、これを "テキストのみ表示(T)"にチェックを入れると、メニューに 名前"新しいメニュー(&C)"が表示されます。 作成したメニューの名前の表示方法(VBAから)をご教授ねがいます。

専門家に質問してみよう