【问题标题】:Worksheet Change event with data validation具有数据验证的工作表更改事件
【发布时间】:2021-02-19 16:48:53
【问题描述】:

一旦单元格数据更改,我的 VBA 就不会运行。
在我的工作表上,我在 F 列和 G 列中运行了 VBA。
G 列有我想根据 F 列中输入的数值触发的数据验证。

示例:
F 列的数值为 2.5,这导致 G 列显示“信誉良好”。
如果我将 F 列值更改为 反之亦然,如果 F 列的值最初 2 G 列将显示“良好的信誉”。

Private Sub Worksheet_Change(ByVal Target As Range)
    StrtRow = 2
    EndRow = Range("F" & Rows.Count).End(xlUp).Row

    For i = StrtRow To EndRow
        If Range("F" & i).Value >= 2 Then
            Range("G" & i).Value = "Good Standing"
        End If
    Next
End Sub

【问题讨论】:

  • 当前,只要任何单元格在任何地方发生更改,您的代码都会遍历 F 中的每个单元格。您需要在代码中引用Target,这是已更改的单元格。

标签: excel vba validation


【解决方案1】:

如果是< 2,则缺少用于清除内容的Else 子句。考虑到@SJR 的评论,试试这个(未测试)

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rngWatched As Range: Set rngWatched = Me.Range("F:F")
    Dim cl As Range
        
    If Not Intersect(rngWatched, Target) Is Nothing Then
        Application.EnableEvents = False
        
        For Each cl In Intersect(rngWatched, Target)
            If cl.Value >= 2 Then
                cl.Offset(0, 1).Value = "Good Standing"
            Else
                cl.Offset(0, 1).ClearContents
            End If
        Next
        
        Application.EnableEvents = True
    End If
End Sub

【讨论】:

  • 感谢@superSymmetry 的评论。该代码似乎没有执行我需要的功能。一旦发生单元格更改,它仍然不会更新。
  • 好点@SJR。请按照this 指南将代码插入正确的模块中。
  • 好的,这就是问题所在。我把它放在一个单独的模块中。我不得不使用另一个代码来适应这个代码并让它们都成功运行。我非常感谢您的反馈并帮助我解决我的问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 2023-02-12
相关资源
最近更新 更多