5.5.2-代码解析:S01_sub_遍历文件

本过程对【1】输入文件夹下的文件进行遍历循环

  • 1)当文件格式为TXT,调用sub_TXT文件解析,

  • 2)当文件格式为其它格式,调用sub_excel文件解析

文件遍历完毕以后,所有数据全部写入数据库.xlsx文件时,调用sub_数据库排序,对数据库内容进行排序

代码如下

1   Sub S01_sub_遍历文件()
2       currentPath = ThisWorkbook.Path
3       Set fso = CreateObject("Scripting.FileSystemObject")
4       Set currentFolder = fso.GetFolder(currentPath)
5       
6       ' 获取上一级文件夹地址
7       Set upperFolder = currentFolder.parentFolder
8       inputAddress = upperFolder & "\【1】输入"
9       backupAddress = upperFolder & "\【4】备份"
10
11      For Each fileObject In fso.GetFolder(inputAddress).Files
12          eachFileName = fileObject.Name
13          fileFirst4 = Mid(eachFileName, 1, 4)
14          fileFirst4Big = UCase(fileFirst4)
15          If fileFirst4Big = "TIME" Then
16              eachFileType = Split(eachFileName, ".")(1)
17              eachFileTypeBig = UCase(eachFileType)
18              If eachFileTypeBig = "TXT" Then
19                  Call sub_TXT文件解析(inputAddress, eachFileName, backupAddress)
20                  
21              Else
22                  Call sub_excel文件解析(inputAddress, eachFileName, backupAddress)
23              End If
24          End If
25
26      Next
27      
28      ' 数据库数据排序
29      Call sub_数据库排序
30  End Sub

关键代码解读

1)第12行eachFileName = fileObject.Name。获取被遍历文件的文件名。

2)第13-15行: 判断被遍历的文件是否是我们需要的文件

  • 2.1)第13行fileFirst4 = Mid(eachFileName, 1, 4)。文件名为一个字符串,取出其前4个字母。

  • 2.2)第14行fileFirst4Big = UCase(fileFirst4)。将其转换为大写

Mid(拟切片字符串,开始位置,拟截取长度)。以下示例获取拟截取字符串的前4位,运行结果如图5-17所示。

Sub testCode()
    oldString = "Time-123456789"
    newString = Mid(oldString, 1, 4)
    Debug.Print (newString)
    
End Sub

../_images/5-17.png

图5-17 Mid函数


3)第16行eachFileType = Split(eachFileName, ".")(1)。本代码获取文件的格式。通过观察文件的命名规则,将文件名以点号(.)进行分割,分割后的数组中取位置为1的元素(该数组索引从0开始)