Excel 从单元格中删除值时类型不匹配

Excel 从单元格中删除值时类型不匹配,excel,vba,type-mismatch,Excel,Vba,Type Mismatch,我是VBA新手,遇到了一个非常令人沮丧的错误。我的代码尝试根据其他单元格的值锁定和黑掉单元格。但是,如果工作表中的任何单元格被删除,代码就会中断,我会得到一个类型不匹配错误。如果单元格的值发生更改,则代码不会中断,只有在删除该单元格时才会中断 下面提供了我的代码,有人有想法吗?提前谢谢 Private Sub Worksheet_Change(ByVal Target As Range) If Target <> Range("$C$28") And Target <>

我是VBA新手,遇到了一个非常令人沮丧的错误。我的代码尝试根据其他单元格的值锁定和黑掉单元格。但是,如果工作表中的任何单元格被删除,代码就会中断,我会得到一个类型不匹配错误。如果单元格的值发生更改,则代码不会中断,只有在删除该单元格时才会中断

下面提供了我的代码,有人有想法吗?提前谢谢

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target <> Range("$C$28") And Target <> Range("$C$31") Then Exit Sub

  ActiveSheet.Unprotect

  If Range("C31") = "Cellular" And Range("C28") = "No" Then
    Range("C34").Locked = False
    Range("C34").Interior.ColorIndex = 19
    Range("C35").Locked = True
    Range("C35").Interior.ColorIndex = 1
    Range("C35").Value = "Verizon"
    Range("C37").Locked = False
    Range("C37").Interior.ColorIndex = 19
    Range("C38").Locked = False
    Range("C38").Interior.ColorIndex = 19

  ElseIf Range("C31") = "Cellular" And Range("C28") = "Yes" Then
    Range("C34").Locked = False
    Range("C34").Interior.ColorIndex = 19
    Range("C35").Locked = True
    Range("C35").Interior.ColorIndex = 1
    Range("C35").Value = "Verizon"
    Range("C37").Locked = True
    Range("C37").Interior.ColorIndex = 1
    Range("C37").Value = "Verizon"
    Range("C38").Locked = True
    Range("C38").Interior.ColorIndex = 1
    Range("C38").Value = "Verizon"

  ElseIf Range("C31") <> "Cellular" And Range("C28") = "No" Then
    Range("C34").Locked = True
    Range("C34").Interior.ColorIndex = 1
    Range("C34").Value = "Verizon"
    Range("C35").Locked = False
    Range("C35").Interior.ColorIndex = 19
    Range("C37").Locked = False
    Range("C37").Interior.ColorIndex = 19
    Range("C38").Locked = False
    Range("C38").Interior.ColorIndex = 19

  Else
    Range("C34").Locked = True
    Range("C34").Interior.ColorIndex = 1
    Range("C34").Value = "Verizon"
    Range("C35").Locked = False
    Range("C35").Interior.ColorIndex = 19
    Range("C37").Locked = True
    Range("C37").Interior.ColorIndex = 1
    Range("C37").Value = "Verizon"
    Range("C38").Locked = True
    Range("C38").Interior.ColorIndex = 1
    Range("C38").Value = "Verizon"

 End If

 ActiveSheet.Protect
End Sub
Private子工作表\u更改(ByVal目标作为范围)
如果目标范围($C$28”)和目标范围($C$31”),则退出Sub
活动表。取消保护
如果范围(“C31”)=“蜂窝”和范围(“C28”)=“否”,则
范围(“C34”)。锁定=错误
范围(“C34”)。内饰颜色指数=19
范围(“C35”)。锁定=真
范围(“C35”).Interior.ColorIndex=1
范围(“C35”).Value=“Verizon”
范围(“C37”)。锁定=错误
范围(“C37”)。内饰颜色指数=19
范围(“C38”)。锁定=错误
范围(“C38”)。内饰颜色指数=19
ElseIf范围(“C31”)=“蜂窝”和范围(“C28”)=“是”,然后
范围(“C34”)。锁定=错误
范围(“C34”)。内饰颜色指数=19
范围(“C35”)。锁定=真
范围(“C35”).Interior.ColorIndex=1
范围(“C35”).Value=“Verizon”
范围(“C37”)。锁定=真
范围(“C37”).Interior.ColorIndex=1
范围(“C37”).Value=“Verizon”
范围(“C38”)。锁定=真
范围(“C38”).Interior.ColorIndex=1
范围(“C38”).Value=“Verizon”
ElseIf范围(“C31”)“蜂窝式”和范围(“C28”)=否
范围(“C34”)。锁定=真
范围(“C34”).Interior.ColorIndex=1
范围(“C34”).Value=“Verizon”
范围(“C35”)。锁定=错误
范围(“C35”)。内饰颜色指数=19
范围(“C37”)。锁定=错误
范围(“C37”)。内饰颜色指数=19
范围(“C38”)。锁定=错误
范围(“C38”)。内饰颜色指数=19
其他的
范围(“C34”)。锁定=真
范围(“C34”).Interior.ColorIndex=1
范围(“C34”).Value=“Verizon”
范围(“C35”)。锁定=错误
范围(“C35”)。内饰颜色指数=19
范围(“C37”)。锁定=真
范围(“C37”).Interior.ColorIndex=1
范围(“C37”).Value=“Verizon”
范围(“C38”)。锁定=真
范围(“C38”).Interior.ColorIndex=1
范围(“C38”).Value=“Verizon”
如果结束
保护工作表
端接头

删除整行时,应确认生成的
目标对象将代表整行范围。因此,比较语句将失败,因为您依赖范围对象的隐式/默认属性(其
.Value
属性)。尝试以这种方式引用此属性时,多单元格范围将引发错误

所以你需要一些逻辑来避免这种情况。可能是检查
目标
范围内的第一个单元格这样简单的事情:

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Cells(1,1) <> Range("$C$28") And Target <> Range("$C$31") Then Exit Sub
Private子工作表\u更改(ByVal目标作为范围)
如果目标.Cells(1,1)范围($C$28”)和目标范围($C$31”),则退出Sub

我只在删除整行时得到“类型不匹配”。这就是你正在经历的吗?错误发生在程序的第一行吗?谢谢你的时间,大卫。然而,这并没有解决问题。它不一定是整行。如果我删除工作表中任何单元格的内容,则会出现此问题。我会再次要求您首先通过调试代码来确认
目标.Address
。确保你认为的目标实际上就是目标。需要考虑的其他事项:C28中有什么?如果是公式,删除可能会影响公式的计算,从而导致错误值,如
=N/a
=REF
=DIV0/,等等。;这些有时会产生问题。