我需要一些我似乎无法解决的逻辑陈述的帮助。
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
我正在使用的测试用例应该使每个SheetExists
语句返回true,因此不会向用户发送消息。但是,Then
语句总是会运行,即使它不应该运行。它将打印每个条件为True,但仍然运行Then
语句
我想要的: 如果任何纸张不存在 - >告诉我哪些床单存在。 Else->什么都不做
错误: 当所有工作表都存在时:它仍然会告诉用户
我知道SheetExists有效,因为我写了另一个子来测试它,它工作正常。
表存在代码:
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
答案 0 :(得分:0)
假设SheetExists
代码为:
Function SheetExists(ByVal sName As String) As Boolean
SheetExists = Evaluate("ISREF('" & sName & "'!A1)")
End Function
答案 1 :(得分:0)
我认为你的问题在这里:
ThisWorkbook
ActiveWorkbook
和ThisWorbook
可能是截然不同的事情。
SheetExists()
指的是当前正在执行的代码所在的工作簿。在这种情况下,ActiveWorkbook
函数从哪个工作簿运行。
If wb Is Nothing Then Set wb = ActiveWorkbook
是指用户应用程序窗口中当前处于活动状态的工作簿。
尝试将该行更改为:
{{1}}