• ベストアンサー

VBA2003: 自作メニューバーを操作したい

Application.CommandBars("Worksheet Menu Bar").Controls.Add このメソッドを使って Excelのメニューバーに自作メニューを追加しました。 メニューは階層構造になっています。 Excelのシート名によって、このメニューに定義したサブメニューやコマンドを Enabled = True/False で表示制御したいのですが、その方法がわかりません。 よろしくお願いします。

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

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

VBEのVBAProjectの中の、Thisworkbookをクリックして、イベントの SheetActivateを出して Private Sub Workbook_SheetActivate(ByVal Sh As Object) If Sh.Name = "Sheet2" Then MsgBox "AAA" End If End Sub のようにして、 Sheet2のシートタブをクリックして開くと、AAAが表示されるでしょう。他の場合は表示されないでしょう。 これを使ってそのオブジェクトをEnabled = True/False で決めれば良いのではないでしょうか。 処理を、Sheet2とそれ以外にするには、上記のIFステートメントブロックでElseを入れて、Sheet2以外の場合の処理を書き込む。

masnoske
質問者

お礼

お礼を忘れていました. 申し訳ありません.

関連するQ&A

  • メニューバーを非表示に 2007

    エクセル2007です。 Application.CommandBars("Worksheet Menu Bar").Enabled = False をしてもメニューバーが非表示になりません。 画像の部分を非表示にしたいです。 そもそもこれはメニューバーではないのでしょうか?

  • エクセル2003で作成したVBAを2007で使用したい

    エクセル2003で下記のようなVBAを作成していました。 作成した物を使用者が印刷設定を変更できないように ブックを開くと同時に印刷ボタンなどを非表示にしていたのですが・・・ 2007でも使用出来るようにしたいと思ったのですが 2007ではこのままではエラーが出てしまうようです。 2007はまったく扱ったことがないのでどのようにすればよいかわかりません。 どなたかご教授いただけたらと思います。 Private Sub Workbook_Open() Application.DisplayStatusBar = False 'ステータスバー非表示 'ブックを開く時ページ設定と印刷を非表示 On Error Resume Next Application.CommandBars("Worksheet Menu Bar").Controls("ファイル(&F)") _ .Controls("ページ設定(&U)...").Enabled = False Application.CommandBars("Worksheet Menu Bar").Controls("ファイル(&F)") _ .Controls("印刷(&P)...").Enabled = False Application.CommandBars("Worksheet Menu Bar").Controls("ファイル(&F)") _ .Controls("印刷プレビュー(&V)").Enabled = False Application.CommandBars("Worksheet Menu Bar").Controls("ファイル(&F)") _ .Controls("印刷範囲(&T)").Enabled = False Application.CommandBars("Standard").Enabled = False End Sub

  • メニューバーを非表示にしたい

    アクセス2007です。 メニューバー?リボンと言うのでしょうか? その部分を非表示にするにはどうすればいいですか? 標準モジュールに Sub test() CommandBars("Menu Bar").Enabled = False End Sub をしてみましたが何も起きません。 ご教授よろしくお願いします。

  • VBAでメニューバーの一部だけを非表示にしたい

    access2003です。 CommandBars("Menu Bar").Enabled = False これだとメニューバー全てが非表示になってしまいますが 例えば「編集(E)」だけ非表示にしたい場合は どのようなVBAコードを作ればいいのでしょうか? アドバイスよろしくお願い致します。

  • エクセルの数式バーが表示できなくなってしまいました

    エクセルのマクロでメニューバーを非表示にする処理をしました。 ↓これがマクロのソースです。 Application.CommandBars("Worksheet Menu Bar").Enabled =   Not .CommandBars("Worksheet Menu Bar").Enabled これを実行し、自分の思惑通りメニューバーが消えました。 しかし再び処理を実行し、メニューバーを表示させたのですが、数式バーが 表示されません。 どうすれば元に戻るでしょうか?

  • 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

  • ExcelVBAでのメニューバーのコントロール

    ExcelVBAでシート編集時、元に戻す・やり直し機能を使えなくするにはどういうコーディングをすればよいのでしょうか? 現在、シート表示の初期処理で以下のようなコーディングを入れていますが、機能が使えてしまうようです。 Dim Menuobj As Object Set Menuobj = Application.CommandBars("Worksheet Menu Bar") Menuobj.Controls.Item(2).Controls.Item(1).Enabled = True Menuobj.Controls.Item(2).Controls.Item(2).Enabled = True どなたか教えてください! よろしくお願いいたします。

  • VBA コマンドバーを消した後に残る空白部分

    お世話になります。 ExcelVBAで、コマンドバーの類を全て消去した後に残る、 空白部分ができる原因が解りません。 この部分をダブルクリックすると、エラーになって強制終了に なってしまいます。 完全に消してしまいたいのですが、この状況になってしまう、 原因と対策を教えてください。 内容は、『システム』という名のシートにある『ロック』ボタンを 押すと、コマンドバーを全て消去して、Sheet1に切り替わるといった 流れです。 ↓モジュール側 ------------------------------------------------------------- Dim myCB As CommandBar Public Sub onCmdBarAttr() DoEvents With Application For Each myCB In Application.CommandBars myCB.Enabled = True Next myCB .CommandBars("Standard").Visible = True .CommandBars("Formatting").Visible = True .CommandBars("Visual Basic").Visible = True .CommandBars("Worksheet Menu Bar").Enabled = True .CommandBars("CELL").Enabled = True ' タスクバーに表示させる .ShowWindowsInTaskbar = True ' 数式バーを表示 .DisplayFormulaBar = True ' ステータスバーを表示 .DisplayStatusBar = True End With End Sub Public Sub offCmdBarAttr() Dim myCB As CommandBar On Error Resume Next For Each myCB In Application.CommandBars myCB.Enabled = False Next myCB On Error GoTo 0 With Application .CommandBars("Worksheet Menu Bar").Enabled = False .CommandBars("CELL").Enabled = False ' 数式バーを消去 .DisplayFormulaBar = False ' ステータスバーを消去 .DisplayStatusBar = False ' タスクバーに表示させない .ShowWindowsInTaskbar = False End With End Sub ' シートロック Public Sub protectSheet(ByVal stSheetName As String) Application.ScreenUpdating = False ' 一旦シート保護をかけ直す With Worksheets(stSheetName) .Activate .Unprotect .Protect UserInterfaceOnly:=True ' カーソルの移動範囲を設定する .ScrollArea = "$A$1" ' 左上セルを選択 .Range("H16").Select ' 保護されたセルは選択不可にする .EnableSelection = xlNoRestrictions End With Application.ScreenUpdating = True End Sub ' シートロック解除 Public Sub unprotectSheet(ByVal stSheetName As String) ' 一旦シート保護をかけ直す With Worksheets(stSheetName) .Unprotect ' スクロール範囲を解除する .ScrollArea = "" ' 保護されたセルでも選択可能にする .EnableSelection = xlUnlockedCells End With End Sub Public Sub setBookAttribute(ByVal bFlg As Boolean) With Windows(ThisWorkbook.Name) ' タブを設定 .DisplayWorkbookTabs = bFlg ' スクロールバーを設定 .DisplayHorizontalScrollBar = bFlg .DisplayVerticalScrollBar = bFlg ' グリッドを設定 .DisplayGridlines = bFlg ' 行列数表示を設定 .DisplayHeadings = bFlg End With End Sub ↓シート側 ------------------------------------------------------ Private Sub btnProtect_Click() ' アプリケーション全体の処理 Call Module1.offCmdBarAttr ' シート単位の処理 Call Module1.protectSheet("Sheet1") ' ブック単位の処理 Call setBookAttribute(False) Worksheets("Sheet1").Activate End Sub Private Sub btnUnprotect_Click() Call Module1.onCmdBarAttr Call Module1.unprotectSheet("Sheet1") Call setBookAttribute(True) End Sub 以上、よろしくお願いいたします。

  • Access2003のメニューバー非表示について

    Application.CommandBars("Menu Bar").Enabled = False のようにするとメニューバーを非表示にすることができると思うのですが、これはだめなのでしょうか? 私の環境では終了したあと設定は元に戻っていて、問題ないのですが、ある環境では設定が戻らず別のAccessファイルを開いたときにメニューバーが消えたままになってしまうようです。 このコードは記述したAccess内だけで適用されてると思っていたのですが、ちがうのでしょうか? また、一般的にはメニューバー非表示処理はどのようにするのでしょうか?

  • メニューバーの使用可不可の

    初めて投稿いいたします。VB初心者です。 VB6.0(SP6)で、ちょっとしたテストアプリを作成中です。 メインフォーム(MDI)のメニューバーとツールバーコントロールの使用可能(不可)を切り替える方法を教えてください。 子フォームのボタンをクリックした際、内部処理実行中に、上記コントロールを一時的に使用不可とさせたい次第です。 現状は、下記のような方法で実現させていますが、あまりスマートな方法とは言えないように思います。 -----禁止させる場合-------------------------------- Private Sub CommandDisable_Click() 'メニューバー禁止 MDIForm1.mnuFile.Enabled = False   'ツールバーボタン禁止 MDIForm1.Toolbar1.Buttons(1).Enabled = False End Sub -------------------------------------------------- -----禁止を解除させる場合-------------------------- Private Sub CommandEnable_Click() 'メニューバー禁止 MDIForm1.mnuFile.Enabled = True   'ツールバーボタン禁止 MDIForm1.Toolbar1.Buttons(1).Enabled = True End Sub -------------------------------------------------- 上記の方法で、メニューバーまたはツールバーともにグレイ表記となり、割り当てた機能が呼び出されることを防ぐことは実現出来ています。 しかし、メニューバー、ボタンともに、クリックだけは出来てしまいます。 どなたか、クリックも含めて、使用不可とさせる方法を教えてください。 よろしくお願いします。

専門家に質問してみよう