之前介绍的操作文件的Dir函数与FSO对象都不会弹出窗口,让操作者选择文件。VBA提供这种操作的,是另外的 Application “方法”。

一、使用 Application.GetOpenFilename

参数简解:FileFilter 筛选什么类型的文件,用文件后缀名筛选,只显示指定后缀名的文件。FilterIndex 不知何意,可省略。Title 窗口标题名称。MultiSelect 是否可以多选。

GOF = Application.GetOpenFilename("Excel Files , *.xls;*.xlsx", , "请选取文件", , MultiSelect:=False) ’弹出选取文件的窗口 If GOF = "False" Then '弹出窗口后,点击"取消",GOF会被赋值False(不是false) MsgBox "未选择文件,程序中止" Exit Sub End If Set WB = Workbooks.Open(GOF) ‘打开选择的文件,并赋值给WB对象变量

示例中引号内"Excel Files , *.xls;*.xlsx" 都是FileFilter参数的值;只会显示该文件夹中后缀名为xls或xlsx的文件。第1条语句可以简写:GOF =Application.GetOpenFilename("Excel 文件,*.xls*", MultiSelect:=False) 中间不需要打那么多“逗号”。

此语句执行后会弹出窗口,选取文件后,会将文件名及其路径赋值给GOF变量,GOF是个字符串变量,不是对象。

如果MultiSelect:=True 多选文件后,GOF是个什么呢?

如图:GOF成了一个一维数组(标号起始 1),储存下所有选择的文件名字。打开“多选开关后”即使只选了一个文件也是一维数组格式。打开文件语句就不可这么写了 Set WB = Workbooks.Open(GOF) 。

Application.GetOpenFilename 在选择文件后,并不会对文件做出如“打开”等等操作;GetOpenFilename 不能指定初始的文件夹地址,就是弹出窗口显示的第一个文件夹;不能用来直接选取文件夹,如果这个文件夹下没有任何文件,你将无法选中这个文件夹。