我正在尝试为B列中内容已通过VBA更改的所有单元格的背景着色。
如果我手动更新单元格,而不是通过VBA更改单元格时背景会更改。我无法理解为什么VBA没有改变。
在名为OriginalData
的工作表的工作表模块中,我有
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
Dim nName As String, nEmail As String
Application.EnableEvents = False
For Each c In Target
If c.Column = 2 And Target <> "" Then
c.Interior.Color = RGB(255, 255, 0)
End If
Next c
Application.EnableEvents = True
End Sub
我正在使用
更新OriginalData
上的第2列
Sub FindReplace_Updated_UnMatched_NAMES_Original_Prepperd_2()
Dim FindValues As Variant
Dim ReplaceValues As Variant
Dim wsFR As Excel.Worksheet
Dim wsTarget As Excel.Worksheet
Dim lRow As Long
Dim i As Long
Sheets("Updated_UnMatched").Select
Set wsFR = ThisWorkbook.Worksheets("Updated_UnMatched")
Set wsTarget = ThisWorkbook.Worksheets("OriginalData")
lRow = wsFR.Range("C" & wsFR.Rows.Count).End(xlUp).Row
FindValues = wsFR.Range("C1:C" & lRow).Value
ReplaceValues = wsFR.Range("D1:D" & lRow).Value
With wsTarget
If IsArray(FindValues) Then
For i = 2 To UBound(FindValues)
.Columns("B:B").Replace FindValues(i, 1), ReplaceValues(i, 1), xlWhole, xlByColumns, False
Next i
Else
End If
End With
End Sub
答案 0 :(得分:2)
您可能在Target <> ""
上出错并且遇到Application.EnableEvents = False
环境状态。
首先,转到VBE的立即Windows(Ctrl + G)并输入命令Application.EnableEvents = True
。在VBE中,对您的代码进行多次目标细胞计数的修改。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
Dim nName As String, nEmail As String
Application.EnableEvents = False
For Each c In Target
If c.Column = 2 And c.Value <> "" Then '<~~ c <> "", not Target <> ""
c.Interior.Color = RGB(255, 255, 0)
End If
Next c
Application.EnableEvents = True
End Sub
这应该足以让你前进。
答案 1 :(得分:1)
如果在事件处理程序执行期间出现一些错误,则下次无法正常工作。您可以找到并修复错误,它将正常工作。
作为快速解决方法,您可以执行以下步骤:
On Error Resume Next
防止错误使您的代码停止工作。 我测试了您的代码,它在Excel 2013中为我工作。
强烈建议您修复错误,而不是使用On Error Resume Next
隐藏错误。