VBA 包含多个单元格的工作表更改

VBA worksheet change with multiple cells

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

首先确保代码在仅选择 1 个单元格时运行。

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.