vba检查表单是否存在 – 对象所需的错误

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

我有下面的代码,第二部分(单元格C17)工作正常,但在第一部分(单元格C3)这条线If Not Sheet Is Nothing Then抛出一个对象所需的错误。 我在debugging模式下查看代码,发现sheet1的值是空的,而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 

问题就像我在评论中提到的那样。 工作表被定义为一个变体,所以当您运行代码时,它不会被设置为一个对象。 设置“工作表”会导致错误(因为工作表不存在),但由于工作表的types是变体,因此其值为空,而不是您稍后检查的“无”。

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

这将解决您遇到的问题。