做while循环不跳过它应该的文件
我正在构build一个macros来打开文件夹中的每个文件,检查它是否共享,如果是共享,保存并closures它。 它被embeddedLockFolder.xlsm
文件夹中的一个文件中,所以我需要它跳过它所在的文件,否则它将在循环中途closures它。
最初有一个If Filename <> 'Lockfolder.xlsm' Then
哪个工作正常,但我有嵌套If语句的麻烦If Activeworkbook.MultiUserEditing
在那里,所以我认为可能会更容易把前者放在“做而“代码段”。
它不工作。 代码仍然打开我想要它跳过的文件,然后closures它,中止整个事情只有几个文件进入循环。
我究竟做错了什么?
Sub Unshare() Dim FileName As String Dim cPwd As String FileName = Dir(CurDir() & "\" & "*.xls") Do While FileName <> "LockFolder.xlsm" Or FileName <> "" Application.DisplayAlerts = False Workbooks.Open (CurDir & "\" & FileName) If ActiveWorkbook.MultiUserEditing Then ActiveWorkbook.ExclusiveAccess ActiveWorkbook.Save ActiveWorkbook.Close Else ActiveWorkbook.Close End If FileName = Dir() Loop Application.DisplayAlerts = True End Sub
它不跳过你的特殊文件的原因是因为你已经使用or
在do while
。
任何string都不是a或不是b,因为它不能同时是a和b:
FileName <>"LockFolder.xlsm" (a) <>"" (b) a or b ----------------- ----------------------- -------- ------ "LockFolder.xlsm" false true true "" true false true <all others> true true true
请注意,我没有包含在上面的行false/false
情况,因为我很难findtesting数据,会产生它:-)
你也会遇到这样的问题,即你的循环在find你的特殊文件时会终止,可能会跳过一些不应该的循环。
你需要你do while
只是简单地检查终止值""
并使用一个if
内跳过:
Do While FileName <> "" If FileName <> "LockFolder.xlsm" Then :
你的问题是你的while循环一find名为"LockFolder.xlsm"
的文件就退出。
你不需要使你的while循环退出条件依赖于这个文件,而是跳过循环中的这个文件
这一行:
Do While FileName <> "LockFolder.xlsm" Or FileName <> ""
是问题。 如果您发现这个"LockFolder.xlsm"
文件,只有在FileName为空的情况下,您才不想停止循环。 所以把它改为:
Do While FileName <> ""
然后只是检查你想要在循环内跳过的文件名,然后跳过那个文件
Do While FileName <> "" If FileName <> "LockFolder.xlsm" Then ... End If FileName = Dir() Loop
FileName = Dir(CurDir() & "\" & "*.xls") Application.DisplayAlerts = False Do While FileName <> "" If FileName <> "LockFolder.xlsm" Then With Workbooks.Open(CurDir & "\" & FileName) If .MultiUserEditing Then .ExclusiveAccess .Save End If .Close End With End If FileName = Dir() Loop Application.DisplayAlerts = True