Microsoft Excel VBA - ファイルを開くダイアログボックスを使う方法
◆概要
このページは、Excel VBAでファイルを開くダイアログボックスを使う方法について記載しています。
GetOpenFilenameメソッドは、Excelがもっている「ファイルを開く」ダイアログボックスを使用できるようにするメソッドです。実行すると「ファイルを開く」ダイアログボックスが表示され、ユーザーによってファイルが選択されると、そのファイル名をドライブを含むフルパスで返してきます。ダイアログボックスの「キャンセル」ボタンが押された場合は、メソッドは"False"を返してきます。
メソッドの実行については、いくつかの引数を操作することで、ダイアログボックスに表示するファイルの種類やウィンドウのタイトルを設定することができます。
◆Sample code
Sub OpenFilesDlg() Application.GetOpenFilename ("Excelブック (*.xls),*xls") End Sub |
次の例は、「ファイルを開く」ダイアログボックスに、Excelのブックとテキストファイルを表示するファイルフィルタを設定し、ユーザーによってファイル名が選択されると、メッセージボックスを使用してそのファイル名のフルパスを表示します。 キャンセルボタンが押されると、その旨をメッセージボックスで表示します。
Sub OpenFilesDlg2() Dim Ret As Variant Ret = Application.GetOpenFilename( _ "Excelブック (*.xls),*.xls, テキストファイル(*.txt),*.txt") If Ret = False Then MsgBox "キャンセルが選択されました。" Else MsgBox Ret & "が選択されました。" End If End Sub |
複数のファイルを選択するときは次のようにします。
Sub ファイル選択() Dim 選択結果 As Integer Dim a As Integer With Application.FileDialog(msoFileDialogFilePicker) '複数のファイル選択 .AllowMultiSelect = True 'フィルタのクリア .Filters.Clear 'フィルタの設定 .Filters.Add "ブック", "*.xls" 選択結果 = .Show If 選択結果 = 0 Then Exit Sub End If For a = 1 To .SelectedItems.Count MsgBox .SelectedItems(a) Next End With End Sub |
◆ファイルパスを指定して「ファイルを開く」ダイアログボックスを表示する
GetOpenFilename メソッドでは、既定のファイルパスを指定することができません。ファイルパスを指定して「ファイルを開く」ダイアログボックスを表示するには、ApplicationオブジェクトのFileDialogメソッドを使用します。
◆Sample code
次の例は、Sheets1のセルA1に入力されたファイルパスを取得し、そのファイルパスを既定のパスとして「ファイルを開く」ダイアログボックスを表示します。
Function OpenFileDialog(strFilename As String) As String ' *************************************************************** ' Summary:ファイルを開くダイアログボックスを表示する ' 引数:ファイル名(フルパス)。文字列型。ワイルドカード使用可能 ' 戻値:ファイルのフルパス。文字列型 ' Date:2009/06/23 ' Written by:White Tiger ' *************************************************************** 'ダイアログ Dim FileDlg As Office.FileDialog 'ファイルパス Dim FilePath As String 'ファイルを選択したかどうか(0=選択していない, -1=選択した) Dim Result As Integer FilePath = "" 'ファイルダイアログの種類を指定 Set FileDlg = Application.FileDialog(msoFileDialogFilePicker) With FileDlg 'ダイアログで最初に表示するファイルパス .InitialFileName = strFilename 'ダイアログに表示するファイル種別 .Filters.Add "Excel 97-2003ファイル(*.xls)", "*.xls" 'ダイアログ表示時に有効にするファイル種別のインデックス .FilterIndex = 3 '複数ファイルの選択を無効にする .AllowMultiSelect = False End With Result = FileDlg.Show() 'ファイルが選択された場合、選択したファイル名を返す If Result = -1 Then FilePath = FileDlg.SelectedItems(1) End If Set FileDlg = Nothing OpenFileDialog = FilePath End Function Sub test() '*************************************************************** ' Summary:指定したファイルを開く ' Description:OpenFileDialogを呼び出し ' Date:2009/06/25 ' Written by:White Tiger ' ************************************************************** Dim strFilename As String Dim databook As Workbook Dim strFilePath As String ' ファイルパスをシート「入力ベース」のセルA1から取得する strFilePath = CStr(Worksheets(1).Range("A1").Value) ' A1が未入力の時はC:\を既定にする If IsNull(strFilePath) Then strFilePath = "C:\" End If ' ファイルを開くダイアログボックスを表示する strFilename = OpenFileDialog(strFilePath & "\給与*.xls") If strFilename = "" Then ' ユーザーがキャンセルを選択したとき Exit Sub ' 処理を抜ける ' ユーザーがファイルを選択したとき Else ' ユーザーが指定したファイルを開く Set databook = Workbooks.Open(Filename:=strFilename) End If End Sub
▼ページトップへ