excel - Do While,循环在初始循环后找不到文件

标签 excel vba

循环一直在工作,直到我添加了 If/ElseIf 语句来区分以“N”或“V”开头的两个不同文件。一切似乎都很好,但在它最初循环之后,它会直接通过 If 语句跳到否则。我在本地窗口中观看,它正在正确分配下一个文件,但是脚本将其视为开始时没有“V”,而实际上确实如此。建议?谢谢!

这是有问题的部分:

folderPath = myDir
If Right(folderPath, 1) <> "\" Then folderPath = folderPath + "\"
filename = Dir(folderPath & "*.xls")
Do While filename <> ""
    Application.ScreenUpdating = False
    Set wbkCS = Workbooks.Open(folderPath & filename)
    If filename = Dir(folderPath & "V*" & "*.xls") Then
        wbkCS.Worksheets("Cut Sheet").Range("S4:S2000").Copy
        With wbkVer.Worksheets("Cutsheets")
            .Range("A" & .Rows.Count).End(xlUp).Offset(1).PasteSpecial xlPasteValues
        End With
    ElseIf filename = Dir(folderPath & "N*" & "*.xls") Then
        wbkCS.Worksheets("PON Cut Sheet").Range("AV3:AV2000").Copy
        With wbkVer.Worksheets("Cutsheets")
            .Range("A" & .Rows.Count).End(xlUp).Offset(1).PasteSpecial xlPasteValues
        End With
    End If

    filename = Dir
Loop
Application.ScreenUpdating = True

最佳答案

正如 Remy Porter 所指出的,您对 Dir 函数的重复使用会在每次使用时抓取困惑的条目。
If filename = Dir(folderPath & "V*" & "*.xls") Then此行将再次获取 V**.xls 的第一个匹配项。从那条路上。这肯定不是你想要的。

在 Excel VBA 中,您可以使用 like作为最简单的解决方案:If filename like "N*.xls" Then
(而且你不应该使用那些双 ** )

关于excel - Do While,循环在初始循环后找不到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14103515/

相关文章:

sql-server - 使用VBA读取base64图像字符串?

excel - 执行代码时 VBA 运行时错误 91

vba - 打开工作簿的上次修改日期

vba - VBA-Excel-出现错误时转到用户窗体

vba - 访问当前页眉中的形状

vba - 运行时错误 '52' 带有 Dir$ 函数的错误文件名或编号

vba - 仅在 VBA 中的 MID 位置替换

python - 使用 python 计算 excel 中的重复行,我收到错误 TypeError : a bytes-like object is required, not 'str'

python - openpyxl - 使用列表填充列

excel - VBA - 从头开始​​查找字符串