介紹如何使用 VBA 的 Application.FileDialog
建立檔案或目錄選擇對話框,讓使用者以滑鼠選擇檔案或目錄。
在 VBA 巨集程式中,有時候會需要讓使用者選擇電腦中的檔案或目錄,由於一般的路徑都很長,不太可能讓使用者輸入路徑,正常來說都會以檔案選擇對話方塊的介面,讓使用者直接用滑鼠點選,以下將介紹如何使用 VBA 的 Application.FileDialog
建立圖形介面(GUI)的檔案或目錄選擇對話框。
Application.FileDialog
可用來建立選擇檔案的視窗,以下是一個簡單的範例:
' 建立 Application.FileDialog 物件 Dim fDialog As FileDialog Set fDialog = Application.FileDialog(msoFileDialogFilePicker) ' 顯示對話方塊,若傳回 -1 表示有成功選擇檔案 If fDialog.Show = -1 Then ' 顯示選擇的檔案 MsgBox fDialog.SelectedItems(1) End If
在建立 fDialog
這個對話方塊物件之後,呼叫它的 Show
函數即可在螢幕上顯示檔案選擇的視窗,如果使用者正常選擇了一個檔案之後,Show
就會傳回 -1
,我們可以藉此判斷使用者有沒有選擇檔案(或是取消),若有選擇檔案的話,就可以從 SelectedItems
中取出選擇檔案的路徑。
執行後所產生的視窗會像這樣:
當使用者選擇檔案之後,在程式中即可取得類似這樣完整的檔案路徑。
Application.FileDialog
的視窗有許多進階屬性可以調整,例如選擇多檔案、視窗標題、初始目錄與檔案類型等,以下是自訂屬性的範例:
Dim fDialog As FileDialog Set fDialog = Application.FileDialog(msoFileDialogFilePicker) ' 允許選擇多檔案 fDialog.AllowMultiSelect = True ' 視窗標題 fDialog.Title = "請選擇 Excel 檔案" ' 初始目錄 fDialog.InitialFileName = "C:" ' 設定檔案類型 fDialog.Filters.Clear fDialog.Filters.Add "Excel 檔案", "*.xlsx" fDialog.Filters.Add "所有檔案", "*.*" If fDialog.Show = -1 Then ' 逐一處理每個檔案 For Each file In fDialog.SelectedItems MsgBox file Next file End If
這個範例允許使用者同時選擇多個檔案,同時透過 Filters
的方式,讓使用者在選擇檔案時可以依照副檔名過濾檔案,產生的視窗會像這樣:
在使用 Application.FileDialog
建立視窗物件時,會傳入一個參數指定視窗類型,其可用的參數如下:
參數值 | 說明 |
---|---|
msoFileDialogOpen |
開啟舊檔 |
msoFileDialogSaveAs |
儲存檔案 |
msoFileDialogFilePicker |
瀏覽並選擇檔案 |
msoFileDialogFolderPicker |
瀏覽並選擇目錄 |
若需要選擇目錄,則可改用 msoFileDialogFolderPicker
:
Dim fDialog As FileDialog ' 建立選擇目錄的對話方塊 Set fDialog = Application.FileDialog(msoFileDialogFolderPicker) If fDialog.Show = -1 Then ' 顯示選擇的目錄 MsgBox fDialog.SelectedItems(1) End If
這樣產生的視窗就會自動把普通檔案隱藏起來,只顯示目錄讓使用者更容易選擇。
將 Application.FileDialog
的參數改為 msoFileDialogSaveAs
即可產生儲存檔案專用的檔案選擇對話方塊,程式的語法都相同:
' 建立儲存檔案的對話方塊 Set fDialog = Application.FileDialog(msoFileDialogSaveAs) If fDialog.Show = -1 Then MsgBox fDialog.SelectedItems(1) End If
這樣產生出來的檔案選擇對話方塊,除了文字標示稍微不同之外,也會有檔案取代確認的功能。
參考資料:AnalystCave