我在excel中使用此vba代码从特定文件夹中获取文件名:
Sub getfilelistfromfolder()
Dim varDirectory As Variant
Dim flag As Boolean
Dim i As Integer
Dim strDirectory As String
strDirectory = Application.ActiveWorkbook.Path & "\"
i = 1
flag = True
varDirectory = Dir("C:\Users\USER\Documents\*.doc", vbNormal)
Range("A2:A100").Select
Selection.ClearContents
While flag = True
If varDirectory = "" Then
flag = False
Else
Cells(i + 2, 1) = varDirectory
varDirectory = Dir
i = i + 1
End If
Wend
End Sub
但是,我只想得到.doc NOT .docx。
如何修改此代码才能获得.doc文件?
注意:这是我给出的一个例子。我真正的文件扩展名是我们特定于程序的文件类型:.out和.outreview
我想获取仅用于.out文件和不是 .outreview文件的列表。
示例文件名:
的 file1.out
file2.outreview
file3.out
file4.outreview
我只想列出.out文件。
感谢
答案 0 :(得分:4)
似乎dir函数默默地忽略超过三个字符的扩展名,并将它们视为三个字符(它使用8.3 char DOS名称 - 可能它使用的是一些较旧的Windows API),非常类似DOS dir命令会在命令提示符下尝试dir /X *.doc
。
解决方法可能是测试扩展,这样的事情应该有效:
IF (UCase(Right(varDirectory, 3)) = "DOC")
答案 1 :(得分:2)
只测试所需的扩展名:
Sub getfilelistfromfolder()
Dim varDirectory As Variant
Dim flag As Boolean
Dim i As Long
Dim strDirectory As String
Dim Desired As String
Desired = ".doc"
i = 1
flag = True
Range("A2:A100").Select
Selection.ClearContents
While flag = True
If varDirectory = "" Then
flag = False
Else
If Right(varDirectory, 4) = Desired Then
Cells(i + 2, 1) = varDirectory
i = i + 1
End If
varDirectory = Dir
End If
Wend
End Sub
答案 2 :(得分:0)
如果您检查对" Microsoft Scripting Runtime"的引用。 (菜单附加 - >参考),您可以使用FileSystemObject:
dim fso as FileSystemObject
dim folder as Scripting.Folder
dim file as Scripting.File
dim extension as String
set fso = new FileSystemObject
set folder = fso.getFolder("C:\Users\USER\Documents\")
extension = ".doc"
for each file in folder.Files
if Right(file.shortname, 4) = extension then
' do stuff
end if
next file
请注意,file.Type
- 属性会产生类似于" Word文档"的表达式,这些表达式在不同的PC和语言上可能会有所不同。
答案 3 :(得分:0)
您可以使用" .Doc"替换代码的相应行以搜索文件扩展名。仅强>;以下行/行。
If UCase(Right(Trim(varDirectory), 4)) = ".DOC" Then
'Your Code here
End If