相关知识点:
Application.GetOpenFilename方法:显示“文件打开”对话框,并将用户选中的文件名,作为一个字符串返回。如果用户点击“取消”按钮,则返回一个逻辑值False。
GetOpenFilename(FileFilter,FilterIndex,Title,ButtonText,MultiSelect) 打开对话框
FileFilter 文件过滤器,全部文件或某一类型文件;一个文件类型,(;)分号指定多个文件名格式
FilterIndex 默认文件类型选项
Title 弹出选择文件对话框的标题
ButtonText 特定版本应用
MultiSelect 可以选择多文件同时打开; 如果MultiSelect为True,那么在判断用户是否按下“取消”按钮时,不能使用If fName<>False Then这种方式,应使用If IsArray(fName)=True Then ,或者将其直接简写为If IsArray(fName) Then
GetSaveFilename(InitialFilename,FileFilter,FilterIndex,Title,ButtonText) “另存为”对话框。
InitialFilename 默认另存为文件名
其他参数跟GetOpenFilename相似
GetOpenFilename和GetSaveFilename都只是返回字符串(或者数组),告知VBA用户选择了什么样的文件名。并不执行打开或保存文件等操作,需要用Workbook.open、Workbook.SaveAs、Open/Input、Line/Print等方法来实现文件操作功能。
例1 调用文件打开对话框
Sub demo()
Dim fName ‘变体类型,无论GetOpenFilename有可能是字符串也可能是逻辑值
fName=Application.GetOpenFilename()
MsgBox fName ‘返回打开文件的完整路径名
Workbooks.Open fName
End Sub
例2 调用文件打开对话框,判断是否选择了文件,文件过滤器使用等参数
Sub demo1()
Dim fName
fName=Application.GetOpenFilename(_
FileFilter:=”文本,*.txt,工作簿,*.xlsx;*.xlsm,全部,*”,_
FilterIndex:=3,Title:=”请选择一个季度报表”) ‘一个文件类型,分号指定多个文件名格式。默认“全部”。指定对话框标题。
If fName<>False Then
MsgBox fName
End If
End Sub
例3 调用文件打开对话框,多文件选择
Sub demo3()
Dim fName, s ‘s是数组
fName=Application.GetOpenFilename(_
FileFilter:=”文本,*.txt,工作簿,*.xlsx;*.xlsm,全部,*”,_
FilterIndex:=3,Title:=”请选择一个季度报表”,MultiSelect:=True) ‘多文件选择
If IsArray(fName) Then ‘IsArray(x):如果变量x是个数组,返回True,否则False
For Each s In fName
MsgBox fName
Next s
End If
End Sub
例4 调用文件另存为对话框,将当前活动工作簿保存在硬盘上,用户指定默认文件名
Sub demosaveas()
Dim fName, w as workbook
Set w=ActiveWorkbook
fName=Application.GetSaveAsFilename(_
InitialFileName:=”报表1.xlsx”, _
FileFilter:=”文本,*.txt,工作簿,*.xlsx;*.xlsm,全部,*”, _
FilterIndex:=2,Title:=”请将季度报表保存到磁盘”)
‘如果用户按下的不是取消按钮,则保存
‘GetSaveAsFilename只返回字符串或False,所以不使用IsArray
If fName<>”” Then
w.SaveAs fName
End If
End Sub