我创建了一个VBA,它循环存储文件夹中的excel文件。它仅通过其文件名中包含单词“BAD”的循环。我的问题是DIR似乎只能工作一次?在行score
之后的StrFile =“”。我已经尝试过StrFile = Dir
和StrFile = 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()?
答案 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语法和一组丰富的属性,方法和事件来处理文件夹和文件。