首页 > 解决方案 > 每当更新工作表特定单元格或更新特定范围时尝试运行此代码

问题描述

我已将我的代码更新为 Worksheet Change 事件,只要Sheet15.Range("$B$2")值发生更改或更新,我的代码就会运行。

但它不起作用我不知道为什么?

我还想要一件事下面的代码应该粘贴相同的值(被复制)

sheet8.Range(G18:G)

通过使用这种技术

lastR5 = Sheet8.Range("F" & Rows.Count).End(xlUp).Row

您的帮助将不胜感激。

我的代码。

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range
    Set KeyCells = Sheet15.Range("$B$2")
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
           Is Nothing Then

        
          Dim lastR4 As Long
lastR4 = Sheet4.Range("E" & Rows.Count).End(xlUp).Row 'last row on E:E col
Sheet4.Range("F11:F" & lastR4).Value = Sheet15.Range("A" & _
   WorksheetFunction.Match(Sheet1.Range("B7").Value, Sheet15.Range("A:A"), 0)).Offset(0, 1)
      
End If
End Sub

标签: excelvba

解决方案


如果事件代码属于Sheet15代码模块,请使用下一个:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address <> "$B$2" Then Exit Sub
    
    Dim lastR4 As Long
    lastR4 = Sheet4.Range("E" & rows.count).End(xlUp).row 'last row on E:E col
    Sheet4.Range("F11:F" & lastR4).Value = Sheet15.Range("A" & _
       WorksheetFunction.match(Sheet1.Range("B7").Value, Sheet15.Range("A:A"), 0)).Offset(0, 1)
End Sub

编辑

如果 B2 单元格将保留公式的结果,您应该使用工作表 `Calculate~ 事件,这样:

Private Sub Worksheet_Calculate()
    Static b2Val As String
    If b2Val = "" Then b2Val = Sheet15.Range("B2").Value: GoTo OverCheck
    If Sheet15.Range("B2").Value = b2Val Then Exit Sub
    
OverCheck:
    Dim lastR4 As Long
    lastR4 = Sheet4.Range("E" & rows.count).End(xlUp).row 'last row on E:E col
    Sheet4.Range("F11:F" & lastR4).Value = Sheet15.Range("A" & _
       WorksheetFunction.match(Sheet1.Range("B7").Value, Sheet15.Range("A:A"), 0)).Offset(0, 1)
End Sub

推荐阅读