目次
ドラッグアンドドロップで Excel の非表示シート全部をまとめて表示設定する
この記事ではバッチファイルと組み合わせることで Excel の非表示シート全部をまとめて表示設定する SetExcelsAllSheetsVisibleというユーザー定義関数について紹介します。 この情報が読者のお役に立てば幸いです。
解決できること
この SetExcelsAllSheetsVisible を実装した Access ツールをバッチファイルと組み合わせることで Excel ブックをドラッグアンドドロップするだけでこの Excel の非表示シート全部をまとめて表示設定するツールを手に入れることができます。
読んでほしい方
Microsoft 365 Apps for business 以外の Excel をお使いの方で、以下のように Excel の非表示中のシート全部をまとめて表示設定する方法を探している方。
あ、ちなみに会社のExcelは
Microsoft 365 Apps for enterprise
バージョン 2102(13801.21214)
です。
2010(13426.20306)から出来るようになったという記事もあるんですけど何故かできない😓
どゆうこと❓️— しらかば堂@VBAer (@shirakabado) May 20, 2022
このExcel の非表示シートをまとめて表示設定する機能は、Microsoft 365 Apps for business バージョン 2204(15128.20178) で 何故か business バージョンで使える機能が enterprise バージョンで使えないってことが有るんですね。 |
SetExcelsAllSheetsVisible 関数 の紹介
説明
この SetExcelsAllSheetsVisible を実装した Access ツールを例えば
- %USERPROFILE%\Tools\accdb\設定_Excel_全Sheets表示.accdb
として、このツールをバッチファイルから起動できるようにすると
Excel ブックをドラッグしてこのバッチファイル、あるいはバットファイルへのショートカットにドロップするだけでこの Excel ブック の非表示シート全部をまとめて表示設定するツールとすることができます。
参照オブジェクト
この関数を利用するために必要な参照オブジェクトはありません。
利用例
この関数を実装する Access ツール内の “autoexec” マクロ中で次のようにこの関数 SetExcelsAllSheetsVisible を呼び出します。
If SetExcelsAllSheetsVisible()>0 Then
If 文の最後
引数
この関数を利用するための引数はありません。
ただし先ほどの Access ツール起動するバッチファイルを
- %USERPROFILE%\Tools\bat\設定_Excel_全Sheets表示.bat
とすると、このバッチファイル中で先ほどの Access ツールを以下のようにパラメータ 「 /cmd %1」 付きで呼び出さなければいけません。
この 「 /cmd %1」 は 起動される Access ツールに %1 で指定したパラメータを引数として渡すことを意味しており、その値 %1 は後で紹介する VBA の中で「Command」関数で参照することができます。
また通常こうしたバッチファイルへのパラメータ渡しは一般的に Windows のコマンドラインやバッチファイルの中で明示的にパラメータをキー入力することでこれを行いますが、もう一つの方法としてドラッグした ファイルをバッチファイル、またはPCのデスクトップに配置したこのバッチファイルへのショートカットへドロップするとこのドラッグした ファイルの絶対パス名を %1 に引き渡すことができます。
@echo off
%USERPROFILE%\Tools\accdb\設定_Excel_全Sheets表示.accdb /cmd %1
こうした %USERPROFILE%、 %1 といったバッチファイルに関連した基礎的概念やフォルダ構成については必要に応じて を参照してください。 |
戻り値
値 | 意味 |
---|---|
0 | 正常終了 |
1 | 異常終了 |
VBAコード
Function SetExcelsAllSheetsVisible() As Integer
Const C_SUCCESS As Integer = 0
Const C_FAILURE As Integer = 1
DoCmd.RunCommand acCmdAppMinimize
On Error GoTo exitWithFailure
Dim excelAppObj As Object
Set excelAppObj = CreateObject("Excel.Application")
excelAppObj.Visible = False
Dim inputParameter As String
inputParameter = Command
' Workbook を開く
Dim excelWorkBookObj As Object
Dim excelWorkSheetObj As Object
Set excelWorkBookObj = excelAppObj.Workbooks.Open(inputParameter)
For Each excelWorkSheetObj In excelWorkBookObj.Worksheets
excelWorkSheetObj.Visible = True
Next
excelWorkBookObj.Close savechanges:=True
excelAppObj.Quit
Set excelWorkSheetObj = Nothing
Set excelWorkBookObj = Nothing
Set excelAppObj = Nothing
SetExcelsAllSheetsVisible = C_SUCCESS
Exit Function
exitWithFailure:
excelAppObj.Quit
Set excelWorkSheetObj = Nothing
Set excelWorkBookObj = Nothing
Set excelAppObj = Nothing
SetExcelsAllSheetsVisible = C_FAILURE
End Function
VBAコードの簡単な説明
行番号 | 説明 |
---|---|
1 | 関数名 SetExcelsAllSheetsVisible と関数の戻り値の型(Integer:整数型)を定義しています。 |
3-4 | このプログラムの中で利用する定数C_SUCCESS(0:成功)、C_FAILURE(1:失敗)を定義しています。ここでは34行目、44行目でこの関数の戻り値が C_SUCCESS(0:成功)、C_FAILURE(1:失敗)であることが明確にわかるようなコーディングの仕方になります。 |
6 | この関数を実行する Access をアイコン化(最小化)しています。 |
8 | この関数の実行中にエラーが発生したときの例外処理として、exitWithFailure にジャンプします。 |
10-12 | Excel を excelAppObj として表示モードで起動します。 |
14-15 | バッチファイル中でこの Access 起動時に指定した第一パラメータ %1 つまり、このバッチファイルにドラッグした Excel ブックのフルパス名を inputParameter という文字列に設定します。 |
18-21 | inputParameter でフルパス指定された Excel ブックを excelWorkBookObj としてオープンし、そのシート名を excelWorkSheetObj として宣言します。 |
23-27 | この excelWorkBookObj 内の全てのシート名を excelWorkSheetObj に順に取り出し、そのシートを表示設定し、これを保存します。 |
29-32 | excelAppObj を終了し、excelWorkBookObj 、excelWorkSheetObj 、excelAppObj のメモリ領域を開放します。 |
34-35 | この関数の戻り値に C_SUCCESS(0:成功) を設定して関数を終わります。 |
39-42 | excelAppObj を終了し、excelWorkBookObj 、excelWorkSheetObj 、excelAppObj のメモリ領域を開放します。 |
44-45 | この関数の戻り値に C_FAILURE (1:失敗) を設定して関数を終わります。 |
まとめ
この記事ではバッチファイルと組み合わせることで Excel の非表示シート全部をまとめて表示設定する SetExcelsAllSheetsVisibleというユーザー定義関数について紹介しました。 この情報が読者のお役に立てば幸いです。