大家好,我们今日继续讲解VBA代码解决方案,今日讲解的是第47讲内容:如何删除指定文件。在实际的文件操作中,如果我们需要删除某个文件,往往是选择某个文件,右键点击删除,或者是直接放到回收站中。那么在VBA中如何做到删除文件呢?这时,我们往往会用到GetOpenFilename方法显示标准的内置"打开"对话框,选择某个文件,然后再执行相关的操作。关于GetOpenFilename方法,我们看下面的语法讲解:
语法如下:
expression.GetOpenFilename(FileFilter, FilterIndex, Title, ButtonText, MultiSelect)
参数
a) : expression是必需的,返回一个Application对象。
b) FileFilter是可选的,指定文件筛选条件的字符串。如果省略,则默认参数值为"所有文件(*.*)"。
c) FilterIndex是可选的,指定默认文件筛选条件的索引号,取值范围为 1 到由 FileFilter 所指定的筛选条件数目。如果省略,或者取值大于可用筛选数目,则采用第一个文件筛选条件。
d) Title是可选的,指定对话框的标题。如果省略,则使用"打开"作为标题。
e) ButtonText是可选的,仅用于Macintosh。
f) MultiSelect是可选的,如果该值为True,则允许选定多个文件名,如果该值为False,则只允许选定单个文件名。默认值为False。
特别提示1:在GetOpenFilename方法中,其实是我们只希望获取用户在显示的内置 "打开"对话框中选定文件的文件名,而不想真正打开该文件。
如果要删除某文件需要利用到KILL命名,下面我们看一段代码,利用GetOpenFilename方法和KILL命令来完成删除某文件的过程:
Sub MyOpenFilename()
Dim Filename As Variant
Dim mymsg As Integer
Dim i As Integer
Filename = Application.GetOpenFilename(Title:="删除文件", MultiSelect:=True)
If IsArray(Filename) Then
mymsg = MsgBox("是否删除你所选文件?", vbYesNo, "提示")
If mymsg = vbYes Then
For i = 1 To UBound(Filename)
Kill Filename(i)
Next
End If
End If
End Sub
代码解析:MyOpenFilename过程使用GetOpenFilename方法显示标准的内置"打开"对话框,获取用户选定文件的文件名后使用Kill语句删除。
a) 第5行代码显示标准的"打开"对话框,将对话框的标题设置为"删除文件",将MultiSelect参数设置为True,允许选定多个文件。
b) 第6行代码,获得返回值。当用户选定文件后,返回的是选定的文件名或用户输入的文件名。因为MultiSelect参数已设置为True,所以返回值将是一个包含所有选定文件名的数组(即使仅选定了一个文件名)。如果用户取消了对话框,则该值为False。
c) 第8行到第12行代码,经询问用户后使用Kill语句从磁盘中删除用户选定的文件。
运行OpenFilename过程,显示标准的内置"打开"对话框,删除用户选定的文件.
特别提示2: VBA中数组下界默认从0开始,但使用GetOpenFilename方法选择多个文件时返回的包含选定文件名的数组下界是从1开始。
下面实测上述代码:
代码窗口:
运行后弹出删除文件对话框:
选择文件后,选择打开:
选择"是"之后,文件将被删除。
特别提示3:此时删除文件时永久的删除,在回收站中是看不到的。
今日内容回向:
1 GetOpenFilename方法的意义是什么?
2 如何完成删除文件的过程?
3 上面的内容中有三个特别提示,是否理解呢?