vba:永远循环
Sub something(tecan) On Error Resume Next Dim arr As New Collection, a Dim aFirstArray() As Variant Dim i As Long aFirstArray() = Array(Dir(tecan & "*.ESY", vbNormal)) aFirstArray(0) = Mid(aFirstArray(0), 1, 4) Do While Dir <> "" ReDim Preserve aFirstArray(UBound(aFirstArray) + 1) aFirstArray(UBound(aFirstArray)) = Mid(Dir, 1, 4) Loop On Error Resume Next For Each a In aFirstArray arr.Add a, a Next For i = 1 To arr.Count Cells(i, 1) = arr(i) 'open_esy (tecan & arr(i) & "*") Next Erase aFirstArray For i = 1 To arr.Count arr.Remove i Next i
这里是我怎么称这个子:
something (tecan1) something (tecan2)
在第一个调用它的工作,并做它应该的
但在第二个调用它卡在这个循环:
Do While Dir <> "" ReDim Preserve aFirstArray(UBound(aFirstArray) + 1) aFirstArray(UBound(aFirstArray)) = Mid(Dir, 1, 4) Loop
为什么它卡在循环?
每次使用Dir时,迭代器都会移动(即使您在Dir上有手表也会发生这种情况)。
用下面的代替你的循环
f = Dir Do While f <> "" ReDim Preserve aFirstArray(UBound(aFirstArray) + 1) aFirstArray(UBound(aFirstArray)) = Mid(f, 1, 4) f = Dir Loop
你的代码因为组合而循环
- 在命中“”之后再次调用Dir(返回无效的过程调用或参数)
- 您有一个奇数(> 1)* .ESY文件
- 您有一个错误继续下一步
我会避免使用Dir函数,因为你想要做什么。 每次你调用它没有参数,它会返回下一个文件名。 不知道为什么循环卡住了。
我将使用FileSystemObject类,它对你有更多的控制。 这里是一个例子:
Function GetFiles(fileParam As String) As Collection 'create reference to Microsoft Scripting Runtime 'scrrun.dll Const dir As String = "C:\" Dim fso As New FileSystemObject Dim myFolder As Folder Dim loopFile As File Dim returnCollection As New Collection Set myFolder = fso.GetFolder(dir) For Each loopFile In myFolder.Files If loopFile.Name Like fileParam & "*.ESY" Then 'add the loopfile path into the collection returnCollection.Add loopFile.Path End If Next loopFile Set GetFiles = returnCollection End Function