【问题标题】:Trigger that will update cells in column of the same value将更新相同值列中的单元格的触发器
【发布时间】:2018-09-26 23:08:28
【问题描述】:

我正在尝试编写一个宏,该宏将更新列中与下面相邻列具有相同值的所有单元格,这些单元格在我要完成的操作之前和之后。在此示例中,您将更新 B1,然后 A1 中具有相同值的任何单元格将更新为 B1 值

这是我正在使用的代码

Private Sub Worksheet_Change(ByVal Target As Range)

Dim rng1 As Range
Dim cel As Range

Set rng1 = Range("A1", Range("A2").End(xlDown))

For Each cel In rng1
    If cel = Target.Offset(0, -1).Value Then
    cel.Offset(0, 1).Value = Target.Value
    End If
Next cel

End Sub

我不确定我写的内容是否正确,但我一直在退出堆栈空间错误,我认为这是由于每次通过更改相同的单元格而不断循环的宏。我相信这应该是可能的,但我有点迷茫。

【问题讨论】:

  • Application.enableevents = false。确保在退出之前设置为 true。
  • @ScottCraner 其余代码是否符合预期结果?
  • 我还将添加一个测试以确保它仅在 b 列更改时触发。但否则只是看着它应该做你想做的事。

标签: excel vba for-loop triggers


【解决方案1】:
Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column <> 2 Then Exit Sub

Application.ScreenUpdating = False
    For Each cel In Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row)
        If cel = Target.Offset(, -1) Then
            cel.Offset(, 1) = Target
        End If
    Next cel
Application.ScreenUpdating = True

End Sub

【讨论】:

    【解决方案2】:

    如果可能,我会尽量避免循环。也许改用 UDF,使用 .Find() 方法?

    Option Explicit
    
    Function myLookup(ByVal rng As Range) As String
    
        Application.Volatile
    
        Dim ws As Worksheet, lookupRng As Range, retRng As Range
        Set ws = rng.Parent
        With ws
            Set lookupRng = .Range(.Cells(1, rng.Column), .Cells(rng.Row - 1, rng.Column))
        End With
    
        Set retRng = lookupRng.Find(rng.Value, ws.Cells(1, rng.Column))
        If retRng Is Nothing Then
            myLookup = vbNullString
        Else
            With retRng
                myLookup = ws.Cells(.Row, .Column + 1)
            End With
        End If
    
    End Function
    

    您可以按如下方式将此 UDF 放置在工作表中:

    然后填写。这将防止循环引用,因为它只会在lookupRng 内搜索其上方的单元格。

    最后的结果:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-17
      • 1970-01-01
      • 1970-01-01
      • 2020-01-30
      • 2013-09-01
      • 2021-02-27
      • 2015-01-06
      • 1970-01-01
      相关资源
      最近更新 更多