今天我们从一个十分常见的问题说起。无论是一个什么样的程序,我们从用户的角度出发,当然希望能与系统进行友好的交互。之前我们介绍了两个交互方法: MsgBox和InputBox,但这两个方法更多的是与系统进行信息交互,并且是简单的交互。 对于一些复杂的情况,我们需要调用一些更高级的交互方法。比如,如果我要用VBA来合并工作表,首先我得让系统知道我要合并哪些表吧?这个我可不能一个一个往InputBox里面输入。这太不人道了!!! 其实这些需求微软的开发人员都替我们想好了。一个比较简答的方法是,直接把选择文件的对话框提供给我们,这也就是我们今天要讲的:FileDialog FileDialog实际上是Application对象的一个属性。调用起来十分简单,直接使用: Application.FileDialog(fileDialogType) fileDialogType参数,表示要调用的对话框类型。系统可以提供的有4种,对应的参数分别是:
详见:https://msdn.microsoft.com/en-us/library/office/ff836226.aspx 这些参数这么长,大家不用怕记不住,在VBE里输入时,系统会有自动提示的。 FileDialog只有两个方法,我们先来看Show方法。 ShowFileDialog的Show方法根据对话框状态返回一个布尔值,如果用户选择好了文件,程序继续进行,那么返回True,在立即窗口打印的话,可以看到返回的是-1。如果用户点击了取消,就会返回False,立即窗口打印显示0。 Show方法实际上并不会直接打开所选中的文件,他只是把选中的文件放置了文件名和路径。如果我们要直接执行,应该怎么处理呢? Execute对于类型为msoFileDialogOpen和msoFileDialogSaveAs的对话框来说,可以直接使用Execute方法来执行打开或者保存的动作,而不需要先把选中文件的绝对路径存起来。 下面这段是一个Execute方法的小例子,当然也用上了Show方法 Sub EmployFileDialog()
Dim FD As FileDialog
Set FD = Application.FileDialog(msoFileDialogOpen)
With FD
If Not .Show Then
Exit Sub
Else
.Execute
End If
End With
End Sub 前面我们说了,Show方法只是把文件路径保存起来了,那么这些路径放在哪里了?我们应该怎么索引呢?这就会用到FileDialogSelectedItems属性。 SelectedItemsShow方法选中的文件的绝对路径其实放在了SelectedItems里。 可以使用For循环来遍历SelectedItems,获得选中文件的绝对路径。 Sub EmployFileDialog()
Dim FD As FileDialog, iCount%
Set FD = Application.FileDialog(msoFileDialogFilePicker)
With FD
.AllowMultiSelect = True
If Not .Show Then
Exit Sub
Else
For iCount = 1 To .SelectedItems.Count
Debug.Print .SelectedItems(iCount)
Next
End If
End With
End Sub
总结一下
|
|
来自: L罗乐 > 《VBA基础入门教程》