vba检查表是否存在 - 对象需要错误

时间:2015-04-06 19:33:20

标签: excel vba

我正在处理此代码,当用户在目标范围内输入值时,程序将检查是否存在工作表名称,并做出相应的反应。

我有以下代码,第二部分(Cell C17)工作正常,但第一部分(Cell C3)If Not Sheet Is Nothing Then中的这一行抛出了一个对象所需的错误。我在调试模式下查看代码,发现sheet的值为空,而sheet1则为空。这两个部分的逻辑是完全相同的,所以我很困惑为什么第一个细胞不起作用。有人能指点一下吗?感谢。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rp, rp1 As String
Dim Sheet, Sheet1 As Worksheet

    rp = ThisWorkbook.Sheets("Settings and Instruction").Range("C3").Value
    rp1 = ThisWorkbook.Sheets("Settings and Instruction").Range("C17").Value


    On Error Resume Next
    Set Sheet1 = Worksheets(rp1)
    On Error GoTo 0

    On Error Resume Next
    Set Sheet = Worksheets(rp)
    On Error GoTo 0

    If Target.Address = "$C$3" Then


            If Not Sheet Is Nothing Then

            MsgBox "Sheet name already exists, please enter a new period."
            Else
            ConfirmPeriodNew.Show
            End If


    ElseIf Target.Address = "$C$17" Then

            If Not Sheet1 Is Nothing Then
            ConfirmPeriodUp.Show
            Else
            MsgBox "The period you've entered doesn't exist, please double check"
            End If

    End If

End Sub

1 个答案:

答案 0 :(得分:3)

问题就像我在评论中提到的那样。 Sheet被定义为变体,因此当您运行代码时,它不会被设置为对象。设置"表"导致错误(因为工作表不存在),但由于Sheet的类型是variant,因此其值为Empty而不是您稍后检查的Nothing。

Dim rp As String, rp1 As String
Dim Sheet As Worksheet, Sheet1 As Worksheet

这将解决您遇到的问题。