我有一个正在监视的命名范围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
我的代码假设一次更改1个单元格,因此我猜想当一个范围传递给我的
.Cell
函数之一时,它不知道如何处理它并引发不匹配错误。有办法防止这种情况发生吗? 最佳答案
首先,如果仅选择一个单元格,则确保代码运行。
If Target.Cells.Count = 1 Then
'~~> rest of code here
End If
注意:对于较新版本的Excel(例如XL2007及更高版本),您需要使用
CountLarge
属性以避免溢出错误。现在,仅测试特定范围,然后将
Intersect
函数集成到If
语句中。就像是: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。关于vba - VBA工作表与多个单元格一起更改,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28508780/