【VBA】1行でExcelのいろんなインターフェースを非表示にする。
ども。今回はExcel VBAです。いろいろさわってますが、結局仕事に簡単に直結するのはExcelとVBAだと思います。
この記事では、Excelのリボン、数式バ-、スクロールバーなど、Excelのいろんなインターフェースを非表示にするVBAプログラムを紹介します。
前置き
ExcelでVBAプログラムを作るとき、とっても気を使う
Excelってもともといろいろなインターフェースがあって、ユーザの自由度が高いですよね。 たとえば、リボンでフォントの設定とか簡単にできちゃうし、開発タブを有効にしていれば追加でVBAプログラム書けちゃうし。
セルやシートをロックして入力を制限するは有効な手段ですが、そもそも設定が手間。しかもロックするくらいしかできないので、自分の思うどおりに開発ができなかったりして、兼ね合いをとるのがとても面倒です。 特に、モーダルウィンドウを表示した操作を取り込む場合、とても気を使います。(僕だけかもしれませんが。)
個人的には、Excelはユーザが意図しないアクションを起こす可能性が非常に高く、開発者から見たときにとても気苦労が多いもの、だと思います。
Excel自体を非表示にしフォームだけ表示するVBAプログラム等もありますが、Excel自体の起動・終了が見えません。Excelのインスタンスが残ってしまい、新たな予期しないトラブルが起こってしまう可能性もあります。
結果、Excelを表示したまま、インターフェースを非表示にしちゃえばいいのでは!?という結論にいたりました。 (笑
インターフェースを無効にするメリット
エラー時にユーザがExcelを正常に終了できる
前述のとおり、Excel自体を非表示にしてしまうとExcelプロセスが起動しているか停止しているかわかりません。プログラムが異常終了し、Excelプロセスが起動したままだとその後Excelが起動しなくなったり、意図しないトラブルに発展する可能性があります。
Excel自体は表示させておくことで、VBAプログラムが異常終了してもウィンドウの「×」ボタンからユーザが正常にExcelを終了させることができます。
Excelの機能を有効に利用できる
Excel自体を非表示にしてしまうと、ワークシートを使ったプログラムの作成が単純に難しくなります。だって非表示で見えないので。するとしてもシートに順番に値を書き出して、CSVに出力するくらいではないでしょうか。
Excel上でVBAプログラムを作っているのだから、Excelのプログラムを使用しない手はありません。条件付き書式、ピポットテーブル、グラフなどは、Excelでないと使えません。
経緯
先日本社に戻ったとき、お世話になった新人研修の講師の方と話す機会がありました。
そこで最近のこととかをつらつら話していると、「Excelで自分だけのライブラリ作っちゃえばいいじゃん」といわれました。
この一言からいろいろ考えた結果、やってみたのが今回の記事です。←?
インターフェースを非表示にする
ここからが本編です。基本的には1行のプログラムです。 簡単なので、ぜひやってみてください。検証はExcel2007で行っています。
リボンを非表示にする
一番厄介なリボンを非表示にします。プログラムもリボンの非表示が最もややこしいです。
Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",False)"
リボンを非表示にするにはExcel4.0形式のVBAプログラムを実行します。Application.ExecuteExcel4Macro(String)
メソッドでExcel4.0形式でVBAプログラムを実行します。
引数には、Excel4.0形式で実行するプログラムを文字列で指定します。SHOW.TOOLBAR(""Ribbon"",False)
でリボンが非表示になります。
シートタブを非表示にする
シートタブとは、Excel画面下部のワークシート一覧を表示するタブです。
ActiveWindow.DisplayWorkbookTabs = False
ActiveWindow
は、現在開いているExcelワークブックのウィンドウを指します。オブジェクトはWindows
オブジェクトです。
Windows(ワークブック名)
で、ウィンドウを指定することができます。
インターフェースはWindowsオブジェクトに多く付いていますので、Excelのインターフェースを触る場合は覚えておいてください。
見出しを非表示にする
見出しとは、A,B,C,D,....、1,2,3,4,....というように、画面上、画面左にある見出しになります。
ActiveWindow.DisplayHeadings = False
シートタブと同じです。ワークブックウィンドウ内のインターフェースは、だいたいWindowsオブジェクトで操作できます。
スクロールバーを非表示にする
スクロールバーは、縦のスクロールバーと横のスクロールバーで個別に設定ます。
' 横のスクロールバーを非表示にする ActiveWindow.DisplayHorizontalScrollBar = False ' 縦のスクロールバーを非表示にする ActiveWindow.DisplayVerticalScrollBar = False
こちらもWindowsオブジェクトの操作になります。
注意 スクロールバーを非表示にしても、スクロールは可能です。
スクロールも禁止するには、次の通りスクロール可能エリアを指定します。
' 例1) ActiveSheet.scrollArea = "A1:F40" ' 例2) ActiveSheet.scrollArea = ActiveWindow.VisibleRange.Address
WorkSheetオブジェクトのscrollAreaプロパティにスクロール可能エリアのアドレスを指定します。
例2では、ActiveWindow.VisibleRange.Address
を使用し、画面に表示されているセル範囲のアドレスを取得しています。
数式バーを非表示にする
数式バーは、文字や数式を入力するためのツールバーです。通常リボンの下にあります。これを非表示にします。
Application.DisplayFormulaBar = False
数式バーはApplication
オブジェクトで制御します。やり方は他のものとほとんど変わりません。
ステータスバーを非表示にする
ステータスバーは画面下部にあるツールバーです。シートの表示形式を変えたり、ズームしたりすることができるツールバーです。
Application.DisplayStatusBar = False
ステータスバーもApplication
オブジェクトで制御します。
ワークブックウィンドウを非表示にする
上記のすべてを非表示にすると、セルの選択と右クリックくらいしかできないようになります。
最後に、このセル自体も非表示にし、ウィンドウ枠だけになるようにしたいと思います。
Application.Windows(ワークブック名).visible = False
表示されているセルは、ワークブック内のウィンドウに表示されているので、Windowsオブジェクトを非表示にします。
ワークブックを非表示にすると、表示するときにWindowsオブジェクトの名前(≒ワークブック名)、もしくは順序番号が必要となるので注意して下さい。
以上、どうだったでしょうか。皆さんも試してみてください。