vba - Excel 2016 VBA 运行时错误 13
问题描述
我编写了下面的代码来清除 D 列中的单元格,仅当 B 列相应行中的单元格值更改为特定列表/范围 (B118:B124) 的一部分时。如果我将 B 中的单元格更改为不属于该列表的任何值,则 D 中相应行中的单元格将不会清除(这就是我想要的)。
下面的代码工作正常,除了,例如,如果我想同时删除 B 列中的 5 个(相邻)单元格,我会收到运行时错误 13。如果我在第一个删除的值中输入新值,情况也是如此/空白单元格,然后尝试将其自动填充到其余已删除/空白单元格中。基本上,如果我想同时更改 B 中的多个单元格(自动填充,...),下面的代码似乎不起作用。如果我一次只删除/更改一个单元格(在 B 中),它工作得很好。任何帮助将不胜感激。谢谢。
Private Sub Worksheet_Change (ByVal Target As Range)
If Not Intersect(Target, Range("B:B")) Is Nothing Then
If Application.WorksheetFunction.CountIf(Range("B118:B124"), Target) Then
Range("D" & Target.Row).ClearContents
End If
End If
End Sub
解决方案
我认为问题在于COUNTIF
期望一个奇异值,而不是包含值的范围。试试这个:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B:B")) Is Nothing Then
For Each cell In Range(Target.Address)
If Application.WorksheetFunction.CountIf(Range("B118:B124"), cell) Then
Range("D" & cell.Row).ClearContents
End If
Next cell
End If
End Sub
编辑:更新了每个人的贡献的答案:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B:B")) Is Nothing Then
For Each cell In Target
If Not Intersect(cell, Range("B:B")) Is Nothing Then
If Application.WorksheetFunction.CountIf(Range("B118:B124"), cell) Then
Application.EnableEvents = False
Range("D" & cell.Row).ClearContents
Application.EnableEvents = True
End If
End If
Next cell
End If
End Sub
推荐阅读
- javascript - 无按钮自动日期计算器
- c# - 缩放 GMap.Net.Winform 时,带有“调试构建”的加号不断出现
- matplotlib - 有没有办法用坐标对计算斜率来绘制一条连续线?
- ms-word - 如何将 SAS 中的值 DDE 到文本框中的 WORD 书签?
- ios - 如何在 Swift (Xcode11.1) 中获取当前时间
- javascript - 如何基于jQuery中的多复选框在数组的每个项目中运行多个函数条件
- javascript - 当用户使用 onLongPress 功能时,如何禁用 onPress 功能?
- ssh - 一次性 SSH 密码
- javascript - javascript中包含字母数字字符和最多一个下划线符号的用户名的正则表达式
- c# - 显示所有爆炸骰子的组合