繁体   English   中英

如果其他单元格包含文本vba,请更改单元格

[英]Change cell if other cell contains text vba

我曾经有以下代码,它曾经可以工作,但是由于某种原因,它不再起作用。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim test As Range
Dim KeyCells As Range
Dim i As String


    Set KeyCells = Range("AF3:AF5000")
    test = Target.Rows.Count


    If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then
        For i = Target.Row To (Target.Row + (Target.Rows.Count - 1))
            If Not ActiveSheet.Cells(i, 32) = "" Then
                ActiveSheet.Cells(i, 20).Value = "Closed"
            End If
        Next

    End If
End sub

基本上,如果在AF列的任何单元格中都有数据,则与T列中的信息对齐的单元格将标记为已关闭。 例如,如果AF65 <>“”,则T65.value =“ Closed”

知道为什么它不再起作用或是否存在宏的另一种可能性?

摆脱多余的代码和非特定的工作表引用。 例如,当该工作表不是Activesheet时,可以触发该工作表; 在不需要时将其放入Activesheet只会使问题感到困惑。

您也没有禁用事件,因此您的子项将尝试在自身之上运行。

这应该更接近您要执行的操作。

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Target, Range("AF3:AF5000"), Target.Parent.UsedRange) Is Nothing Then
        On Error GoTo safe_exit
        Application.EnableEvents = False
        Dim trgt As Range
        For Each trgt In Intersect(Target, Range("AF3:AF5000"), Target.Parent.UsedRange)
            If CBool(Len(trgt.Value2)) Then
                trgt.Offset(0, -12) = "Closed"
            Else
                trgt.Offset(0, -12) = vbNullString
            End If
        Next trgt
    End If

safe_exit:
    Application.EnableEvents = True
End Sub

如果您的原始子程序只是“停止工作”,则将Application.EnableEvents = True放入VBE的即时窗口中,然后点击[输入]。 您的早期代码可能会因禁用事件处理而崩溃。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM