Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 执行While,循环在初始循环后不查找文件_Excel_Vba - Fatal编程技术网

Excel 执行While,循环在初始循环后不查找文件

Excel 执行While,循环在初始循环后不查找文件,excel,vba,Excel,Vba,循环一直在工作,直到我添加了If/ElseIf语句来区分以和“N”或“V”开头的两个不同的文件。一切似乎都正常,但在它最初循环之后,它会直接跳过If语句进入ElseIf。我在本地窗口中观看,它正在正确分配下一个文件,但脚本在开始时将其视为没有“V”,而实际上是这样。建议?谢谢 下面是有问题的部分: folderPath = myDir If Right(folderPath, 1) <> "\" Then folderPath = folderPath + "\" filename

循环一直在工作,直到我添加了If/ElseIf语句来区分以和“N”或“V”开头的两个不同的文件。一切似乎都正常,但在它最初循环之后,它会直接跳过If语句进入ElseIf。我在本地窗口中观看,它正在正确分配下一个文件,但脚本在开始时将其视为没有“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
folderPath=myDir
如果正确(folderPath,1)“\”则folderPath=folderPath+“\”
filename=Dir(folderPath&“*.xls”)
文件名“”时执行此操作
Application.ScreenUpdating=False
设置wbkCS=Workbooks.Open(文件夹路径和文件名)
如果filename=Dir(folderPath&“V*”&“*.xls”),则
wbkCS.工作表(“切割表”).范围(“S4:S2000”).副本
使用wbkVer.工作表(“剪切表”)
.Range(“A”和.Rows.Count).End(xlUp).Offset(1).paste特殊xlpaste值
以
ElseIf filename=Dir(folderPath&“N*”&“*.xls”),然后
wbkCS.工作表(“PON切割表”).范围(“AV3:AV2000”).副本
使用wbkVer.工作表(“剪切表”)
.Range(“A”和.Rows.Count).End(xlUp).Offset(1).paste特殊xlpaste值
以
如果结束
filename=Dir
环
Application.ScreenUpdating=True
而不是这个:-

If filename = Dir(folderPath & "V*" & "*.xls") Then
  • 使用
    Regex执行以下操作
代码:

  • 使用
    instr
e、 g.Filename=“Vvtmvy89file.xls”

代码:

PS:将代码更新为精确的
Regex

,而不是此代码:-

If filename = Dir(folderPath & "V*" & "*.xls") Then
  • 使用
    Regex执行以下操作
代码:

  • 使用
    instr
e、 g.Filename=“Vvtmvy89file.xls”

代码:


PS:更新了代码,使其具有精确的
Regex

Dir是一种混乱的函数。在没有参数的情况下调用Dir会回顾上一次对Dir的调用,并获取满足该条件的下一个文件。因此,您的最后一行,
filename=Dir
现在将获得满足if或elseif中Dir条件的下一个文件


您应该改为使用。Dir是一种混乱的函数。在没有参数的情况下调用Dir会回顾上一次对Dir的调用,并获取满足该条件的下一个文件。因此,您的最后一行,
filename=Dir
现在将获得满足if或elseif中Dir条件的下一个文件


您应该改为使用。

正如Remy Porter所指出的,每次使用Dir函数时,重复使用Dir函数都会抓取混乱的条目

如果filename=Dir(folderPath&“V*”&“*.xls”),则

该行将再次从该路径获取
V**.xls
的第一个匹配项。这肯定不是你想要的

在Excel VBA中,您可以使用
like
作为最简单的解决方案:
如果文件名类似于“N*.xls”,则


(您不应该使用那些双
**

正如Remy Porter所指出的,您重复使用Dir函数会在每次使用时抓取混乱的条目

如果filename=Dir(folderPath&“V*”&“*.xls”),则

该行将再次从该路径获取
V**.xls
的第一个匹配项。这肯定不是你想要的

在Excel VBA中,您可以使用
like
作为最简单的解决方案:
如果文件名类似于“N*.xls”,则


(你不应该使用那些双精度的
***

检查应该只在文件名的开头检查N和V,不是吗?是的,你是对的KekuSemau。顺便说一句,Mike,
Regex
类似的
;)相比可能是杀伤力过大不说,因为这是我的答案。为了你更好的表现而说。你想试试的时候就试试看。检查应该只在文件名开头的N和V,不是吗?是的,你是对的,KekuSemau。顺便说一句,Mike,
Regex
类似的
;)相比可能是杀伤力过大不说,因为这是我的答案。为了你更好的表现而说。当你想试试的时候就试试。谢谢你,这是一种既快又脏的方式。至于双“**”我只是在尝试不同的东西,但通常我不会这么做非常感谢!谢谢你,这是一条又快又脏的路。至于双“**”我只是在尝试不同的东西,但通常我不会这么做非常感谢!
If InStr(Left(filename,1),"V") > 0 then 
  If InStr(filename, ".xls") > 0 then
    '-- Do Something
  End If
End IF