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
ThisWorkbook
和ActiveWorkbook
可以是非常不同的东西。
-
ThisWorbook
引用当前正在执行的代码所在的工作簿。 在这种情况下,SheetExists()
函数从哪个工作簿运行。 -
ActiveWorkbook
引用当前在用户的应用程序窗口中处于活动状态的工作簿。
尝试将该行更改为:
If wb Is Nothing Then Set wb = ActiveWorkbook