VBA逻辑与If语句的问题

我需要一些我似乎无法解决的逻辑陈述的帮助。

If (SheetExists("Sheet1") = False Or SheetExists("Sheet2") = False Or SheetExists("Sheet3") = False) Then MsgBox ("A Key Sheet does not exist:" & vbNewLine & "Sheet1 Exists: " & SheetExists("Sheet1") & vbNewLine & "Sheet2 Exists: " & SheetExists("Sheet2") & vbNewLine & "Sheet3" & SheetExists("Sheet3")) Else Exit Sub End If 

我正在使用的testing用例应该使每个SheetExists语句返回true,因此不是msg用户。 然而, Then语句总是运行,即使它不应该。 它将打印每个条件为True,但仍然运行Then语句

我想要什么:如果任何工作表不存在 – >告诉我哪些工作表存在。 否则 – >什么也不做

错误:当所有工作表存在时:仍然是用户信息

我知道SheetExists工作,因为我写了另一个子来testing它,它工作正常。

工作表存在代码:

 Function SheetExists(sheetName As String, Optional wb As Workbook) As Boolean Dim sht As Worksheet If wb Is Nothing Then Set wb = ThisWorkbook On Error Resume Next Set sht = wb.Sheets(sheetName) On Error GoTo 0 SheetExists = Not sht Is Nothing End Function 

假设SheetExists代码是这样的,你的IF语句对我来说工作得很好:

 Function SheetExists(ByVal sName As String) As Boolean SheetExists = Evaluate("ISREF('" & sName & "'!A1)") End Function 

我认为你的问题在这里:

 If wb Is Nothing Then Set wb = ThisWorkbook 

ThisWorkbookActiveWorkbook可以是非常不同的东西。

  • ThisWorbook引用当前正在执行的代码所在的工作簿。 在这种情况下, SheetExists()函数从哪个工作簿运行。

  • ActiveWorkbook引用当前在用户的应用程序窗口中处于活动状态的工作簿。


尝试将该行更改为:

 If wb Is Nothing Then Set wb = ActiveWorkbook