エクセルVBAでダイアログボックスを使ってファイルを非表示で開く方法

こんにちは~。「デザインもできるシステムエンジニア」のあつもり(@atumori17)です。今日も業務効率化のアイデアを発信していきますっ!

前回は「ダイアログボックスを表示させ特定のファイルを1つだけ開く方法」を紹介しました。

エクセルVBAでダイアログボックスを表示させ特定のファイルを1つだけ開く方法
エクセルVBAを使ってエクセルファイルを開く方法はアプリケーションを作っていくときに基本となる技です。業務効率化ツールを例に挙げても、まずはエクセルファイルを読み込ませて、そのデータを直接加工したり、参照したりする場合が圧倒的に多いので覚えておくと便利です。

今回は「ダイアログボックスを使ってファイルを非表示で開く方法」を紹介します。プログラムからエクセルファイルを開きたいけど、画面に表示させないでシート上のデータだけを取得したいという場合に役に立つ技です。

レクタングル大336×280

ダイアログボックスからファイルを非表示で開くプログラムを作る

前回のプログラムを修正する

前回作成した「ファイルを開く.xls」を開き、名前を付けて保存で「非表示でファイルを開く.xls」という名前のファイルを作成します。

標準モジュールにSubプロシージャ「OpenExcelFile」に次の段落で説明するコードを貼り付けます。

サンプルコードを貼り付ける

プロシージャ「OpenExcelFile」に下記のコードを貼り付けます。

プログラムコードの解説

それではプログラムコードの解説をしていきます。重要なポイントに絞って説明していきます。全体の流れは以下のようになります。

  1. ファイル選択ダイアログボックスを表示させる
  2. 選択したファイルのパスを取得する
  3. キャンセルボタンが押されたらプログラムを終了させる
  4. 選択したファイルを開く
  5. メッセージボックスを表示させる
  6. 開いたファイルを非表示にする

キャンセルが押されたらExitでプログラムを終了させる

前回の記事ではキャンセルが押されたときの処理を入れていませんでした。そのためダイアログボックスのキャンセルボタンを押すと次のようなメッセージが表示されます。

「実行時エラー1004 False.xlsが見つかりません。ファイル名およびファイルの保存場所が正しいかどうか確認してください。」

この問題を解消するためにExitステートメントを使って、キャンセルが押された時にプログラムを終了させるようにします。上記コードの8~11行目にあたります。

ダイアログボックスでキャンセルボタンが押されたときに、GetOpenFilenameメソッドはFalseを返します。そのことを利用してFalseが返されたらExit subでプロシージャを終了させます。

Exit プロシージャなどの種類

ExitステートメントはSubプロシージャだけでなく、Functionプロシージャ、Do Loop文、For Next文などにも使えます。

ScreenUpdatingプロパティで画面描画を止める

ApplicationオブジェクトのScreenUpdatingプロパティを使うことで、画面描画を止めることができます。Falseをセットすることで描画抑止、Trueで描画再開になります。

Application.ScreenUpdating = True か False

なぜ画面抑止が必要なの?って思われるかたもいるかもしれません。今回は非表示でファイルを開くということですから、ファイルが開いているところ見せたくありませんよね。画面抑止をしない場合、一瞬ファイルが開くところが表示されてしまうんですね。

そのためScreenUpdatingプロパティをFalseにして画面抑止をしてからファイルを開き、その後にファイルを非表示という処理の流れにしています。

最後に注意点ですが、ファイルを非表示にしたあと、描画を再開させるのを忘れないようにしてください。

Visibleプロパティで開いたファイルを非表示にする

非表示にする前にメッセージボックスを表示させて、開いたエクセルから値が取れているかの確認をしています。

上記コードの17行目になります。

メッセージボックスを表示させた後に、開いたエクセルを非表示にします。ApplicationオブジェクトのVisibleプロパティを使うことで、開いたファイルを非表示にすることができます。Trueをセットすることで非表示、Falseをセットすると表示になります。

Application.Visible = True か False

プログラムコードの解説は以上です。

ダイアログボックスからファイルを開くプログラムの動作確認

それでは実際に出来上がったプログラムを動かしてみましょう。

ワークシートの「エクセルファイルを開く」ボタンを押します。

ダイアログボックスが表示されたら、非表示で開きたいファイルを選択し開くボタンをクリックします。

メッセージボックスが表示され、B3セルのデータが表示されました。

ダイアログボックスで選択したエクセルファイルが非表示で開きました。

まとめ

いかがでしたか?今回の内容をまとめます。

  • Exitステートメントでプロシージャを終了させることができる
  • ScreenUpdatingプロパティで画面描画を抑止できる
  • ApplicationオブジェクトのVisibleプロパティでファイルを非表示にすることができる

それではまた~。