我有一个正在监视的命名范围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/

10-13 04:35