VBA「ファイルを開く」ダイアログボックスを表示させる|GetOpenFilenameメソッド

2018/03/11

VBA でファイル操作を行うときに、しばしば必要となるのが、「ファイルを開く」ダイアログボックス を表示させること。

Application.GetOpenFilename メソッドを使って「ファイルを開く」ダイアログボックスを表示させることで、ユーザーに任意のファイル選択をさせることが可能になり、処理するファイル名が不特定な場合に役立ちます。

今回の h1r0-style.net では、ボタンをクリックして [ファイルを開く] ダイアログボックスを表示させ、さらに選択したファイル名をテキストボックスに表示させるワザをピックアップします。

ユーザーに任意のファイルを選択させる

「ファイルを開く」ダイアログボックスとは

私たちが普段、ファイル選択をするときに何気なく目にしている「ファイルを開く」ダイアログボックス。

こういうヤツです。(OSによって多少異なります)

このダイアログを、ボタンひとつクリックすると自動で表示される仕組みを作ります。


ユーザーフォームを使う

参照ボタンの設置

「ファイルを開く」ダイアログボックスを表示させるきっかけとして、コマンドボタンをクリックするというイベントが必要です。

よく見かけるのが「参照」というボタンです。
そこで、今回は「参照」ボタンを設置したシンプルなユーザーフォームを使って説明します。

ユーザーフォームの例

今回用意したのは、①「参照」ボタン、② 選択したファイル名が表示される「テキストボックス」、③ 選択したファイルに対してなんらかの処理を開始する「処理開始」ボタンの3つのオブジェクトを配置したユーザーフォームです。

▲超シンプルなユーザーフォーム

※この記事を読んでいる方には、フォームやオブジェクトの配置方法についての説明は不要と判断しました。

一連の流れとしては;

1.「参照」ボタンをクリック
2. [ファイルを開く] ダイアログを表示
3. ユーザーがファイル選択
4. 選択されたファイル名をテキストボックスに表示

今回のトピックでは「処理開始」ボタンはただの飾りです。

GetOpenFilename メソッド

ここからが本題で「参照」ボタンをクリックしたときのアクションを設定します。

こんな時に役に立つのが、Applicationオブジェクトの GetOpenFilename メソッド です。

OpenFileName = Application.GetOpenFilename ( )

右端のカッコの中には引数を入れることができます。
※あらかじめ OpenFileName は String として宣言しておきます。

上のサンプルのように カッコの中になにも入れないと、[ファイルを開く] ダイアログを開いたときに、ファイルの種類にフィルタはかからず「すべてのファイル(*.*)」となります。

OpenFileName = Application.GetOpenFilename("Excelブック,*.xlsx"

上のように引数を("Excelブック,*.xlsx")とすれば、エクセルファイルだけに絞り込むことができます。

▲こんな感じでフィルターをかけられます

この引数は、みなさんがVBAで何をしたいかによって違ってきます。


VBAでカレントフォルダを変更する

カレントフォルダとは

カレントフォルダ(カレントディレクトリ)とは、ファイルシステム上でユーザーが現在作業を行っているとみなされているフォルダです。

[ファイルを開く] ダイアログボックスを表示させた時に、最初に開くフォルダが「カレントフォルダ」です。

最初に開くフォルダを指定しておくと、ファイルを選択するユーザーにとっても親切設計です。
例えば、カレントフォルダを Cドライブの ”Test" というフォルダに指定する場合は;

CreateObject("WScript.Shell").CurrentDirectory = "C:¥Test"

このようになります。

選択したファイル名をテキストボックスに表示する

つぎに、[ファイルを開く] ダイアログでユーザーが選択したファイル名を取得し、取得したファイル名をフォーム上に配置したテキストボックスに表示させます。

今回のサンプルでは、テキストボックスに「txtFileName」という名前を与えているので;

txtFileName.Value = Dir(OpenFileName)

このような記述になります。


使用例

サンプルコード

では、実際に使えるかたちでコードを見てみましょう。

Option Explicit


'*********************************************************
'「ファイルを開く」ダイアログボックスを表示する
'*********************************************************
Private Sub cmdSearch_Click()
  Dim OpenFileName As String

  ' カレントフォルダを "C:\Test" として[ファイルを開く]ダイアログを表示
  CreateObject("WScript.Shell").CurrentDirectory = "C:\Test"
  OpenFileName = Application.GetOpenFilename()

  'ファイルが正しく選択されたら ファイル名をテキストボックスに表示
  If OpenFileName <> "False" Then
    txtFileName.Value = Dir(OpenFileName)
    cmdShori.SetFocus
  End if
End Sub
'-----------------<< End of Source >>------------------

赤字部分、cmdShori.SetFocus のくだりは、ファイル名がテキストボックスに表示されたら「処理開始」ボタンを選択した状態にするという意味です。


実際の画面の展開イメージ

▲[参照] をクリック

▲[ファイルを開く] ダイアログが表示される

▲ファイルを選択して [開く] をクリック

▲ファイル名がテキストボックスに表示されて [処理開始] ボタンが選択された

以上で [ファイルを開く] ダイアログボックスを表示させる の解説は終了です。

みなさんの役に立てば幸いです。

関連記事



併せて読んでおくとさらに便利

VBAで最終行を取得する方法と そこからできること|Excel VBA
VBA・最終行
VBAで最終行を取得する方法を解説。最終行の行番号を取得できることにより最終行の削除や、最終行までセルを選択したり繰り返したり色々なことが可能になります。

VBA「フォルダ選択」ダイアログを表示させる|Excel VBA
VBA・ダイアログボックス
VBAを使い、ファイルではなく「フォルダ選択」をさせる ダイアログボックス を表示させ、ユーザーが選択した フォルダ名 を含むPathを テキストボックスに表示させる方法について解説。

VBA フォルダ内のファイル名一覧の取得|EXCEL VBA
VBA・一覧取得
VBAでフォルダ内のファイル名の一覧を取得する方法を解説。フォルダの中の複数ファイルを自動でひとつずつ展開しながら 連続処理をさせたいときに使える超便利テク!

VBA カレントフォルダの取得と設定・変更|Excel VBA
VBA・CurDir関数
VBAで カレントフォルダ名 を取得したり、設定(指定)したり変更(移動)したりする方法について解説します。CurDir関数 や ChDirステートメント などの使い方についても触れています。

VBAでパスワード入力フォームを作ってみました|Excel VBA
VBA・ユーザーフォーム
『VBAでパスワード入力フォームを作る方法』。ユーザーにパスワードを入力させたい状況に出くわしたら、自分で「パスワード入力フォーム」を作るのがベストです。

※その他、関連記事はこの記事の下の方にもあります。

-EXCEL&VBA
-, ,

シェアしていただけると助かります。