Crear macro que guarde datos sin sobreescribir

Necesito hacer una macro que guarde los datos de una planilla para general un historial, es decir, que guarde lo que se cargue sin sobre escribirse y que cuando termine de guardar se pueda dejar la planilla en blanco, yo intente grabando dos macros, uno para guardar los datos en la otra hoja:

Sub Macro3()
'
' Macro3 Macro
' Historial completo
    Sheets("Historial  ").Select
    Range("A3").Select
    ActiveCell.FormulaR1C1 = "=EURO!R[2]C[5]"
    Range("B3").Select
    ActiveCell.FormulaR1C1 = "=EURO!R[3]C[4]"
    Range("C3").Select
    ActiveCell.FormulaR1C1 = "=EURO!R[2]C[5]"
    Range("D3").Select
    ActiveCell.FormulaR1C1 = "=EURO!R[5]C[3]"
    Range("E3").Select
    ActiveCell.FormulaR1C1 = "=EURO!R[6]C[2]"
    Range("F3").Select
    ActiveCell.FormulaR1C1 = "=EURO!R[7]C[1]"
    Range("G3").Select
    ActiveCell.FormulaR1C1 = "=EURO!R[8]C"
    Range("H3").Select
    ActiveCell.FormulaR1C1 = "=EURO!R[9]C[-1]"
    Range("I3").Select
    ActiveCell.FormulaR1C1 = "=EURO!R[13]C[-2]"
    Range("J3").Select
    ActiveCell.FormulaR1C1 = "=EURO!R[14]C[-3]"
    Range("K3").Select
    ActiveCell.FormulaR1C1 = "=EURO!R[15]C[-4]"
    Range("L3").Select
    ActiveCell.FormulaR1C1 = "=EURO!R[17]C[-5]"
    Range("M3").Select
    ActiveCell.FormulaR1C1 = "=EURO!R[18]C[-6]"
    Range("N3").Select
    ActiveCell.FormulaR1C1 = "=EURO!R[20]C[-7]"
    Range("O3").Select
    ActiveCell.FormulaR1C1 = "=EURO!R[21]C[-8]"
    Range("O4").Select
    ActiveWindow.ScrollColumn = 2
    ActiveWindow.ScrollColumn = 3
    ActiveWindow.ScrollColumn = 4
    ActiveWindow.ScrollColumn = 5
    ActiveWindow.ScrollColumn = 6
    Range("P3").Select
    ActiveCell.FormulaR1C1 = "=EURO!R[25]C[-9]"
    Range("Q3").Select
    ActiveCell.FormulaR1C1 = "=EURO!R[26]C[-10]"
    Range("R3").Select
    ActiveCell.FormulaR1C1 = "=EURO!R[27]C[-11]"
    Range("S3").Select
    ActiveCell.FormulaR1C1 = "=EURO!R[28]C[-12]"
    Range("T3").Select
    ActiveCell.FormulaR1C1 = "=EURO!R[29]C[-13]"
    Range("U3").Select
    ActiveCell.FormulaR1C1 = "=EURO!R[31]C[-14]"
    Range("U4").Select
    ActiveWindow.ScrollColumn = 6
    ActiveWindow.ScrollColumn = 7
    ActiveWindow.ScrollColumn = 8
    ActiveWindow.ScrollColumn = 9
    ActiveWindow.ScrollColumn = 10
    ActiveWindow.ScrollColumn = 11
    ActiveWindow.ScrollColumn = 12
    ActiveWindow.ScrollColumn = 13
    Sheets("EURO").Select
    ActiveCell.FormulaR1C1 = "=EURO!R[32]C[-15]"
    Range("W3").Select
    ActiveCell.FormulaR1C1 = "=EURO!R[33]C[-16]"
    Range("X3").Select
    ActiveCell.FormulaR1C1 = "=EURO!R[34]C[-17]"
    Range("Y3").Select
    ActiveCell.FormulaR1C1 = "=EURO!R[35]C[-18]"
    Range("Z3").Select
    ActiveCell.FormulaR1C1 = "=EURO!R[37]C[-19]"
    Range("Z4").Select
    ActiveWindow.ScrollColumn = 14
    ActiveWindow.ScrollColumn = 15
    Range("AA3").Select
    ActiveCell.FormulaR1C1 = "=EURO!R[39]C[-20]"
    Range("AB3").Select
    Sheets("EURO").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "=R[11]C[-1]"
    Range("G36").Select
    Sheets("Historial  ").Select
    Range("AB3").Select
    ActiveCell.FormulaR1C1 = "=EURO!R[43]C[-22]"
    Range("AC3").Select
    ActiveCell.FormulaR1C1 = "=EURO!R[47]C[-26]"
    Range("AD3").Select
    ActiveCell.FormulaR1C1 = "=EURO!R[51]C[-23]"
    Range("AD4").Select
End Sub

El otro lo arme grabando tmb y borra las celdas que seleccione

El problema esta en que cada vez que cargo datos y toco el botón de guardar, se me sobreescribe todo en las mismas celdas, ¿cómo puedo solucionar esto?

1 respuesta

Respuesta
1

No explicaste cómo quieres que la macro NO sobreescriba, supongo que quieres que los datos se almacenen en la siguiente fila vacía.

Lo que hace tu macro es poner una fórmula en la hoja "historial", pero también supongo que quieres almacenar en la hoja son los valores.

Te anexo un ejemplo para que lo tomes como modelo y te sirva para tu macro.

Tienes estas líneas:

    Range("A3").Select
    ActiveCell.FormulaR1C1 = "=EURO!R[2]C[5]"

Esas líneas pueden ser sustituidas por esta línea, de esta forma, sabes en cuál celda estás poniendo cuál dato de la otra hoja.

 H2.Range("A" & u).Value = h1. Range("F5").Value

Te anexo la macro con 3 ejemplos, en la macro puse algunos comentarios de lo que hace cada línea:

Sub Copiar_Datos()
'Act Por Dante Amor
    '
    Set h1 = Sheets("EURO")         'Hoja origen
    Set h2 = Sheets("Historial  ")  'Hoja destino
    '
    If h1.Range("F5").Value = "" Then
        MsgBox "Falta el dato de F5", vbCritical
        Exit Sub
    End If
    'Obtiene la siguiente fila vacía
    u = h1.Range("A" & Rows.Count).End(xlUp).Row + 1
    'Las celdas de la h2 toma los valores de las celdas de la h1
    h2.Range("A" & u).Value = h1.Range("F5").Value
    h2.Range("B" & u).Value = h1.Range("F6").Value
    h2.Range("C" & u).Value = h1.Range("H5").Value
    '
    'Continuar con las demás celdas
    '...
    '
    'Aquí va el código para borrar celdas de la hoja h1
    h1.Range("F5").Value = ""
    h1.Range("F6").Value = ""
    h1.Range("H5").Value = ""
    'Continuar con las demás celdas a borrar
    '
    MsgBox "Datos copiados", vbInformation
End Sub

Trata de completar la macro con el resto de las celdas de tu planilla. Donde tengas dudas te voy auxiliando.


'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. 

Buen día Dante,

probé con tu macro y no estaría copiando en la hoja de destino, si yo modifico por ejemplo la linea

 h2.Range("A" & u).Value = h1.Range("F5").Value

por lo siguiente:

 h2.Range("A3").Value = h1.Range("F5").Value

en este caso si copia el valor donde lo necesito, pero si vuelvo a cargar otro valor distinto, lo vuelve a sobre escribir y yo necesito que se genere un registro de cada vez que cargo la planilla para armar el historial en la hoja2.

Mi lógica para armarlo seria con un if que pregunte si la celda X tiene contenido entonces voy a la celda de abajo y cargo los nuevos datos ahí, pero no tengo bien en claro como  escribirla ( hace años que no usaba esto, estoy en proceso de reaprender el lenguaje)

Muchas gracias por tu tiempo!

Para eso es el & u que genere un nuevo registro. Si lo quitas todo te lo va a estar poniendo en la fila 3.

Además de quitar & u, ¿Qué otras cosas quitaste?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas