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

时间:2015-02-13 21:08:57

标签: excel vba excel-vba worksheet

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

1 个答案:

答案 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。