做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 

它不跳过你的特殊文件的原因是因为你已经使用ordo 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