我正在尝试将宏放在我连续选择Yes
的位置,下一个单元格显示为灰色。所以我有几个是的列,但对于我的生活无法找出/修复错误
错误
运行时错误1004
应用程序定义或对象违反错误
代码
Private Sub Worksheet_Change(ByVal Target As Range)
If ActiveCell.Column = 5 Then
Set r = Range(ActiveCell.Offset(0, 1), ActiveCell.Offset(0, 7))
If Target.Value = "Yes" Or Target.Value = "YES" Then
r.Interior.Color = RGB(192, 192, 192)
Else
r.Interior.Color = xlNone
End If
End If
If ActiveCell.Column = 7 Then
Set s = Range(ActiveCell.Offset(0, 1), ActiveCell.Offset(0, 3))
If Target.Value = "Yes" Or Target.Value = "YES" Then
s.Interior.Color = RGB(192, 192, 192)
Else
s.Interior.Color = xlNone
End If
End If
End Sub
答案 0 :(得分:1)
ActiveCell
不是更改的单元格。 Target
是。您需要将ActiveCell
的所有引用替换为Target
并相应地调整偏移量。
答案 1 :(得分:1)
将 ActiveCell 更改为目标是一个良好的开端。如果将值块粘贴到与E和/或G列重叠的范围内,则还应补偿多个目标单元格。
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Union(Columns(5), Columns(7))) Is Nothing Then
On Error GoTo Fìn
Application.EnableEvents = False
Dim o As Range, t As Range
For Each t In Intersect(Target, Union(Columns(5), Columns(7)))
Select Case t.Column
Case 5
Set o = t.Offset(0, 1).Resize(1, 7)
Case 7
Set o = t.Offset(0, 1).Resize(1, 3)
End Select
If LCase(t.Value) = "yes" Then
o.Interior.Color = RGB(192, 192, 192)
Else
o.Interior.Pattern = xlNone
End If
Next t
End If
Fìn:
Set o = Nothing
Application.EnableEvents = True
End Sub
我只设置了首先接收填充颜色的单元格范围。请注意,似乎存在交叉逻辑问题,如果E5收到是且G5收到否,那么只有K5:L5将为灰色。我对是非区分大小写进行了比较。
错误由安全退出。
答案 2 :(得分:0)
虽然发现了这个问题,但它正在使用条件突出显示,这就是与宏
冲突的内容