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