我正在处理此代码,当用户在目标范围内输入值时,程序将检查是否存在工作表名称,并做出相应的反应。
我有以下代码,第二部分(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
答案 0 :(得分:3)
问题就像我在评论中提到的那样。 Sheet被定义为变体,因此当您运行代码时,它不会被设置为对象。设置"表"导致错误(因为工作表不存在),但由于Sheet的类型是variant,因此其值为Empty而不是您稍后检查的Nothing。
Dim rp As String, rp1 As String
Dim Sheet As Worksheet, Sheet1 As Worksheet
这将解决您遇到的问题。