Excel VBA DIR仅循环一次

时间:2015-05-07 21:06:49

标签: excel vba excel-vba

我创建了一个VBA,它循环存储文件夹中的excel文件。它仅通过其文件名中包含单词“BAD”的循环。我的问题是DIR似乎只能工作一次?在行score之后的StrFile =“”。我已经尝试过StrFile = DirStrFile = Dir()

StrFile = Dir(StrFile)

更新:我注意到可能导致问题的原因,我对DIR()并不熟悉。

在Do While脚本中,它表示 If Application.FileDialog(msoFileDialogFolderPicker).Show <> 0 Then TheFolder = Application.FileDialog(msoFileDialogFolderPicker).SelectedItems(1) Dim StrFile As String StrFile = Dir(TheFolder & "\BAD *") Do While Len(StrFile) > 0 'Do Something StrFile = Dir 'Check next file. 'This is where it fails, it doesn't check the 2nd file Loop Else End End If 实际上是对另一个函数的调用,并且该函数具有'Do Something。当我尝试注释掉或禁用对该函数的调用时,脚本可以正常工作。所以我猜DIR只能使用一次?如果您使用DIR()循环文件夹中的文件,则无法使用其他/不同的DIR()?

1 个答案:

答案 0 :(得分:2)

这会遍历文件夹中的每个文件,并检查它是否感兴趣(在这种情况下,如果它是csv - 根据您的要求使用If Lcase(Left(thing.path, 4)) = "bad " then。)。

Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFolder("c:\windows")
For Each thing in f.files
    If LCase(Right(thing.path, 3)) = "csv" Then
        msgbox thing.path
        Set doc = GetObject(thing.path)
        msgbox Doc.name
        Doc.close
        Set Doc = Nothing
    End If
Next

如果您阅读帮助,则表示使用FSO而不是本机功能。

  

Visual Basic的一个新功能是文件系统对象(FSO)对象模型,它提供了一个基于对象的工具来处理文件夹和文件。除了使用传统的Visual Basic语句和命令之外,这还允许您使用熟悉的object.method语法和一组丰富的属性,方法和事件来处理文件夹和文件。