Copiar datos entre hojas de Excel

Buenos días experto, tengo un libro de excel formado por una hoja de referencia, la cual duplico para la intoducción de diferentes entidades y valores. Cuando relleno cada una de esta hojas, a las cuales le he llamado con un número, comenzando con 1, necesitaría una macro que permitiera volcar ciertos valores de la hoja activa en otra hoja llamada resumen donde almacenar los valores que necesito de cada una de las anteriores. He realizado una macro para pasar de una hoja (1) a la hoja (Resumen), funcionando perfectamente realizando referencias absolutas a las celdas que necesito, mi problema viene, cuando al cambiar a otra hoja, por ejemplo (2) ejecuto la macro y me vuelve a copiar los datos de la hoja (1).
El contenido de la macro es el siguiente:
Sub Resumen()
'
' Resumen Macro
' Macro grabada el 04/05/2010 por eduto049
'
'
    ActiveCell.Select
    ActiveCell.FormulaR1C1 = "='1'!R2C2"
    ActiveCell.Offset(0, 1).Range("A1").Select
    ActiveCell.FormulaR1C1 = "='1'!R2C4"
    ActiveCell.Offset(0, 1).Range("A1").Select
    ActiveCell.FormulaR1C1 = "='1'!R4C2"
    ActiveCell.Offset(0, 3).Range("A1").Select
    ActiveCell.FormulaR1C1 = "='1'!R13C7"
    ActiveCell.Offset(0, 1).Range("A1").Select
    ActiveCell.FormulaR1C1 = "='1'!R22C7"
    ActiveCell.Offset(0, 1).Range("A1").Select
    ActiveCell.FormulaR1C1 = "='1'!R27C7"
    ActiveCell.Offset(0, 1).Range("A1").Select
    ActiveCell.FormulaR1C1 = "='1'!R35C7"
    ActiveCell.Offset(0, 1).Range("A1").Select
    ActiveCell.FormulaR1C1 = "='1'!R45C7"
    ActiveCell.Offset(0, 1).Range("A1").Select
    ActiveCell.FormulaR1C1 = "='1'!R49C7"
    ActiveCell.Offset(0, 1).Range("A1").Select
    ActiveCell.FormulaR1C1 = "='1'!R52C7"
    ActiveCell.Offset(1, -11).Range("A1").Select
End Sub
Espero que pueda ayudarme. Muchas Gracias.

1 respuesta

Respuesta
1
El problema está en que tienes puesto el nombre de la hoja como fijo (en negrita):
...
ActiveCell.Select
ActiveCell.FormulaR1C1 = "='1'!R2C2"

...
Tendrías que adaptar la macro para que te pidiese, por ejemplo, mediante un Input el nombre de la Hoja que quieres procesar (aunque lo puedes optimizar para que te vaya pidiendo siempre por defecto la hoja siguiente), y con ese nombre componer la fórmula.
Si quieres que te lo haga yo, dímelo.
Muchas gracias Ángel, te agradecería muchísimo que me implementases en la macro la rutina para que me pida por defecto la hoja siguiente. Mis conocimientos en VBA son bastante limitados.
Un saludo, Jesús.
Encantado de poder ayudarte. Mira a ver si esta macro de más abajo te sirve.
Saludos
Angel
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
Sub ACN_Resumen()
    Static NumHojaAProcesar As Integer
    Dim NombreHojaAProcesar As String
    If NumHojaAProcesar = 0 Then
        NumHojaAProcesar = 1
    Else
        If NumHojaAProcesar < Sheets.Count Then
           NumHojaAProcesar = NumHojaAProcesar + 1
        Else
           NumHojaAProcesar = 0
        End If
    End If
    If NumHojaAProcesar > 0 Then
        NombreHojaAProcesar = Sheets(NumHojaAProcesar).Name
    Else
        NombreHojaAProcesar = ""
    End If
    NombreHojaAProcesar = InputBox("Indica el nombre de la Hoja a procesar: ", , NombreHojaAProcesar)
    NumHojaAProcesar = 0
    For i = 1 To Sheets.Count
        If Sheets(i).Name = NombreHojaAProcesar Then
           NumHojaAProcesar = i
        End If
    Next
    If NumHojaAProcesar > 0 Then
        ActiveCell.Select
        ActiveCell.FormulaR1C1 = "=" + NombreHojaAProcesar + "!R2C2"
        ActiveCell.Offset(0, 1).Range("A1").Select
        ActiveCell.FormulaR1C1 = "=" + NombreHojaAProcesar + "!R2C4"
        ActiveCell.Offset(0, 1).Range("A1").Select
        ActiveCell.FormulaR1C1 = "=" + NombreHojaAProcesar + "!R4C2"
        ActiveCell.Offset(0, 3).Range("A1").Select
        ActiveCell.FormulaR1C1 = "=" + NombreHojaAProcesar + "!R13C7"
        ActiveCell.Offset(0, 1).Range("A1").Select
        ActiveCell.FormulaR1C1 = "=" + NombreHojaAProcesar + "!R22C7"
        ActiveCell.Offset(0, 1).Range("A1").Select
        ActiveCell.FormulaR1C1 = "=" + NombreHojaAProcesar + "!R27C7"
        ActiveCell.Offset(0, 1).Range("A1").Select
        ActiveCell.FormulaR1C1 = "=" + NombreHojaAProcesar + "!R35C7"
        ActiveCell.Offset(0, 1).Range("A1").Select
        ActiveCell.FormulaR1C1 = "=" + NombreHojaAProcesar + "!R45C7"
        ActiveCell.Offset(0, 1).Range("A1").Select
        ActiveCell.FormulaR1C1 = "=" + NombreHojaAProcesar + "!R49C7"
        ActiveCell.Offset(0, 1).Range("A1").Select
        ActiveCell.FormulaR1C1 = "=" + NombreHojaAProcesar + "!R52C7"
        ActiveCell.Offset(1, -11).Range("A1").Select
    Else
        MsgBox ("No encontrada la Hoja a procesar")
    End If
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas