Macro que copie el rango al copiar e insertar columnas de una hoja a otra.

En resumen quiero ejecutar una macroX en la hoja3, ejecutada la anterior, ejecutar la macro nombrar para darle nombre al rango e5:j12 de la hoja1, posterior a esto ejecutar la macro4 que me permite copia las columnas de E:J de la hoja1 y las inserta en la columna C de la hoja2, además, cuando se copie e inserte la información me traspase también el rango e5:j12 de la hoja1 a la hoja2.

En detalle es lo diguiente:

Desde la hoja3 ejecuto una macroX, al ejecutarse esta macro, desde la misma hoja se debe ejecutar la siguiente macro:

Sub nombrar()
valor = Range("a1")
Worksheets("hoja1").Range("e5:j12").Name = valor
End Sub

Cuando activo esta macro, el rango e5:j12 de la hoja1 toma el nombre de la celda A1 de la hoja3. Esta macro permite que el nombre del rango e5:j12 de la hoja1 tome el valor de la celda A1 de la hoja desde donde se ejecuta la macro (hoja3 en este caso). Esto me permite tener diferentes nombres para el rango e5:j12 en función de la celda A1 de la hoja3.

Una vez ejecutada la macro anterior, se ejecuta la siguiente macro:

Sub Macro4()

'esta macro copia las columnas de E:J de una hoja y las inserta en la columna C de otra hoja

Sheets("hoja1").Columns("E:J").Copy
Sheets("hoja2").Select
Columns("C:C").Select
Selection.Insert Shift:=xlToRight

End Sub

Sin embargo, cuando se ejecuta la Macro4 no se pega el rango e5:j12 en la columna C de la hoja2.

Considerando lo anterior, tengo una macro que me transfiere el rango de una hoja a otra, creo que el código que permite esto es:

Worksheets("hoja1").Copy After:=Sheets(ActiveWorkbook.Sheets.Count)

En este caso, el código lo utilizó para copiar el contenido completo de una hoja1 y transferirlo a otra, en la hoja1, con las celdas A1 Y A2 tengo un rango nombrado y este rango puede ser transferido con su nombre a otras hojas. Quiza este código pueda ser utilizado en la macro4 aunque nose como realizarlo.

1 Respuesta

Respuesta
1

Prueba con esta macro, como te he mencionado nombres de rango repetidos limitan su uso solo a la hoja donde estén alojados

Sub nombrar()
Set h1 = Worksheets("hoja1")
Set h2 = Worksheets("hoja2")
valor = h1.Range("a1")
h1.Range("e5:j12").Name = valor
Set origen = Range(valor)
Set destino = h2.Range("e5").CurrentRegion
With origen
    filas = .Rows.Count: col = .Columns.Count
    .Copy
End With
With destino
    f = .Rows.Count: c = .Columns.Count
    If f = 1 And c = 1 Then
        Set destino = .Resize(filas, col)
    Else
        Set destino = .Columns(c + 1).Resize(filas, col)
    End If
    r = destino.Address
    .PasteSpecial xlValues
    h2.Range(destino.Address).Name = valor
End With
End Sub

Estimado funciona muy bien solo que no pega el formato de celdas. Sin embargo, creo que no me he explicado bien. Son 3 hojas:

La hoja3, que contiene en su celda A1, el nombre de el rango.

La hoja1 que contiene el rango e5:j2 con el nombre del rango dado por la celda A1 de la hoja3

La hoja2 que es donde se pega (como insertar celdas copiadas) el rango e5:j2 con su nombre dado

Cada vez que escribo un nombre en la celda A1 de la hoja3, se cambia el nombre del rango e5:j2 de la hoja1 y luego se pega (como insertar celdas copiadas) el rango e5:j2 con su nombre (dado por la celda A1 de la hoja3) en la hoja2.

Por ejemplo; si escribo sucesivamente en la celda A1 de la hoja3; costo1, costo2, costo3 voy a obtener en la hoja2, 3 rangos de e5:j2 con diferentes nombres que son respectivamente costo1, costo2 y costo3. En estricto rigor el rango e5:j2 solo lo utilizo como un modelo o formato.

Esta macro se escribe en la hoja3 y se ejecuta despues de ejecutar otra macroX.

De antemano muchas gracias por tu gran ayuda.

Es poco practico tener un mismo rango con diferentes nombres en la hoja 1, en fin aquí tienes esta macro, lee el valor de la hoja3, luego nombra el rango de la hoja1 y lo copia a la hoja2 asignadole el mismo nombre que tiene en la hoja1

Sub copiar_datos()
Dim funcion As worksheetfunction
Set funcion = worksheetfunction
Set h1 = Worksheets("hoja1")
Set h2 = Worksheets("hoja2")
Set h3 = Worksheets("hoja3")
valor = h3.Range("a1")
h1.Range("e5:j12").Name = "hoja1!" & valor
h2.Range("e5:j12").Name = "hoja2!" & valor
Set origen = h1.Range(valor)
Set destino = h2.Range(valor)
cuenta = funcion.CountBlank(destino)
If cuenta = 0 Then
    destino.Insert Shift:=xlToRight
End If
origen.Copy
h2.Range("e5:j12").PasteSpecial xlPasteAllUsingSourceTheme
h2.Range("e5:j12").Name = "hoja2!" & valor
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas