1. Dir遍历文件/文件夹
Dir函数返回为字符串类型,格式:
Dir[(pathname[, attributes])]
其中,pathname为文件或文件夹的路径;attribute用于确定返回的属性,当attribute为空时,默认为vbnomal,即返回pathname下文件名称字符串。
attribute属性参数如下,可以填写“常量”或“0”.
常量 | 值 | 说明 |
---|---|---|
vbNormal | 0 | (默认)指定没有属性的文件。 |
vbReadOnly | 1 | 指定只读文件以及不带属性的文件。 |
vbHidden | 2 | 指定隐藏文件以及不带属性的文件。 |
vbSystem | 4 | 指定系统文件以及不带属性的文件。 在 Macintosh 上不可用。 |
vbVolume | 8 | 指定卷标;如果指定任何其他属性,则忽略 vbVolume。 在 Macintosh 上不可用。 |
vbDirectory | 16 | 指定目录或文件夹以及不带属性的文件。 |
vbAlias | 64 | 指定文件名为别名。 仅在 Macintosh 上可用。 (Macintosh:苹果系统) |
E.g. Dir读取文件/文件夹/遍历文件并把文件名导入EXCEL
Sub test()
Dim sname As String
Dim m As Integer
sname = Dir("C:\Users\lenovo\Desktop\VBA test\000\")
Debug.Print sname '在立即窗口中显示结果,立即窗口在代码界面:视图→立即窗口 设置
m = 1
Do Until sname = ""
Sheet1.Cells(m, 1) = sname
m = m + 1
sname = Dir '循环语句中,Dir不需要重新定义。
Loop
End Sub
2. 通配符
(1)星号(*):表示任意多个字符(可以为0个)
(2)问号(?):表示任意一个字符(必须为1个)
(3)井号(#):表示任意一个数字(必须为1个)
(4)感叹号(!):逻辑非,表示不是,如[!0-9]表示非该范围的数字
(5)方括号([]):表示一个范围,如[A-Z a-z]表示全部字母,如果是多个选择区间中间用“,”隔开,如[A-D, H-N]
3. Like运算符
Like比较两个字符串,返回逻辑值,比较的字符串区分大小写,一般与通配符结合使用。
E.g.
Sub test()
Dim sname As String
Dim m As Integer
sname = Dir("C:\Users\lenovo\Desktop\VBA test\000\")
Debug.Print sname
m = 1
Do Until sname = ""
If sname Like "*.dwg" Then ' 用Like判断sname是否是.dwg格式文件,然后进行运算,*:多个字符。
Sheet1.Cells(m, 1) = sname
End If
m = m + 1
sname = Dir
Loop
End Sub
4. Instr函数
返回一个 **Variant **(Long) 值,指定一个字符串在另一个字符串中首次出现的位置。
InStr([ start ], string1, string2, [ compare ])
InStr 函数语法有以下参数:
Part | 说明 |
---|---|
start | 可选。 设置每次搜索的起始位置的数字表达式。 如果忽略,则搜索从第一个字符位置开始。 如果 start 包含 Null,则出现错误。 如果指定了 compare,则 start 参数是必需的。 |
string1 | 必需。 要搜索的字符串表达式。 |
string2 | 必需。 搜索到的字符串表达式。 |
compare | 可选。 指定字符串比较的类型。 如果 compare 为 Null,则将发生错误。 如果省略 compare,则 Option Compare 设置将决定比较的类型。 指定有效的 LCID (LocaleID) 以在比较中使用区域设置特定规则。(具体见office帮助文件) |
设置
compare 参数设置如下。
常量 | 值 | 说明 |
---|---|---|
vbUseCompareOption | -1 | 使用 Option Compare 语句的设置执行比较。 |
vbBinaryCompare | 0 | 区分大小写。 |
vbTextCompare | 1 | 不区分大小写。 |
vbDatabaseCompare | 2 | 仅用于 Microsoft Access。 根据数据库中的信息执行比较。 |
返回值
If | InStr 返回 |
---|---|
string1 是零长度 | 0 |
string1 为 Null | NULL |
string2 是零长度 | start |
string2 为 Null | NULL |
未找到 string2 | 0 |
在 string1 中找到 string2 | 找到匹配的位置 |
start > string2 | 0 |
注释
InStrB 函数适用于包含在字符串中的字节数据。 InStrB 返回某字符串在其他字符串中首次出现的字节位置,而不返回其字符位置。
待解决问题:(1) Dir函数attribute为vbDirectory,返回值“.” 而不是空字符串?
(2) 调用自定义函数同时遍历文件夹and 文件。
参考资料:
2. Dir函数
3.InStr 函数