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.
我在 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.