3.5.3-代码解析:S02_读入数据

该过程的实现的功能如下:

1)弹出文件选择框

2)获取已选择文件信息

3)将选择文件的绝对地址和文件名信息作为参数传给过程S0201_文件处理

4)在K3单元格写入已点击

代码如下

1   |   Sub S02_读入数据()
2   |       Dim longName As String
3   |       Dim shortName As String
4   |       Dim selectFile
5   |       Dim fso
6   |       Dim shtFirst
7   |       
8   |       Set fso = CreateObject("Scripting.FileSystemObject")
9   |       Set shtFirst = ThisWorkbook.Worksheets("操作界面")
10  |       
11  |       With Application.FileDialog(msoFileDialogOpen)
12  |           .Title = "选择文件"
13  |           .AllowMultiSelect = True
14  |           .Filters.Clear
15  |           .Filters.Add "Excel文件", "*.xlsx"
16  |           .FilterIndex = 2  '默认的文件筛选条件的索引号
17  |           .InitialFileName = ThisWorkbook.Path & "\" & "【1】输入"
18  |           .Show
19  |           
20  |           For Each selectFile In .SelectedItems
21  |               longName = selectFile
22  |               shortName = fso.GetFile(longName).Name
23  |               Call S0201_文件处理(longName, shortName)
24  |           Next
25  |       End With
26  |       
27  |       shtFirst.Range("K3") = "已点击"
28  |   End Sub
 

代码中文解析

1   |   Sub S02_读入数据()
2   |       申明变量longName为字符串类型
3   |       申明变量shortName为字符串类型
4   |       申明变量selectFile
5   |       申明变量fso
6   |       申明变量shtFirst
7   |       
8   |       定义变量fso为FileSystemObject对象,用于对文件或者文件夹进行操作
9   |       定义工作表shtFirst,表示操作界面工作表
10  |       
11  |       With开始:使用FileDialog(msoFileDialogOpen)打开一个窗口
12  |           定义打开窗口标题为:选择文件
13  |           是否允许多选文件:是
14  |           清空文件选项
15  |           新增Excel文件,尾椎为xlsx的选项
16  |           可省略,应与filter联合使用,此处未发挥作用 
17  |           初始打开位置为:当前文件下【1】输入文件夹
18  |           显示
19  |           
20  |           循环开始:对于选择的文件进行遍历循环
21  |               定义变量longName为选择的文件
22  |               获取文件的名称
23  |               调用过程S0201_文件处理,变传递2个参数
24  |           循环结束
25  |       With结束
26  |       
27  |       工作表shtFirst的K3单元格赋值已点击
28  |   End Sub

关键代码解读

1)第11-25行With…End With,第11行至25行,等价为以下代码。目标在于重复的代码只需要写一次,了解即可,新手无需深究。

Set mso = Application.FileDialog(msoFileDialogOpen)
mso.Title = "选择文件"
mso.AllowMultiSelect = True
mso.Filters.Clear
mso.Filters.Add "Excel文件", "*.xlsx"
mso.FilterIndex = 2
mso.InitialFileName = ThisWorkbook.Path & "\" & "【1】输入"
mso.Show
    
For Each selectFile In mso.SelectedItems
    longName = selectFile
    shortName = fso.GetFile(longName).Name
    Call S0201_文件处理(longName, shortName)
Next

2)第8行Set fso = CreateObject("Scripting.FileSystemObject"),定义了一个文件系统对象。用来对文件和文件夹进行操作,例如获取文件名称等。对于很多常见操作,如文件操作、字典操作等,VBA提供了一些工具包,通过引用这些工具包就可以使用,大大提升工作效率。

关于工具包的引用有两种方法,一种通过代码的方式,如本文中所示。另外通过菜单工具-引用,如图3-18所示。


../_images/3-18.png

图3-18 菜单工具-引用


在弹出的窗口中勾选Microsoft Scripting Runtime,如图3-19所示。另外需要在代码中定义fso,然后就可以使用相关功能。推荐使用第一种方法,这样将程序发给其他人的时候可以直接使用。第二中方法,当程序文件发送给另外人员使用时,也许要使用人员的电脑上在VBE界面中操作绑定。shortName = fso.GetFile(longName).Name,通过该方式获取文件的名称。

Dim fso As New Scripting.FileSystemObject

../_images/3-19.png

图3-19 勾选需要的引用


3)第11行Application.FileDialog(msoFileDialogOpen)。目标在于打开选择文件的窗口。包括以下常用属性,实际效果如图3-20

  • Title,窗体名称

  • AllowMultiSelect,是否允许多选

  • Filters.Add,支持选择的文件格式

  • InitialFileName,默认打开的位置

  • SelectedItems,已选中的文件


../_images/3-20.png

图3-20 选择文件窗口


若希望支持多种文件的选择,.Filters.Add "Excel文件/txt文件", "*.xlsx;*.txt",修改Filters.Add后面的内容即可,不同格式间用;隔开。


../_images/3-21.png

图3-21 多类型文件选择


4)第17行ThisWorkbook.Path,获取当前Excel文件所在文件夹地址