Excel 隐藏错误消息

Excel 隐藏错误消息,excel,vba,Excel,Vba,我的工作簿中有以下两个模块: Private Sub Worksheet_Change(ByVal Target As Range) ' check if target is in Column B or Column G If Target.Column = 2 Or Target.Column = 7 Then Select Case Target.Row Case 12 To 18, 26 To 32 'check if target row is 12 to 18 (inclu

我的工作簿中有以下两个模块:

Private Sub Worksheet_Change(ByVal Target As Range)
' check if target is in Column B or Column G
If Target.Column = 2 Or Target.Column = 7 Then
Select Case Target.Row
    Case 12 To 18, 26 To 32  'check if target row is 12 to 18 (including) or between 26 to 32 (including)
        Hours = Target.Value
        If Hours <> 0 Then
            If Hours > 8 Then
                Target.Value = 8
                Target.Offset(0, 1).Value = Hours - 8
                Exit Sub
            Else
                If Hours < 8 Then
                    Target.Offset(0, 2).Value = 8 - Hours
                End If
                Exit Sub
            End If
        End If
End Select
End If
End Sub
当我调用第二个时,我在
处得到一个
运行时错误13类型不匹配错误
如果小时数为0,则
如果我手动清除范围,也会发生同样的情况。
如何防止这种情况发生?

当同时更改多个单元格时(例如,当您运行
清除
子项时),
工作表的
目标
参数\u Change
是一个由所有更改的单元格组成的范围-该范围的
值是一个二维值数组,而不是单个值,因此,您不能直接将其与单个值进行比较(例如,测试它是否为零)

最简单的方法是在
Target
is>1个单元格时退出

Private Sub Worksheet_Change(ByVal Target As Range)
' check if target is in Column B or Column G

If Target.Cells.CountLarge > 1 Then Exit Sub  '<<<<<<<<<<<<<<

If Target.Column = 2 Or Target.Column = 7 Then
Select Case Target.Row
    Case 12 To 18, 26 To 32  'check if target row is 12 to 18 (including) 
                             ' or between 26 to 32 (including)
        Hours = Target.Value
        If Hours <> 0 Then
            If Hours > 8 Then
                Target.Value = 8
                Target.Offset(0, 1).Value = Hours - 8
                Exit Sub
            Else
                If Hours < 8 Then
                    Target.Offset(0, 2).Value = 8 - Hours
                End If
                Exit Sub
            End If
        End If
End Select
End If
End Sub
强制性:

当同时更改多个单元格时(例如,当您运行
清除
子项时),
工作表的
目标
参数\u Change
是一个由所有更改单元格组成的范围-该范围的
值是一个二维值数组,而不是单个值,因此,您不能直接将其与单个值进行比较(例如,测试它是否为零)

最简单的方法是在
Target
is>1个单元格时退出

Private Sub Worksheet_Change(ByVal Target As Range)
' check if target is in Column B or Column G

If Target.Cells.CountLarge > 1 Then Exit Sub  '<<<<<<<<<<<<<<

If Target.Column = 2 Or Target.Column = 7 Then
Select Case Target.Row
    Case 12 To 18, 26 To 32  'check if target row is 12 to 18 (including) 
                             ' or between 26 to 32 (including)
        Hours = Target.Value
        If Hours <> 0 Then
            If Hours > 8 Then
                Target.Value = 8
                Target.Offset(0, 1).Value = Hours - 8
                Exit Sub
            Else
                If Hours < 8 Then
                    Target.Offset(0, 2).Value = 8 - Hours
                End If
                Exit Sub
            End If
        End If
End Select
End If
End Sub
强制性:

Sub Clear()

    Range("B12:E18, G12:J18,B26:E32, C9").ClearContents
    MsgBox ("Content cleared")

End Sub