使用If语句的VBA Logic问题

时间:2016-01-08 19:00:14

标签: excel vba excel-vba

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

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

2 个答案:

答案 0 :(得分:0)

假设SheetExists代码为:

,您的IF语句对我来说没问题
Function SheetExists(ByVal sName As String) As Boolean

    SheetExists = Evaluate("ISREF('" & sName & "'!A1)")

End Function

答案 1 :(得分:0)

我认为你的问题在这里:

ThisWorkbook

ActiveWorkbookThisWorbook可能是截然不同的事情。

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

  • If wb Is Nothing Then Set wb = ActiveWorkbook 是指用户应用程序窗口中当前处于活动状态的工作簿。

尝试将该行更改为:

{{1}}