VBA工作表随多个单元格更改

我有一个命名的范围,我在Worksheet_Change(ByVal Target as Range)监视。 我注意到,如果用户select该范围内的多个单元格,并右键单击 – >清除,程序崩溃。

我有这样的代码:

 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函数之一,它不知道如何处理它,并引发一个不匹配的错误。 有没有办法来防止这种情况发生?

首先确保代码只运行1个单元格。

 If Target.Cells.Count = 1 Then '~~> rest of code here End If 

注意:对于较新版本的Excel(例如XL2007及更高版本),您需要使用CountLarge属性来避免溢出错误。

现在,只testing特定的范围,然后在你的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。