VBAで自動化ツールを開発するときに使い勝手の良いユーザーにファイルを選択してもらうGetOpenFilenameメソッドについて解説します。
目次
- GetOpenFilenameメソッドでファイルをユーザーに選択させる
- 単にファイルを開く方法の復習
- GetOpenFilenameメソッドの文法
- GetOpenFilenameメソッドの2つの引数|FileFilterとTitle
- キャンセルが押された場合の対応
- GetOpenFilenameメソッドでファイルをユーザーに選択させるまとめ
GetOpenFilenameメソッドでファイルをユーザーに選択させる
操作するファイルの対象をユーザーに選択させるファイル選択ダイアログボックスを表示するGetOpenFilenameメソッドを解説します。GetOpenFilenameと言ってもこのメソッドはダイアログボックスを開いてユーザーが選択したファイルのフルパスを取得するのみで開くところまで自動で行うわけではありません。次項から解説していきます。
単にファイルを開く方法の復習
まず、ファイルを開く方法について復習しておきます。エクセルブックを開くにはWorkbooksクラスのOpenメソッドを使います。サンプルコードは以下の通りです。
Sub ファイルを開く例() Workbooks.Open Filename:="..." ' エクセルブックの場合 End Sub
上のサンプルで"..."に当たる部分を取得するのがGetOpenFilenameメソッドの目的です。"..."の部分はフォルダのパスとファイル名を結合したいわゆるフルパスと呼ばれる文字列が入ります。
GetOpenFilenameメソッドの文法
GetOpenFilenameメソッドの文法は以下のようになっています。
ファイルのフルパスを代入する為の変数を用意しておき、GetOpenFilenameメソッドで取得したフルパスを代入するようにしておきます。GetOpenFilenameメソッドにおいて知っておくべきは第1引数と第3引数だけです。他の引数を覚える必要はありません。第1引数だけは大事なので良く覚えておきましょう。
なお、引数は【ひきすう】と読み、渡す値という意味です。GetOpenFilenameメソッドにおいては第1引数にFileFilterとして文字列を引数にとり、第3引数にTitleとして文字列を引数にとる、と言う言い方をします。
GetOpenFilenameメソッドの2つの引数|FileFilterとTitle
前項で説明したようにGetOpenFilenameメソッドでは第1引数のFileFilterと第3引数のTitleが重要です。順に解説します。
第1引数FileFilter
第1引数のFileFileterは文字通りユーザーがファイルを選択する際にフィルタをかける機能です。ユーザーが選択できる拡張子を限定して、予期せぬファイルが選択される確率を減らす事ができます。書式は以下のようにします。
慣れない記述なので気合で覚えてしまいましょう。まず、文字列で指定するので””(ダブルクォーテーション)が囲みます。そしてその中身はファイルの種類の説明, *.xlsxの様にファイルの種類の説明と拡張子の先頭にアスタリスクを付けたものをカンマ区切りにします。サンプルコードを掲載すると以下のようになります。
Sub 第1引数しかない例() Dim フルパス As String フルパス = Application.GetOpenFilename("元データ,*.xlsx") End Sub
このプログラムを実行すると、ファイルを開くダイアログボックスが表示されます。ダイアログボックスの下の部分を見ると下図のようになっています。
開く、キャンセルの2つのボタンの上に元データ(*.xlsx)と表示されています。ここの部分が第1引数で指定した部分です。「元データ」の部分は「売上データ」なり「商品マスタ」なりユーザーにとってわかりやすい実際のデータの種類を書けばOKです。
また、第1引数はダブルクォーテーション内に【ファイルの説明,*.拡張子】の組み合わせをカンマ区切りで複数記述することによって、複数の拡張子を指定することも可能です。
Sub 複数種類の拡張子の例() Dim フルパス As String フルパス = Application.GetOpenFilename("元データ,*.xlsx,古い元データ,*.xls") End Sub
このプログラムを実行するとファイルを開くダイアログボックスが表示されます。その下の部分に着目すると以下のようになっています。
あくまで第1引数全体が一つの文字列なので"元データ,*.xlsx,古い元データ,*.xls"の様になります。間違いやすいので注意しましょう。覚え方は第1引数には【ファイルの説明,*.拡張子】の組み合わせを書く。【ファイルの説明,*.拡張子】の組み合わせを複数書くこともできる、と言う具合です。
さらに、拡張子の部分にアスタリスクを使うこともできます。
Sub 複数種類の拡張子の例2() Dim フルパス As String フルパス = Application.GetOpenFilename("元データ,*.xls*") End Sub
このプログラムで表示されたファイルを開くダイアログボックスには.xlsファイル、.xlsxファイル、.xlsxファイルのいずれもが表示されます。
第3引数Title
第3引数Titleは表示されるダイアログボックスの上部に表示させるメッセージを指定します。省略可能で、省略すると、【ファイルを開く】という文字列が表示されます。
Sub 第3引数を指定するサンプル() Dim フルパス As String フルパス = Application.GetOpenFilename("元データ,*.xlsx", , "元データを選択してください", , True) End Sub
このプログラムを実行すると上部のタイトル部分に【元データを選択してください】と表示されたダイアログボックスが表示されます。
キャンセルが押された場合の対応
ファイルを開くダイアログボックスの右下にはキャンセルボタンも用意されています。このボタンを押すとGetOpenFilenameメソッドはFalseを返します。
フルパスが”False”と言うことはあり得ないため、これを開こうとするとそんなファイルありません、と言うエラーになります。そこで、キャンセルを押されたときの対策をすることが必要です。
Sub 適切にエラーを処理するサンプル() Dim フルパス As String フルパス = Application.GetOpenFilename("元データ,*.xlsx", , "元データを選択してください", , True) If フルパス = "False" Then MsgBox "処理を中断しました" End End If End Sub
Falseは本来は特殊な値ですが、VBAでは文字列として取り扱うこともできるため、上のようなサンプルコードでトラップすることができます。
GetOpenFilenameメソッドでファイルをユーザーに選択させるまとめ
この記事の内容をまとめます。
- GetOpenFilenameメソッドはフルパスを取得するだけでファイルを開くわけではない
- GetOpenFilenameメソッドは第1引数と第3引数だけ覚えておけばほとんどの場合は事足りる
- 第1引数はファイルの説明と拡張子をセットにした【ファイルの説明,*.拡張子】と言う書式で書く
- 第1引数は【ファイルの説明,*.拡張子】のセットを複数書くこともできる
- 【ファイルの説明,*.拡張子】のセットを複数書く場合でも、ダブルクォーテーションは全体を囲む
- 第3引数はダイアログボックスのタイトルを指定する
- 「キャンセル」を押されたときはFalseが変えるので適切に処理を行う必要がある
<関連記事>
<ゆんの電子書籍>