• 締切済み

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 どなたか教えてください! よろしくお願いいたします。

みんなの回答

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.1

True ではなく False でしょう。 Dim Menuobj As Object Set Menuobj = Application.CommandBars("Worksheet Menu Bar") Menuobj.Controls.Item(2).Controls.Item(1).Enabled = False Menuobj.Controls.Item(2).Controls.Item(2).Enabled = False

eternity92
質問者

お礼

ありがとうございました。 Falseで無事、機能が使えないようになりました。 (情けない...) 反対でもテストをしてみないといけませんね。

関連するQ&A

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

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

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

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

  • ExcelVBAで質問です。全画面表示が解除できなくなりました。

    ExcelVBAで質問です。全画面表示が解除できなくなりました。 ExcelVBAで下記のコードを実行したらワークシートの全画面表示が解除できなくなりました。一度Excelを閉じて違うファイルを開いても同様の結果になりました。いろいろな解除方法を実行しても解除されません。大変困っています。どなたか解除する方法を教えて下さいませんか。 Private Sub Workbook_Open() Dim cb As CommandBar Dim w As Window Dim ws As Worksheet On Error Resume Next 'ツールバーを表示/非表示 For Each cb In Application.CommandBars cb.Enabled = Mode Next '数式バー/ステータスバーの表示/非表示 Application.DisplayFormulaBar = Mode Application.DisplayStatusBar = Mode 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

  • エクセル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

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

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

  • 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 以上、よろしくお願いいたします。

  • エクセル ルーチンマクロ

    エクセルにて、コピー貼付を禁止するマクロを、教えてGooの過去のQ&Aから、参照させていただきました。 '--------------------------------------------------------------- Sub DisableCommandButtons(Cmd_bln As Boolean) 'コピー・貼り付けを停止させるサブルーチン・マクロ  Dim cmd As Variant  Dim Cmdb As Object  Dim CmdNames As Variant  CmdNames = Array("Worksheet Menu Bar", "Cell", "Column", "Row")  'ショートカットのインスタンス  If Cmd_bln = False Then   Application.OnKey "^c", ""   Application.OnKey "^v", ""   Application.OnKey "^x", ""  Else   Application.OnKey "^c"   Application.OnKey "^v"   Application.OnKey "^x"  End If  'コマンドボタンのEnable  For Each cmd In CmdNames  If cmd = "Worksheet Menu Bar" Then   With Application.CommandBars(cmd).Controls(2)    .Controls(3).Enabled = Cmd_bln    .Controls(4).Enabled = Cmd_bln    .Controls(5).Enabled = Cmd_bln   End With  Else   With Application.CommandBars(cmd)    .FindControl(, 19).Enabled = Cmd_bln 'Copy    .FindControl(, 22).Enabled = Cmd_bln 'Paste    .FindControl(, 21).Enabled = Cmd_bln 'Cut   End With  End If  Next cmd End Sub '--------------------------------------------------------------- このマクロを実行した所、コンテキストメニュー及びショートカットキーのコピー、貼付が無効になりました。 しかし、マクロを有効にしたエクセルファイルを閉じても、他のエクセルファイルもコピー、貼付が無効になってしまいました。 コピー、貼付を有効にするためのマクロを動かさないとダメなのか?と思い、色々試してみたのですが、うまくいきません。 EnableCommandButtons というマクロを別に作り ショートカットのインスタンスの  If Cmd_bln = False Then を  If Cmd_bln = True Then に 書き換えて、実行した所、ショートカットキーは有効になったのですが コンテキストメニューのコピー、貼付を有効にするやり方がわかりません。 どなたか、助けていただけないでしょうか? よろしくお願い致します。

  • エクセル ルーチンマクロ

    以前コピー・貼り付けを停止させる為に、下記マクロを参照させて頂いたのですが、 '--------------------------------------------------------------- Sub DisableCommandButtons(Cmd_bln As Boolean) 'コピー・貼り付けを停止させるサブルーチン・マクロ  Dim cmd As Variant  Dim Cmdb As Object  Dim CmdNames As Variant  CmdNames = Array("Worksheet Menu Bar", "Cell", "Column", "Row")  'ショートカットのインスタンス  If Cmd_bln = False Then   Application.OnKey "^c", ""   Application.OnKey "^v", ""   Application.OnKey "^x", ""  Else   Application.OnKey "^c"   Application.OnKey "^v"   Application.OnKey "^x"  End If  'コマンドボタンのEnable  For Each cmd In CmdNames  If cmd = "Worksheet Menu Bar" Then   With Application.CommandBars(cmd).Controls(2)    .Controls(3).Enabled = Cmd_bln    .Controls(4).Enabled = Cmd_bln    .Controls(5).Enabled = Cmd_bln   End With  Else   With Application.CommandBars(cmd)    .FindControl(, 19).Enabled = Cmd_bln 'Copy    .FindControl(, 22).Enabled = Cmd_bln 'Paste    .FindControl(, 21).Enabled = Cmd_bln 'Cut   End With  End If  Next cmd End Sub '--------------------------------------------------------------- このマクロを実行した所、コンテキストメニュー及びショートカットキーのコピー、貼付が無効になりました。 EnableCommandButtons というマクロを別に作り ショートカットのインスタンスの  If Cmd_bln = False Then を  If Cmd_bln = True Then に 書き換えて、実行した所、ショートカットキーは有効になったのですが コンテキストメニューのコピー、貼付を有効にするやり方がわかりません。 以前、 同じ質問させていただき、ご回答頂いたのですが、別のPCでは、その方法でもダメなことが分かりました。 OSはXP Pro エクセルはは2003です どなたか、助けていただけないでしょうか? よろしくお願い致します。

  • コマンドバーのコントロールって全部で何個あるの?

    全部一覧にして書き出してみたいのですが エラーを無視してる為、最高いくつあるのかわかりません。 Sub tes() Dim myBar As CommandBar Dim myCmd As String Dim blYes As Boolean Dim i As Long myCmd = "test" For Each myBar In CommandBars If myBar.NameLocal = myCmd Then blYes = True '既にmyCmdがあるのなら削除する Application.CommandBars("test").Delete Exit For End If Next Set myBar = CommandBars.Add(Name:="test") On Error Resume Next For i = 1 To 2000 myBar.Controls.Add ID:=i Next i myBar.Visible = True Set myBar = Nothing End Sub