He actualizado mi código al evento de cambio de hoja de trabajo que siempre que los valores de Sheet15.Range("$B$2") cambien o actualicen mi código se ejecutará.

Pero no funciona no sé por qué?

Y una cosa más que quiero que se pegue el mismo valor (que se copia) por el siguiente código

sheet8.Range(G18:G)

Usando esta técnica

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

Su ayuda será muy apreciada para resolver el problema.

Mi código.

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
0
Strenuous 22 ene. 2021 a las 14:03

1 respuesta

La mejor respuesta

Si el código de evento pertenece al módulo de código Sheet15, utilice el siguiente:

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

Editado :

Si la celda B2 conservará el resultado de una fórmula, debe usar la hoja `Calculate ~ event, de esta manera:

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
1
FaneDuru 22 ene. 2021 a las 12:23