我有一个我正在Worksheet_Change(ByVal Target as Range)
监控的命名范围。我注意到,如果用户选择该范围内的多个单元格并右键单击 - >清除,则程序崩溃。
我的代码如下:
If Target <> "" And (.Cells(Target.Row, [GLB_Location_Col].Column) = "" _
Or .Cells(Target.Row, [GLB_LineType_Col].Column) = "") Then
.Cells(Target.Row, [GLB_Location_Col].Column).Interior.ColorIndex = 40 'peach
.Cells(Target.Row, [GLB_LineType_Col].Column).Interior.ColorIndex = 40 'peach
我的代码假设一次更改了一个单元格,所以我想当一个范围传递给我的一个.Cell
函数时,它不知道如何处理它并抛出不匹配错误。有没有办法防止这种情况发生?
答案 0 :(得分:3)
首先确保如果只选择了1个单元格,代码就会运行。
If Target.Cells.Count = 1 Then
'~~> rest of code here
End If
注意:对于较新版本的Excel(例如XL2007及更高版本),您需要使用CountLarge
属性来避免溢出错误。
现在,要仅测试特定范围,请在If
语句中集成Intersect
函数。类似的东西:
If Not Intersect(Target, .Cells(1, [GLB_Location_Col].Column).EntireColumn) Is Nothing _
And .Cells(Target.Row, [GLB_Location_Col].Column) <> "" Then
因此,它首先检查Target
范围是否在整个GLB_Location_Col
(我假设为命名范围)内,以及范围是否为空。 HTH。