Esta bien esta fórmula dante

Private Sub Worksheet_Change(ByVal Target As Range)
'Por.DAM
If Not Intersect(Target, Range("A:A")) Is Nothing Then
If Target <> "" Then
ArchivaFormulas
Else
End If
End If
If Not Intersect(Target, Range("L:L")) Is Nothing Then
If Target <> "" Then     <-----------------------------------------------------------------------------------
respuesta = MsgBox("Desea archivar los datos de los bonos", vbYesNo, "ATENCION")
If respuesta = vbYes Then
PegaDatosDeBonosEnBonos
PegaEnInteresesDatosDelBono
Else
End If
End If
End If
End Sub

Me podes controlar si esta bien esta fórmula porque me tira error en el segundo if targe <> "" then no se porque muchas gracias

1 respuesta

Respuesta
1

Ya lo probé y no me tira error.

Tips: Para hacer más comprensible el código, recuerda poner sangrías con lo que está dentro de una sentencia, es decir, al inicio y al fin de un if -endif, lo que está contenido ponlo con sangría, ejemplo:

Private Sub Worksheet_Change(ByVal Target As Range)
'Por.DAM
    If Not Intersect(Target, Range("A:A")) Is Nothing Then
        If Target <> "" Then
            ArchivaFormulas
        Else
        End If
    End If
    '
    If Not Intersect(Target, Range("L:L")) Is Nothing Then
        If Target <> "" Then
            respuesta = MsgBox("Desea archivar los datos de los bonos", vbYesNo, "ATENCION")
            If respuesta = vbYes Then
                PegaDatosDeBonosEnBonos
                PegaEnInteresesDatosDelBono
            Else
            End If
        End If
    End If
End Sub

De esta forma es más sencillo revisar el código.

Hazlo también para los ciclos Do-loop, for-next, selectcase-endselect.


Para poner un código en el foro y se vea bien, presiona el botón "Insertar código fuente":


Revisar nuevamente el código y dime si te funciona o qué mensaje de error te envía.

Saludos. Dante Amor

Dante te mando el mail con lo que estoy haciendo revisa el código porque a mi no me anda y mándame el archivo con la corrección por favor y explícamelo gracias

Tienes que apagar los eventos, si vuelves a escribir en la hoja, el evento se vuelve a activar, por eso te envía error.

Private Sub Worksheet_Change(ByVal Target As Range)
'Por.DAM
    If Not Intersect(Target, Range("A:A")) Is Nothing Then
        If Target <> "" Then
            Application.EnableEvents = False
            ArchivaFormulas
            Application.EnableEvents = True
        Else
        End If
    End If
    If Not Intersect(Target, Range("L:L")) Is Nothing Then
        If Target <> "" Then
            respuesta = MsgBox("Desea archivar los datos de los bonos", vbYesNo, "ATENCION")
            If respuesta = vbYes Then
                Application.EnableEvents = False
                PegaDatosDeBonosEnBonos
                PegaEnInteresesDatosDelBono
                Application.EnableEvents = True
            Else
            End If
        End If
    End If
End Sub

Después seguí probando tu macro y me encontré con esto, otra vez:

ActiveCell.Offset(0, -3).Range("A1").Select
ActiveCell.Copy Destination:=Range("U10")
ActiveCell. Offset(0, -10). Range("A1").Select

La celda activa es una celda en la columna "L", es decir, está en la columna 12, luego le dices que se desplace 3 columnas a la izquierda (-3), entonces la celda activa ahora es una celda en la columna "i", columna 9;  luego le dices que se desplace 10 columnas a la izquierda, es decir, que se mueva a la columna 9 - 10, el resultado es -1, no existe la columna -1, también eso es te va a enviar error.

Te sugiero que no te desplaces con offset, es confuso estar contando en cuál celda estás y cuántas celdas van hacia la izquierda o hacia la derecha. Si sabes de qué columna vas a tomar la información no te muevas con offset, simplemente toma el dato de la celda, por ejemplo.

    'Tienes esto
    ActiveCell.Offset(0, -10).Range("A1").Select
    ActiveCell.Copy Destination:=Range("U5")
    'Es igual a esto
    fila = ActiveCell.Row
    Cells(fila, "B"). Copy Range("U5")
    'Incluso lo puedes poner así
    Cells(ActiveCell.Row, "B"). Copy Range("U5")

Me resulta más fácil entender: copia el valor de "B" y pega en "U5".

Y lo que tu tienes es, selecciona la celda activa menos 10, luego copia la celda activa y pega en "U5".

Te recomiendo que actualices todo tu código, va a ser más fácil que identifiques los errores y puedas hacerle cambios a la macro cuando lo requieras.

O sea entre las macros le tengo que agregar

Application.EnableEvents = False
macro
Application.EnableEvents = true

Para que funcione bien verdad

Y me muevo mucho con offset pero como uso mucho la grabadora me cuesta voy a tratar de hacerlo como vos decís gracias dante

Si estás en el evento de una hoja y llamas a otra macro, y la segunda macro escribe en la misma hoja, entonces apaga los eventos, ya que estarías entrando en un bucle y eso provoca errores.

Y sigue tratando para utilizar menos el offset.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas