当单元格内容通过VBA更改但手动完成时,Worksheet_change无法正常工作

时间:2015-08-21 23:10:24

标签: excel-vba vba excel

我正在尝试为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

2 个答案:

答案 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)

如果在事件处理程序执行期间出现一些错误,则下次无法正常工作。您可以找到并修复错误,它将正常工作。

作为快速解决方法,您可以执行以下步骤:

  1. 在Worksheet_Change的开头添加On Error Resume Next 防止错误使您的代码停止工作。
  2. 以支持宏的格式保存工作簿并重新启用它 活跃的内容。
  3. 运行宏,它将正常工作。
  4. 我测试了您的代码,它在Excel 2013中为我工作。

    强烈建议您修复错误,而不是使用On Error Resume Next隐藏错误。