Macro: crear una hoja nueva, renombrarla y pegarle datos

Sub Btn_Guardar_Informacion2()
Dim FILA_REGA As Integer
Dim NOMBRE_HOJA As Integer
FILA_REGA = Sheets("AVISO").Range("A7").Value
Sheets.Add(After:=Worksheets(Worksheets.Count)).Name = NOMBRE_HOJA
Sheets("AVISO").Select
Sheets("AVISO").Range("A3:B5").Copy
NOMBRE_HOJA = Sheets("AVISO").Range("B3").Value
Sheets(NOMBRE_HOJA).Select
Sheets(NOMBRE_HOJA).Select Range("A1").Select
Sheets(NOMBRE_HOJA).Select Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=True
Sheets("AVISO").Select
Sheets("AVISO").Range("K3:L4").Copy
Sheets(NOMBRE_HOJA).Select
Sheets(NOMBRE_HOJA).Select Range("D1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Sheets("AVISO").Select
Sheets("AVISO").Range("A8:Q" & FILA_REGA).Copy
Sheets(NOMBRE_HOJA).Select
Sheets(NOMBRE_HOJA).Select Range("F1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
End Sub

Hola!,

Estoy desarrollando una macro en excel que crea una hoja nueva y la reenombre con el valor de la celda A7 de mi hoja llamada "AVISO". Una vez creada la nueva hoja necesito que me copie varios rangos de datos, más sin embargo el problema que tengo es que como no se cual será el nombre de mi nueva hoja no puedo definir el nombre de la hoja en donde copiaré mi rango de datos en mi código

2 respuestas

Respuesta
1

Según tu macro el nombre de la hoja lo toma de la B3 y en A7 debes tener un número de fila.

Te anexo la macro actualizada

Sub Btn_Guardar_Informacion2()
'Act.Por.Dante Amor
    Set h1 = Sheets("AVISO")
    hoja = h1.Range("B3")
    If hoja = "" Then
        MsgBox "Falta el nombre de la hoja nueva", vbExclamation
        Exit Sub
    End If
    existe = False
    For Each h In Sheets
        If LCase(h.Name) = LCase(hoja) Then
            existe = True
            Exit For
        End If
    Next
    If existe Then
        MsgBox "Ya existe la hoja : " & hoja, vbExclamation
        Exit Sub
    End If
    '
    FILA_REGA = h1.Range("A7").Value
    If FILA_REGA = 0 Or FILA_REGA = "" Or Not IsNumeric(FILA_REGA) Then
        MsgBox "Falta el número de FILA_REGA"
        Exit Sub
    End If
    Sheets.Add After:=Sheets(Sheets.Count)
    Set h2 = ActiveSheet
    h2.Name = hoja
    H1. Range("A3:B5"). Copy
    h2.Range("A1").PasteSpecial xlValues
    h1.Range("K3:L4").Copy
    h2.Range("D1").PasteSpecial xlValues
    h1.Range("A8:Q" & FILA_REGA).Copy
    h2.Range("F1").PasteSpecial xlValues
    MsgBox "Fin"
End Sub

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

Respuesta
1

Dices qué no sabes cual sera el nombre de tu hoja y sin embargo mencionas que quieres que la nueva hoja creada se llame como el valor de la celda a7?, no entendi pero como quiera te dejo la siguiente macro que hace lo que pides, la macro buscara la hoja con el nombre de la celda a7 si no la encuentra la creara y la renombrara copiando los rangos a los rangos de la nueva hoja.

Sub guardar_inform()
Set HO = Worksheets("aviso")
With HO
    NOMBRE = Trim(Str(.Range("a7")))
    On Error Resume Next
    Sheets(NOMBRE).Select
    If Err.Number > 0 Then
        Sheets.Add AFTER:=Sheets(Sheets.Count)
        ActiveSheet.Name = NOMBRE
        Sheets(HO.Name).Select
    End If
    On Error GoTo 0
    .Range("A3:B5").Copy:   Worksheets(NOMBRE).Range("B3").PasteSpecial xlPasteValues
    .Range("K3:L4").Copy:   Sheets(NOMBRE).Range("D1").PasteSpecial xlPasteValues
    .Range("A8:Q" & NOMBRE).Copy: Sheets(NOMBRE).Range("F1").PasteSpecial xlPasteValues
End With
End Sub

Gracias James! Es correcto, no se que valor tendrá la celda A7, ya que esta será capturada por el usuario. 

Eso no afecta el resultado final, la macro nombrara la nueva hoja según lo que capture el usuario en la celda A7

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas