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