分享

文件对话框

 L罗乐 2017-09-18

今天我们从一个十分常见的问题说起。无论是一个什么样的程序,我们从用户的角度出发,当然希望能与系统进行友好的交互。之前我们介绍了两个交互方法: MsgBoxInputBox,但这两个方法更多的是与系统进行信息交互,并且是简单的交互。

对于一些复杂的情况,我们需要调用一些更高级的交互方法。比如,如果我要用VBA来合并工作表,首先我得让系统知道我要合并哪些表吧?这个我可不能一个一个往InputBox里面输入。这太不人道了!!!

其实这些需求微软的开发人员都替我们想好了。一个比较简答的方法是,直接把选择文件的对话框提供给我们,这也就是我们今天要讲的:FileDialog

FileDialog实际上是Application对象的一个属性。调用起来十分简单,直接使用:

Application.FileDialog(fileDialogType)

fileDialogType参数,表示要调用的对话框类型。系统可以提供的有4种,对应的参数分别是:

  • msoFileDialogFilePicker. 让用户选取一个文件

  • msoFileDialogFolderPicker. 让用户选取一个文件夹

  • msoFileDialogOpen. 让用户打开一个文件

  • msoFileDialogSaveAs. 让用户另存为

详见:https://msdn.microsoft.com/en-us/library/office/ff836226.aspx  

这些参数这么长,大家不用怕记不住,在VBE里输入时,系统会有自动提示的。

FileDialog只有两个方法,我们先来看Show方法。

Show

FileDialog的Show方法根据对话框状态返回一个布尔值,如果用户选择好了文件,程序继续进行,那么返回True,在立即窗口打印的话,可以看到返回的是-1。如果用户点击了取消,就会返回False,立即窗口打印显示0。

Show方法实际上并不会直接打开所选中的文件,他只是把选中的文件放置了文件名和路径。如果我们要直接执行,应该怎么处理呢?

Execute

对于类型为msoFileDialogOpen和msoFileDialogSaveAs的对话框来说,可以直接使用Execute方法来执行打开或者保存的动作,而不需要先把选中文件的绝对路径存起来。

下面这段是一个Execute方法的小例子,当然也用上了Show方法

Sub EmployFileDialog()    Dim FD As FileDialog    Set FD = Application.FileDialog(msoFileDialogOpen)    With FD        If Not .Show Then            Exit Sub        Else            .Execute        End If    End With End Sub

前面我们说了,Show方法只是把文件路径保存起来了,那么这些路径放在哪里了?我们应该怎么索引呢?这就会用到FileDialogSelectedItems属性。

SelectedItems

Show方法选中的文件的绝对路径其实放在了SelectedItems里。

可以使用For循环来遍历SelectedItems,获得选中文件的绝对路径。

Sub EmployFileDialog()    Dim FD As FileDialog, iCount%    Set FD = Application.FileDialog(msoFileDialogFilePicker)    With FD        .AllowMultiSelect = True        If Not .Show Then            Exit Sub        Else            For iCount = 1 To .SelectedItems.Count                Debug.Print .SelectedItems(iCount)            Next        End If    End With End Sub

  • FileDialogSelectedItems有Count方法,用来计算有多少个被选中的文件。

  • FileDialogSelectedItems索引号的下标是1,而不是0

  • 除了直接使用号码索引之外,也可以使用For Each  Next结构来处理。

         For Each vItem In .SelectedItems      '这里要事先定义一个vItem的Variant变量          Debug.Print vItem      Next
  • FileDialog可以设置AllowMultiSelect,如果是True的话,就可以同时选中多个文件,否则只能选择单个文件

总结一下

  • FileDialog对象

  • Show方法

  • Execute方法

  • FileDialogSelectedItems属性


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多