• ベストアンサー

エクセル95のVBAマクロに詳しい方!

エクセルの画面からメニューバー等のすべてのバーを標示させないようにするには下記の記述ということを教わりました。(有難う御座いました) 試したところ97、2000ではこれで完璧でした。 ところが95ではエラーになってしまうのです。ファイルはもちろん95形式で保存してあります。 どなたか、95に詳しい方、対処法をご教示ください。 Sub コマンドバー非表示() For Each myCB In Application.CommandBars myCB.Enabled = False Next myCB End Sub

  • moooon
  • お礼率70% (118/167)

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

  • ベストアンサー
回答No.4

何度もすみません。 Sub a() For Each myMn In MenuBars(xlWorksheet).Menus myMn.Delete Next myMn For Each myTb In Application.Toolbars myTb.Visible = False Next myTb End Sub で試してみてください Sub b() MenuBars(xlWorksheet).Reset For Each myTb In Application.Toolbars myTb.Visible = True Next myTb End Sub で戻せます。(ツールバーは全て出てしまいますが)

moooon
質問者

お礼

何度もお手数をかけ、申し訳有りません。どうもありがとうございました。 試しました。 Sub a()でメニューバーから項目が全て消えました。ありがとうございます。 ただ、バーそのものは残ってしまうんです。 これはどうしようもないですか? また、Sub b()で、通常は表示されないすべてのツールバーが出てしまいますが、これを消すには個別に指定しなければいけないのでしょうか? でてくるのは標準と書式設定だけでいいんですが。

その他の回答 (6)

回答No.7

いろいろ試してみたのですが、私の力では出来ませんでした。 API関数を使えば、もしかしたら出来るかもしれませんが・・・ あとは、メニューバーに自分の作ったメニューを表示させたりして、 ごまかす位の方法しか思いつきません。 役に立たず申し訳ありません。

moooon
質問者

お礼

ありがとうございました。 無理を言いました、すみません。 文字のでないバーでやることにしました。これでも十分です。ありがとうございました。

回答No.6

>バーそのものは残ってしまうんです。  元の質問では、メニューバーを消してませんが、消さなくてもいいですか? For Each myMn In MenuBars(xlWorksheet).Menus myMn.Enabled = False Next myMn とすれば、メニューの文字が消えず、灰色になります。 こうすれば、何もない、バーよりはましだと思いますが・・・ どうしても消したい場合は補足してください。バーを消す方法も考えてみます。(消えるかわかりませんが) >でてくるのは標準と書式設定だけでいいんですが。 標準と書式設定のみ表示させる方法です。 コメントにしてある方法でもできます。 Sub b() MenuBars(xlWorksheet).Reset For Each mytb In Application.Toolbars 'MsgBox mytb.Name 'ツールバーの名前を取得(テスト用) Select Case mytb.Name Case "標準", "書式設定" mytb.Visible = True End Select Next mytb 'Application.Toolbars("標準").Visible = True 'Application.Toolbars("書式設定").Visible = True End Sub

moooon
質問者

お礼

何度も何度もありがとうございます。 まず、sub b()は完璧でした。ありがとうございました。 >>バーそのものは残ってしまうんです。 >元の質問では、メニューバーを消してませんが、消さなくてもいいですか? 97や2000同様、バーそのものを消したいのです。 無理ならあきらめますが・・・・。 何度もすみません。

回答No.5

#1です。動作確認せず回答してしまい申し訳ありませんでした。 機能するマクロは Application.MenuBars(xlWorksheet).Reset でした。 確か、Excel95は97以降とは違い、メニューバーは他のツールバーとは一線を引いた格上の物でした(現在は全てコマンドバー)。 従って、メニューバーだけはvisibleでは消えません(今もかな?)。 97以降だとEnableで消えますが、95はそれも出来ません。 従って95の場合はメニューバー自身ではなく、「ファイル」「編集」などを一つ一つ消去(Delete)します。そのリセット命令が、上位互換となって現在のExcelでも動くわけです。 昔の名残で自分のファイルにも Application.MenuBars(xlWorksheet).Reset があったので、よく確かめずに回答してしまいました。 結局#4さんの回答で動作すると思います。

回答No.3

憶測で書いてすみません。 質問です。 (1)ヘルプにMenusおよびToolbarsは載っていますか?    Menusにカーソルを合わせF1でMenusのヘルプがでると思います。(Excel2000)    出なければ、ヘルプで検索してみてください。 (2)あった場合に    (Excel95のヘルプを良く知らないのでExcel2000のヘルプで話を進めます)   ・Menusプロパティ    ヘルプの一番上に「対象」というのがあると思いますが、    「対象」をクリックした時に、Applicationがありますか?    無ければ、「対象になるオブジェクト」を教えてください   ・Menusオブジェクト(コレクションオブジェクトになっているかも)    ヘルプの一番上に「プロパティ」というのがあると思いますが、    「プロパティ」をクリックした時に、Enabled又はVisible又はHiddenはありますか? (3)なかった場合、#2で書いたものがどれでもいいですがありますか? 以上、確認してできれば補足してください。 Excel2000のヘルプには隠しオブジェクトとしてしか紹介されていないので、 煩わしいとは思いますが、すみません。

moooon
質問者

お礼

95のヘルプでMenusが書いてあるのをコピーしました。 わたしにはよくわかりません。すみません。 ●Menusコレクションオブジェクト Application L MenuBar L Menu L MenuItem 指定されたメニュー バーにあるすべての Menu オブジェクトのコレクションです。各 Menu オブジェクトはドロップダウン メニュー、ショートカット メニュー、またはサブメニューを表します。メニュー構造の詳細については、メニューの構成要素を参照してください。 使い方 新しいメニューをメニュー バーに追加するには、Add メソッドを使います。次の使用例は、[Visual Basic モジュール] メニュー バーにメニューを追加します。 MenuBars(xlModule).Menus.Add "デバッグ(&D)" コレクションのメンバの 1 つにアクセスするには、Menus メソッドを使い、アクセスするメンバは引数で指定します。コレクションのすべてのメンバに同時にアクセスする場合は、引数を省略します。 ●Menusメソッド オブジェクトを返すメソッドです。構文 1 では単体のメニュー (Menu オブジェクト) を返し、構文 2 ではメニュー バーにあるメニューのコレクション (Menus コレクション) を返します。値の取得のみ可能です。 構文 1 object.Menus(index) 構文 2 object.Menus object 必ず指定します。対象となる MenuBar オブジェクトを指定します。 index 構文 1 では必ず指定します。メニューの名前、またはインデックス番号を指定します。たとえば、ワークシートのメニュー バーに対して Menus("ヘルプ") または Menus(8) を実行すると、[ヘルプ] メニューが返されます

回答No.2

Excel95を使用していないので確認することができませんが、 Menu、MenuBar、MenuBars、MenuItem、MenuItems、Menus、Toolbar、 ToolbarButton、ToolbarButtons、Toolbars がCommandBarsに変更されているのではないかと思われます。 構成が定かではありませんが、 Sub コマンドバー非表示() For Each myMn In Application.Menus myMn.Enabled = False Next myMn For Each myTB In Application.Toolbars myTB.Enabled = False Next myTB End Sub で試してみてください。 もしできないようならば、上記オブジェクトのヘルプを参照してみてください。

moooon
質問者

お礼

ありがとうございます。 Sub コマンドバー非表示() For Each myMn In Application.Menus myMn.Enabled = False Next myMn For Each myTB In Application.Toolbars myTB.Enabled = False Next myTB End Sub をやってみましたが、駄目でした。97機でもためしましたがやはり駄目です。残念!

回答No.1

Excel95までは他のツールバーとメニューバーは区別されていました。 確かメニューバーは Application.MenuBars(xlWorksheet) だったかと思います。 97からプログラムが変わって、どちらもコマンドバーという命令になったと記憶しています。 このマクロは上位互換があるので、95でも使用するファイルならば、メニューバーというプログラムにしておけば汎用性があります。 試してみて下さい。

moooon
質問者

お礼

さっそくありがとうございます。 Sub TEST() Application.MenuBars(xlWorksheet).Enabled = True End Sub と書いてみましたが、エラーになりました。 書き方がまずいのでしょうか?Visible = False でも試しましたが。

関連するQ&A

  • エクセルVBAでコンパイルエラー

    すみません、どうしても腑に落ちないので質問させてください。 わたしが書いて配布したBOOKのコマンドバーを非表示にするコードなのですが、エクセル2000で、myCB のところでコンパイルエラーになるという連絡がありました。 その方は数台PCをお持ちですべての端末でそうなるとのことです。 しかし、下記コードはこれまで2000でも2003でも2007でも何度も試しており、これまでそのようなことはありませんでした。 Private Sub ALLBARS_Hide()   Dim myCB As CommandBar   For Each myCB In Application.CommandBars     myCB.Enabled = False   Next myCB End Sub どういった原因が考えられるでしょうか? なお、上記コードはAuto_OpenからCallされます。

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

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

  • Excel 数式バーを非表示にしたい(VBA)

    ツール-オプション-表示-数式バーのチェックを外せば 数式バーを非表示にできますが、VBAでやりたいと思います。 次の様に記述してみましたが、書式バーの「数式バー(F)」のボタンが非表示になるだけで数式バー自体は非表示になりません。 Private Sub Workbook_Open() Application.CommandBars("formatting").Controls(23).Visible = False End Sub 次の様に記述してみても今度は「数式バー(F)」のボタンが操作不可になるだけで数式バー自体は非表示になりません。 Private Sub Workbook_Open() Application.CommandBars("formatting").Controls(23).Enabled = False 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

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

    エクセルにて、コピー貼付を禁止するマクロを、教えて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です どなたか、助けていただけないでしょうか? よろしくお願い致します。

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

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

  • VBA 保存方法を教えて下さい

    Private Sub Workbook_BeforeClose(Cancel As Boolean) If MsgBox("×ボタンは使用できません。" & vbCr & _ "よろしいですか?", vbInformation + vbOKOnly) = vbOK Then Cancel = True End If End Sub 上記の様にEXCELワークブックに記述しましたが、 別に設置した「保存終了ボタン」で終了できなくなってしまいました。 Workbook_BeforeClose が邪魔しているようです。 どうすれば解決できるでしょうか? 「保存終了ボタン」に記述しているコードは下記です。 Sub 保存終了() ActiveWorkbook.Save CommandBars("Worksheet Menu Bar").Enabled = True Application.CommandBars("Standard").Visible = True Application.CommandBars("Formatting").Visible = True Application.CommandBars("Drawing").Visible = True With Application .DisplayFormulaBar = True .ShowWindowsInTaskbar = True End With Application.WindowState = xlMaximized Application.Quit MsgBox "終了します" End Sub 宜しくお願いします。

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

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

専門家に質問してみよう