【问题标题】:Worksheet_change not working when cell content changes via VBA but does manually当单元格内容通过 VBA 更改但手动更改时,Worksheet_change 不起作用
【发布时间】:2015-08-22 09:33:28
【问题描述】:

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

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    您可能在Target &lt;&gt; "" 上出错并陷入Application.EnableEvents = False 环境状态。

    首先,进入 VBE 的即时窗口 (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
    

    这应该足以让你继续前进。

    【讨论】:

      【解决方案2】:

      当事件处理程序执行过程中出现一些错误时,下一次将无法正常工作。您可以找到并修复错误,它会正常工作。

      作为快速修复,您可以执行以下步骤:

      1. 在Worksheet_Change开头添加On Error Resume Next 防止错误使您的代码停止工作。
      2. 以启用宏的格式保存您的工作簿并重新打开它启用 活跃的内容。
      3. 运行宏,它会正常工作。

      我测试了您的代码,它在 Excel 2013 中对我有用。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-31
        相关资源
        最近更新 更多