|
楼主 |
发表于 2009-3-15 18:27
|
显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
第6部分 使用对话框
技巧77 内置对话框
77-1 调用内置的对话框
如果需要使用“打开”、“打印”等Excel内置对话框已经具有的功能,可以使用代码直接调用这些内置的对话框,如下面的代码所示。- #001 Sub DialogOpen()
- #002 Application.Dialogs(xlDialogOpen).Show arg1:=ThisWorkbook.Path & "\*.xls"
- #003 End Sub
复制代码 代码解析:
DialogOpen过程显示内置的“打开”对话框并选定示例所在的文件夹。
显示内置对话框语法如下:
Application.Dialogs(xlDialogConst).Show
Dialogs集合代表所有的内置对话框,每个Dialog对象代表一个内置对话框,不能新建内置对话框或向该集合中添加内置对话框。
参数xlDialogConst是内置对话框的内置常量,每个常量都以“xlDialog”开头,其后是对话框的名称,如“打开”对话框的常量为“xlDialogOpen”。常用内置对话框的内置常量如表格所示。
显示内置对话框使用Show方法,应用于Dialog对象的Show方法语法如下:
expression.Show(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10, Arg11, Arg12, Arg13, Arg14, Arg15, Arg16, Arg17, Arg18, Arg19, Arg20, Arg21, Arg22, Arg23, Arg24, Arg25, Arg26, Arg27, Arg28, Arg29, Arg30)
参数expression是必需的,返回Dialog对象之一。
参数arg1到参数arg30是可选的,仅应用于内置对话框,是命令的初始参数。若要查找要设置的参数,请在内置对话框参数列表中查找对应的对话框常量。
运行alogOpen过程,显示内置的“打开”对话框,并且直接选定示例所在的文件夹,如图所示。
77-2 获取选定文件的文件名
如果只希望获取用户在显示的内置 “打开”对话框中选定文件的文件名,而不想真正打开该文件,那么可以使用GetOpenFilename方法,如下面的代码所示。- #001 Sub OpenFilename()
- #002 Dim Filename As Variant
- #003 Dim mymsg As Integer
- #004 Dim i As Integer
- #005 Filename = Application.GetOpenFilename(Title:="删除文件", MultiSelect:=True)
- #006 If IsArray(Filename) Then
- #007 mymsg = MsgBox("是否删除所选文件?", vbYesNo, "提示")
- #008 If mymsg = vbYes Then
- #009 For i = 1 To UBound(Filename)
- #010 Kill Filename(i)
- #011 Next
- #012 End If
- #013 End If
- #014 End Sub
复制代码 代码解析:
OpenFilename过程使用GetOpenFilename方法显示标准的内置“打开”对话框,获取用户选定文件的文件名后使用Kill语句删除。
GetOpenFilename方法显示标准的内置“打开”对话框,获取文件名,语法如下:
expression.GetOpenFilename(FileFilter, FilterIndex, Title, ButtonText, MultiSelect)
参数expression是必需的,返回一个Application对象。
参数FileFilter是可选的,指定文件筛选条件的字符串。如果省略,则默认参数值为“所有文件(*.*)”。
参数FilterIndex是可选的,指定默认文件筛选条件的索引号,取值范围为 1 到由 FileFilter 所指定的筛选条件数目。如果省略,或者取值大于可用筛选数目,则采用第一个文件筛选条件。
参数Title是可选的,指定对话框的标题。如果省略,则使用“打开”作为标题。
参数ButtonText是可选的,仅用于Macintosh。
参数MultiSelect是可选的,如果该值为True,则允许选定多个文件名,如果该值为False,则只允许选定单个文件名。默认值为False。
第5行代码显示标准的“打开”对话框,将对话框的标题设置为“删除文件”,将MultiSelect参数设置为True,允许选定多个文件。
第6行代码,获得返回值。当用户选定文件后,返回的是选定的文件名或用户输入的文件名。因为MultiSelect参数已设置为True,所以返回值将是一个包含所有选定文件名的数组(即使仅选定了一个文件名)。如果用户取消了对话框,则该值为False。
第8行到第12行代码,经询问用户后使用Kill语句从磁盘中删除用户选定的文件。
运行OpenFilename过程,显示标准的内置“打开”对话框,删除用户选定的文件,如所图示。
注意 VBA中数组下界默认从0开始,但使用GetOpenFilename方法选择多个文件时返回的包含选定文件名的数组下界是从1开始。
77-3 使用“另存为”对话框
在备份文件时可以使用GetSaveAsFilename方法显示标准的内置“另存为”对话框,获取备份文件的文件名和保存路径,而无须真正保存任何文件。如下面的代码所示。- #001 Sub CopyFilename()
- #002 Dim NowWorkbook As Workbook
- #003 Dim FileName As String
- #004 On Error GoTo line
- #005 FileName = Application.GetSaveAsFilename _
- #006 (InitialFileName:="D:" & Date & " " & ThisWorkbook.Name, _
- #007 fileFilter:="Excel files(*.xls),*.xls,All files (*.*),*.*", _
- #008 Title:="数据备份")
- #009 If FileName <> "False" Then
- #010 Set NowWorkbook = Workbooks.Add
- #011 With NowWorkbook
- #012 .SaveAs FileName
- #013 ThisWorkbook.Sheets("Sheet2").UsedRange.Copy _
- #014 .Sheets("Sheet1").Range ("A1")
- #015 .Save
- #016 End With
- #017 GoTo line
- #018 End If
- #019 Exit Sub
- #020 line:
- #021 ActiveWorkbook.Close
- #022 End Sub
复制代码 代码解析:
CopyFilename过程使用GetSaveAsFilename方法显示标准的内置“另存为”对话框,获取备份文件的文件名和保存路径,新建工作簿保存备份数据。
第4行代码,错误处理语句。备份过程中,如果已存在同名工作簿,会出现如图所示的提示,如果选择了“否”,此时新工作簿已经建立,在执行第12行代码时发生错误,使程序中断,所以使用GoTo语句执行第21行代码,关闭新建立的工作簿。
第5行代码,使用GetSaveAsFilename方法显示标准的内置“另存为”对话框。GetSaveAsFilename方法的语法如下:
expression.GetSaveAsFilename(InitialFilename, FileFilter, FilterIndex, Title, ButtonText)
参数expression是必需的,返回一个Application对象。
参数InitialFilename是可选的,指定建议的文件名。如果省略,将活动工作簿的名称作为建议的文件名。
参数FileFilter是可选的,指定文件筛选条件的字符串。
参数FilterIndex是可选的,指定默认文件筛选条件的索引号,取值范围为 1 到 FileFilter 指定的筛选条件数目之间。如果省略,或者取值大于可用筛选数目,则采用第一个文件筛选条件。
参数Title是可选的,指定对话框标题。如果省略,则使用默认标题。
参数ButtonText是可选的,仅用于 Macintosh。
第6行代码,设置对话框的保存路径为D盘,保存文件名为日期加工作簿名称。
第7行代码,设置对话框文件保存类型为Excel文件类型。如果需要设置为文本类型需设置为“文本文件(*.txt), *.txt”,而如果是图片文件则需设置为“图片文件(*.bmp;*.jpg),* bmp;*.jpg”。
第8行代码,设置对话框的标题为“数据备份”。
第9行代码,如果用户没有取消操作。
第10行到第16行代码,使用Add方法新建工作簿保存到对话框选定的路径中,将数据备份到新工作簿中。
第17行代码,使用GoTo语句执行第21行代码,关闭新建工作簿和开启屏幕刷新。
运行CopyFilename过程,显示内置“另存为”对话框,供用户备份工作簿数据,如图所示。
|
|