vba - VBA工作表与多个单元格一起更改

标签 vba excel 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

我的代码假设一次更改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/

相关文章:

excel - 如何将基于列 A 重复名称的整行复制到 VBA 中的相应工作表中?

vba - 关闭时 Access 崩溃

javascript - 如何使用javascript将excel中的工作表保存为新的excel文件

vba - 如何在 vba 中打开工作表?

c# - 使用 Openxml 2.0 在 Excel 中获取单元格背景颜色

python - 在 Openpyxl 中查找重复行的索引

SQL用于解析多行数据?

excel - VBA调用SAP事务

ms-access - vba 中的 OpenFileDialog 以字符串形式返回目录

excel - 如何在Excel VBA中删除单词末尾的空格?