No.1
VBA编程中有这样一种情景,就是当我们选择打开一个文件后,并不打算进行编辑,也就是说根本不想打开这个文件,而只是通过"打开文件"对话框来传递这个文件的地址和文件名。
怎么办呢?VBA给出了一个方法,可以方便地通过这个方法实现获取文件地址和名称。
如下图所示,GetOpenFilename方法可实现上述功能。
此文件是Application对象之下使用,使用方法:
Application.GetOpenFilename(FileFilter, FilterIndex, Title, ButtonText, MultiSelect)
参数说明可以参考下图:
如果,在打开对话框中没有单击确定按钮,也就是没有选择任何文件,单击了取消按钮的时候,GetOpenFilename方法返回False。
根据返回值,就可以对程序过程进行一个判断,是传递文件名还是进行其它操作。
下图为另一个方法,实现保存文件名返回。
语法:
Application.GetSaveAsFilename (InitialFilename, FileFilter, FilterIndex, Title, ButtonText)
获取用户文件名,而不保存任何文件。
感觉这两个方法都有些欺骗性,也不知道为什么这么做。
不管怎么着,只要理解在什么场景下可以使用达到目的就行了。
下图为例进行说明
三个按钮,一个打开文件,一个保存文件,一个清除记录。
每打开一个文件就记录一条,每保存一个文件就记录一条,其实都没有执行真正的操作。
清除记录可把记录的内容删除。
看下代码就明白了。
No.2
Private Sub CommandButton1_Click()
Dim O As Variant'定义变量
O = Application.GetOpenFilename’返回值
If O <> False Then‘如果不是False就执行工作表记录过程
WriteValue O, Me.CommandButton1.Caption
Else
MsgBox "没有选择文件!"
End If
End Sub
Private Sub WriteValue(O As Variant, Cname As String)
Dim cell As Range, ir As Integer
Set cell = ActiveSheet.Range("B3")
ir = ActiveSheet.Cells(ActiveSheet.Cells.Rows.Count, cell.Column).End(xlUp).Row + 1
With ActiveSheet.Cells(ir, cell.Column)
.Value = "=row()-3"
.Offset(0, 1).Value = O
.Offset(0, 2).Value = Cname
End With
End Sub
以上代码实现对工作表进行记录,记录内容为打开或保存工作表的地址和文件名。
调用系统标准对话框有几种方法,前面文章里有过介绍,如Dialog对象,就是Microsoft Excel 中的所有内置对话框集合,有兴趣可以参考学习。
欢迎关注、收藏
---END---