在编写vba代码的解决方案时,为了使解决方案更加的具有人机交互性,经常会提供各种对话框让用户进行选择。
其中选择文件或者选择文件夹对话框是最经常用到的,本文介绍几种在vba中打开选择文件和选择文件夹对话框的方法。
方法一:使用vba内置的FileDialog对象用于操作打开文件和选择文件夹对话框
vba中为我们内置了一个FileDialog对象用于操作打开文件和选择文件夹对话框。实际上,根据不同的MsoFileDialogType类型,它可以提供4种不同的对话框,具体如下:
MsoFileDialogType常量 | 用途 |
msoFileDialogFilePicker | 允许用户选择一个或多个文件 |
msoFileDialogFolderPicker | 允许用户选择文件夹路径 |
msoFileDialogOpen | 允许用户打开一个或多个文件 |
msoFileDialogSaveAs | 允许用户保存文件 |
每次都要用FileDialog对象的Show方法来打开对话框,当选择了文件或者文件夹后,选择的文件名或者文件夹的路径都将存储在FileDialogSelectedItems集合中,该集合可以用FileDialog对象的SelectedItems属性获得。
以下是一段通用的打开选择文件的对话框的vba代码:
Function GetPath() As String '声明一个FileDialog对象变量 Dim oFD As FileDialog Dim oFDFilter As FileDialogFilters ' '创建一个选择文件对话框 Set oFD = Application.FileDialog(msoFileDialogFilePicker) '创建一个选择文件夹对话框 ' Set oFD = Application.FileDialog(msoFileDialogFolderPicker) '声明一个变量用来存储选择的文件名 Dim vrtSelectedItem As Variant With oFD .Filters.Clear .Filters.Add "Excel文件", "*.xls*", 1 .Filters.Add "Word文件", "*.doc*", 2 '允许选择多个文件 .AllowMultiSelect = True '使用Show方法显示对话框,如果单击了确定按钮则返回-1。 If .Show = -1 Then '遍历所有选择的文件 For Each vrtSelectedItem In .SelectedItems '获取所有选择的文件的完整路径,用于各种操作 GetPath = vrtSelectedItem Next '如果单击了取消按钮则返回0 Else End If End With '释放对象变量 Set oFD = Nothing End Function
如果要改成选择文件夹的对话框只需要将
Application.FileDialog(msoFileDialogFilePicker)改成 Application.FileDialog(msoFileDialogFolderPicker)即可。
方法二:使用Shell对象的BrowseForFolder方法打开选择文件夹对话框
它的语法如下:
Shell.BrowseForFolder( _ ByVal Hwnd As Integer, _ ByVal sTitle As BSTR, _ ByVal iOptions As Integer, _ [ ByVal vRootFolder As Variant ] _ ) As FOLDER
其中Hwnd参数为拥有对话框的窗体的句柄,sTitle参数为对话框的标题,iOptions参数为对话框的一些设置,vRootFolder参数为可选参数,一般省略。
它的返回值是一个文件夹Folder对象。
代码如下:
Sub QQ1722187970() Dim oShell As Object Dim oFolder As Object Set oShell = VBA.CreateObject("shell.application") With oShell Set oFolder = .BrowseForFolder(0, "请选择要打开的文件夹", 0) With oFolder If Not (oFolder Is Nothing) Then MsgBox "你选择的是" & .Title Else MsgBox "你没有选择文件夹" End If End With End With End Sub
仅有1条评论 发表评论