excel vba dir函数来查找doc不是docx

我在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文件?

注意 :这是我给出的一个例子。 我真正的文件扩展名是我们特定于程序的文件types:.out和.outreview我想只列出.out文件而不是 .outreview文件。 示例文件名称:
file1.out
file2.outreview
file3.out
file4.outreview
我只想列出.out文件。

谢谢

只需testing所需的扩展名:

 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 

看起来,dir函数默默地忽略了超过三个字符的扩展名,并将它们看作是三个字符(它使用8.3 char DOS名称 – 也许它使用一些较旧的Windows API),就像DOS dir命令一样dir /X *.doc在命令提示符下。

解决方法可能是testing扩展,像这样的应该工作:

 IF (UCase(Right(varDirectory, 3)) = "DOC") 

如果您检查对“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 Document”这样的expression式,在不同的PC和语言上可能不同。

您可以replace相应的代码以仅使用“.Doc”search文件扩展名 ; 用以下行/行。

 If UCase(Right(Trim(varDirectory), 4)) = ".DOC" Then 'Your Code here End If