こんにちは~。「デザインもできるシステムエンジニア」のあつもり(@atumori17)です。今日も業務効率化のアイデアを発信していきますっ!
前回は「ダイアログボックスを表示させ特定のファイルを1つだけ開く方法」を紹介しました。
今回は「ダイアログボックスを使ってファイルを非表示で開く方法」を紹介します。プログラムからエクセルファイルを開きたいけど、画面に表示させないでシート上のデータだけを取得したいという場合に役に立つ技です。
目次
ダイアログボックスからファイルを非表示で開くプログラムを作る
前回のプログラムを修正する
前回作成した「ファイルを開く.xls」を開き、名前を付けて保存で「非表示でファイルを開く.xls」という名前のファイルを作成します。
標準モジュールにSubプロシージャ「OpenExcelFile」に次の段落で説明するコードを貼り付けます。
サンプルコードを貼り付ける
プロシージャ「OpenExcelFile」に下記のコードを貼り付けます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Option Explicit Sub OpenExcelFile() Dim openFilePath As String openFilePath = Application.GetOpenFilename _ ("Microsoft Excel ファイル,*.xls*", , "エクセルファイルを選んで下さい") 'キャンセルが押されたらプログラム終了 If openFilePath = "False" Then Exit Sub End If Application.ScreenUpdating = False Workbooks.Open openFilePath MsgBox Range("B3").Value ActiveWindow.Visible = False Application.ScreenUpdating = True End Sub |
プログラムコードの解説
それではプログラムコードの解説をしていきます。重要なポイントに絞って説明していきます。全体の流れは以下のようになります。
- ファイル選択ダイアログボックスを表示させる
- 選択したファイルのパスを取得する
- キャンセルボタンが押されたらプログラムを終了させる
- 選択したファイルを開く
- メッセージボックスを表示させる
- 開いたファイルを非表示にする
キャンセルが押されたらExitでプログラムを終了させる
前回の記事ではキャンセルが押されたときの処理を入れていませんでした。そのためダイアログボックスのキャンセルボタンを押すと次のようなメッセージが表示されます。
「実行時エラー1004 False.xlsが見つかりません。ファイル名およびファイルの保存場所が正しいかどうか確認してください。」
この問題を解消するためにExitステートメントを使って、キャンセルが押された時にプログラムを終了させるようにします。上記コードの8~11行目にあたります。
1 2 3 4 |
'キャンセルが押されたらプログラム終了 If openFilePath = "False" Then Exit Sub End If |
ダイアログボックスでキャンセルボタンが押されたときに、GetOpenFilenameメソッドはFalseを返します。そのことを利用してFalseが返されたらExit subでプロシージャを終了させます。
ExitステートメントはSubプロシージャだけでなく、Functionプロシージャ、Do Loop文、For Next文などにも使えます。
ScreenUpdatingプロパティで画面描画を止める
ApplicationオブジェクトのScreenUpdatingプロパティを使うことで、画面描画を止めることができます。Falseをセットすることで描画抑止、Trueで描画再開になります。
なぜ画面抑止が必要なの?って思われるかたもいるかもしれません。今回は非表示でファイルを開くということですから、ファイルが開いているところ見せたくありませんよね。画面抑止をしない場合、一瞬ファイルが開くところが表示されてしまうんですね。
そのためScreenUpdatingプロパティをFalseにして画面抑止をしてからファイルを開き、その後にファイルを非表示という処理の流れにしています。
最後に注意点ですが、ファイルを非表示にしたあと、描画を再開させるのを忘れないようにしてください。
Visibleプロパティで開いたファイルを非表示にする
非表示にする前にメッセージボックスを表示させて、開いたエクセルから値が取れているかの確認をしています。
上記コードの17行目になります。
1 |
MsgBox Range("B3").Value |
メッセージボックスを表示させた後に、開いたエクセルを非表示にします。ApplicationオブジェクトのVisibleプロパティを使うことで、開いたファイルを非表示にすることができます。Trueをセットすることで非表示、Falseをセットすると表示になります。
プログラムコードの解説は以上です。
ダイアログボックスからファイルを開くプログラムの動作確認
それでは実際に出来上がったプログラムを動かしてみましょう。
ワークシートの「エクセルファイルを開く」ボタンを押します。
ダイアログボックスが表示されたら、非表示で開きたいファイルを選択し開くボタンをクリックします。
メッセージボックスが表示され、B3セルのデータが表示されました。
ダイアログボックスで選択したエクセルファイルが非表示で開きました。
まとめ
いかがでしたか?今回の内容をまとめます。
- Exitステートメントでプロシージャを終了させることができる
- ScreenUpdatingプロパティで画面描画を抑止できる
- ApplicationオブジェクトのVisibleプロパティでファイルを非表示にすることができる
それではまた~。
その使い方だと損してます!
会社員、個人事業主のかたへ。
無料で登録できるAmazonビジネスアカウントを知ってますか?
何と言っても便利なのが請求書払いによる後払いができるということ。
また、承認ルールを作成すれば、業務上必要な物だけに購入を制限することができます。
さらに多くの商品にビジネスアカウント価格が設定されており、個人アカウントより安く購入できます。
このように個人アカウントと比べてビジネスアカウントはお得な機能や特典がついています。
無料で登録できるので、会社員、個人事業主なら使ったほうが得なのは言うまでもありません。