Unir dos Private Sub Worksheet_Change

Pido su apoyo en poder ayudarme en la solución de un problema, en una hoja tengo dos Private Sub Worksheet_Change como puedo hacer para que me ejecute los dos a la vez:

Private Sub Worksheet_Change(ByVal Target As Range)  -------------Opcon1
If Target.Address = "$H$20" Then
If UCase(Target.Value) = "SI" Then
SI
ElseIf UCase(Target.Value) = "NO" Then
NO
End If
End If
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)--------------Opcion 2
If Not Application.Intersect(Target, Range("I8")) Is Nothing Then
If Target.Count > 1 Then Exit Sub
Set c = Sheets("LIQUIDACION")
Set a = c.Range("G:G").Find(Target.Value, LookAt:=xlWhole)
If Not a Is Nothing Then
b = a.Row
Sheets("LIQUIDACION").Select
c.Range("I4:D" & b - 1) = c.Range("I17:L" & b - 1).Value
c.Range("I15:L15").Copy
c.Range("B" & b).Select
ActiveSheet.Paste
c.Range("I" & b + 1 & ":L29").Value = ""
End If
End If

Dado que la celda que se modifica ejecuta estas dos variables.

O en caso contrario cambiar la OPCION2 a una macro para modulo para ejecutarlo con un botón.

Porque no desearía que se me vuelva lento el excel.

1 respuesta

Respuesta
1

[Hola

Yo no haría las cosas como estás haciéndolo, pero siguiendo tu misma idea intenta así:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Target.Address = "$H$20" Then
    If UCase(Target.Value) = "SI" Then
        SI
    ElseIf UCase(Target.Value) = "NO" Then
        NO
    End If
End If
If Target.Address = "$I$8" Then
    Set c = Sheets("LIQUIDACION")
    Set a = c.Range("G:G").Find(Target.Value, LookAt:=xlWhole)
        If Not a Is Nothing Then
            b = a.Row
            Sheets("LIQUIDACION").Select
            c.Range("I4:D" & b - 1) = c.Range("I17:L" & b - 1).Value
            c.Range("I15:L15").Copy
            c.Range("B" & b).Select
            ActiveSheet.Paste
            c.Range("I" & b + 1 & ":L29").Value = ""
        End If
End If
End Sub

Ojo, por obvias razones yo no puedo probarlo, pero en todo caso esa es la idea y solo haría falta que lo adaptes a tus necesidades.

Abraham Valencia

Hola Abraham:

Antemano agradezco tu respuesta a la pregunta.

Pero me indicas que no harías la lógica que estoy pidiendo, ¿cuál sería la razón?, si existe una forma de cambiarlo, cual seria la solución.

A la vez quisiera saber si es posbile cambiar el Private Sub Worksheet_Change(ByVal Target As Range)--------------Opcion 2 a una sub xxx(), para trabajarlo con un botón.

Agradeciendo tus comentarios y poder saber el error que estoy cometiendo.

Saludos.

Primeo que nada intenta con lo que te he enviado y/o adaptándolo a tus hojas. Después, ya sobre algo final que tengas, intentamos algunas modificaciones para la mejora.

Abraham Valencia

Hola Abraham:

Si esta conforme con la macro modificado quedo todo bien.

Pero como dentro de tus comentarios me indicas que no es la forma que se debía trabajar quisiera saber que error estoy cometiendo para mejorar.

Saludos.

Es una mala costumbre usar "Select", deja así la parte correspondiente:

Dim c As Worksheet
Dim a As Range
Dim b As Long
If Target.Address = "$I$8" Then
    Set c = Sheets("LIQUIDACION")
    Set a = c.Range("G:G").Find(Target.Value, LookAt:=xlWhole)
        If Not a Is Nothing Then
            b = a.Row
            c.Range("I4:D" & b - 1) = c.Range("I17:L" & b - 1).Value
            c.Range("I15:L15").Copy Destination:=c.Range("B" & b)
            c.Range("I" & b + 1 & ":L29").Value = ""
        End If
End If

No olvides que yo no puedo probarlo, lo he hecho de memoria.

Abraham Valencia

Gracias

Hasta la próxima

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas