关于VBA的DIR搜索后缀名的问题
答案:1 悬赏:10 手机版
解决时间 2021-03-25 18:09
- 提问者网友:太高姿态
- 2021-03-24 22:30
关于VBA的DIR搜索后缀名的问题
最佳答案
- 五星知识达人网友:有你哪都是故乡
- 2021-03-24 23:56
Sub cc()
Dim MyPath As String, MyName As String, TName() As String
MyPath = "D:\"
MyName = MyPath & "*.xls"
n = CreateObject("Scripting.FileSystemObject").GetFolder(MyPath).Files.Count
ReDim TName(1 To n)
MyName = Dir(MyName)
i = 0
Do While MyName <> ""
if instr(MyName,"xls") then
i = i + 1
TName(i) = MyName
end if
MyName = Dir
Loop
End Sub追问感谢!我也知道这个可以实现。
重点是想了解DIR的问题,因为与DIR配合的已经有“*”和“?”等通配符,为什么后缀会出现以上情况?还是DIR本身问题呢?追答不明白 您说啥意思追问如果指定文件夹中有.xlsm、.xls、.xlsx等文件(后缀包含.xls)。
我的理解:正常搜索.xls文件,用Dir(*.xls)即可,但实际他列出所有包含.xls的文件。就相当于是Dir(*.xls*)。
Dir(*.xls) = Dir(*.xls*) 这是我费解的地方????追答Dim MyFile, MyPath, MyName
' 返回“WIN.INI”(如果该文件存在)。
MyFile = Dir("C:\WINDOWS\WIN.ini")
' 返回带指定扩展名的文件名。
如果超过一个 *.ini 文件存在, ' 函数将返回按条件第一个找到的文件名。
MyFile = Dir("C:\WINDOWS\*.ini")
'若第二次调用 Dir 函数,但不带任何参数,则函数将返回同一目录下的下一个 *.ini 文件。
MyFile = Dir追问这个我知道,我想问的是:
Dir(*.xls)与Dir(*.xls*)效果等同,为什么?追答xls*中的*表示xls后边还可以有N个任意多个字符,也就是可以匹配Excel高版本的文件,Dir(*.xls)就不能匹配高版本的Excel文件了而Dir(*.xls*)就可以。明白?追问我的意思是Dir(AAA.xls)与Dir(AAA.xls*),这两个命令都可以返回AAA.xlsm。
我只想要AAA.xls文件,却不能用Dir直接完成。追答这应该不可能吧?
那这样吧!!
Sub cc()
Dim MyPath As String, MyName As String, TName() As String
MyPath = "D:\"
MyName = MyPath & "*.xls"
n = CreateObject("Scripting.FileSystemObject").GetFolder(MyPath).Files.Count
ReDim TName(1 To n)
MyName = Dir(MyName)
i = 0
Do While MyName <> ""
if right(MyName,4) = ".xls" then
i = i + 1
TName(i) = MyName
end if
MyName = Dir
Loop
End Sub
如此便只得出xls后缀了。追问事实确实如此,所以我怀疑是不是Dir本身的问题。
算了,还是非常感谢你的解答!追答您可以去做学术,您很认真严谨,我是只要达到我的目的就行了,水平有限,解答不了啊,抱歉啊!!
Dim MyPath As String, MyName As String, TName() As String
MyPath = "D:\"
MyName = MyPath & "*.xls"
n = CreateObject("Scripting.FileSystemObject").GetFolder(MyPath).Files.Count
ReDim TName(1 To n)
MyName = Dir(MyName)
i = 0
Do While MyName <> ""
if instr(MyName,"xls") then
i = i + 1
TName(i) = MyName
end if
MyName = Dir
Loop
End Sub追问感谢!我也知道这个可以实现。
重点是想了解DIR的问题,因为与DIR配合的已经有“*”和“?”等通配符,为什么后缀会出现以上情况?还是DIR本身问题呢?追答不明白 您说啥意思追问如果指定文件夹中有.xlsm、.xls、.xlsx等文件(后缀包含.xls)。
我的理解:正常搜索.xls文件,用Dir(*.xls)即可,但实际他列出所有包含.xls的文件。就相当于是Dir(*.xls*)。
Dir(*.xls) = Dir(*.xls*) 这是我费解的地方????追答Dim MyFile, MyPath, MyName
' 返回“WIN.INI”(如果该文件存在)。
MyFile = Dir("C:\WINDOWS\WIN.ini")
' 返回带指定扩展名的文件名。
如果超过一个 *.ini 文件存在, ' 函数将返回按条件第一个找到的文件名。
MyFile = Dir("C:\WINDOWS\*.ini")
'若第二次调用 Dir 函数,但不带任何参数,则函数将返回同一目录下的下一个 *.ini 文件。
MyFile = Dir追问这个我知道,我想问的是:
Dir(*.xls)与Dir(*.xls*)效果等同,为什么?追答xls*中的*表示xls后边还可以有N个任意多个字符,也就是可以匹配Excel高版本的文件,Dir(*.xls)就不能匹配高版本的Excel文件了而Dir(*.xls*)就可以。明白?追问我的意思是Dir(AAA.xls)与Dir(AAA.xls*),这两个命令都可以返回AAA.xlsm。
我只想要AAA.xls文件,却不能用Dir直接完成。追答这应该不可能吧?
那这样吧!!
Sub cc()
Dim MyPath As String, MyName As String, TName() As String
MyPath = "D:\"
MyName = MyPath & "*.xls"
n = CreateObject("Scripting.FileSystemObject").GetFolder(MyPath).Files.Count
ReDim TName(1 To n)
MyName = Dir(MyName)
i = 0
Do While MyName <> ""
if right(MyName,4) = ".xls" then
i = i + 1
TName(i) = MyName
end if
MyName = Dir
Loop
End Sub
如此便只得出xls后缀了。追问事实确实如此,所以我怀疑是不是Dir本身的问题。
算了,还是非常感谢你的解答!追答您可以去做学术,您很认真严谨,我是只要达到我的目的就行了,水平有限,解答不了啊,抱歉啊!!
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯