Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 带有数据验证的工作表更改事件_Excel_Vba_Validation - Fatal编程技术网

Excel 带有数据验证的工作表更改事件

Excel 带有数据验证的工作表更改事件,excel,vba,validation,Excel,Vba,Validation,单元格数据更改后,我的VBA将不运行。 在我的工作表中,VBA在F列和G列中运行。 列G具有数据验证,我希望根据列F中输入的数值触发该验证 示例: F列的数值为2.5,这导致G列显示“良好状态”。 如果我将F列的值更改为2,则G列将显示“良好信誉” Private子工作表\u更改(ByVal目标作为范围) StrtRow=2 EndRow=范围(“F”和Rows.Count).End(xlUp).Row 对于i=StrtRow到EndRow 如果范围(“F”&i).值>=2,则 范围(“G”和i

单元格数据更改后,我的VBA将不运行。
在我的工作表中,VBA在F列和G列中运行。
列G具有数据验证,我希望根据列F中输入的数值触发该验证

示例:
F列的数值为2.5,这导致G列显示“良好状态”。
如果我将F列的值更改为<2,我希望G列单元格显示为空白
反之亦然,如果F列值最初小于2,并且我将其增加到>2,则G列将显示“良好信誉”

Private子工作表\u更改(ByVal目标作为范围)
StrtRow=2
EndRow=范围(“F”和Rows.Count).End(xlUp).Row
对于i=StrtRow到EndRow
如果范围(“F”&i).值>=2,则
范围(“G”和i)。值=“良好信誉”
如果结束
下一个
端接头

如果
<2
,您缺少一个用于清除内容的
Else
子句。考虑到@SJR的注释,请尝试此操作(未测试)


如果
<2
,您缺少一个
Else
子句来清除内容。请考虑@SJR的注释,尝试此操作(未测试)


当前,每当任何单元格在任何位置发生更改时,您的代码将在F中的每个单元格中运行。您需要在代码中引用已更改的单元格
Target
。当前,每当任何单元格在任何位置发生更改时,您的代码将在F中的每个单元格中运行。您需要在代码中引用
Target
,即cell已经更改。谢谢@supersymetry的评论。该代码似乎没有执行我需要的功能。一旦单元格发生更改,它仍然不会更新。很好@SJR。请按照指南将代码插入正确的模块中。好的,这就是问题所在。我在单独的模块中使用了该代码。我必须与Another一起玩我非常感谢您的反馈和对我问题的帮助!谢谢@superSymmetry的评论。该代码似乎没有执行我需要的功能。一旦单元格发生变化,它仍然不会更新。很好@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