excel vba dir函数找到doc而不是docx

时间:2015-03-02 11:12:32

标签: excel vba excel-vba

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



感谢

4 个答案:

答案 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