Error en Macro Necesito una solución

Tengo un problema en esta macro, la macro la tengo para que me realice un aviso de cobro, para que entiendan lo explicare así tengo en una hoja un formato de aviso de cobro con una lista desplegable de clientes al cambiar de cliente automáticamente me sale los valores a cobrar, entonces lo que necesito es dejar un historial de esos clientes, en una nueva hoja el problema que tengo es que al momento de crear la macro selecciono una hoja y le cambio el nombre por el cliente, pero al hacerlo por el segundo cliente ya no me lo hace por que el numero de hoja es otro

Sub Grabar_Aviso()
'
' Grabar_Aviso Macro
'

'
Sheets.Add After:=Sheets(Sheets.Count)
Sheets("Aviso de Cobro").Select
Range("C11").Select
Selection.Copy
Sheets("Hoja1").Select
Sheets("Hoja1").Name = "Inversiones XY"
Range("A1").Select
Sheets("Aviso de Cobro").Select
Range("A1:M51").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("ESSPRESO AMERICANO").Select
ActiveSheet.Paste
Sheets("Aviso de Cobro").Select
Range("C11").Select
End Sub

1 respuesta

Respuesta
1

No entendí muy bien lo que hace la macro.

Mejor explícame qué quieres hacer, te dejo algunos pasos, solamente completa la información:

1. Quieres copiar de la hoja "Aviso de Cobro", el rango "A1:M51"

2. Quieres crear una nueva hoja

3. En la nueva hoja quieres pegar el rango

4. Para que sea en automático, de dónde se obtiene el nombre de la nueva hoja.

5. Renombrar la nueva hoja con el nombre obtenido.

Hola Dante, Muchas gracias por responder

Mira tengo un archivo excel con tres Hojas principales en la primera hoja tengo una base de datos de clientes con formulas para el calculo de consumo de agua potable.

bien en la segunda hoja tengo un formato de cobro llamado "Aviso de cobro" donde se detalla el consumo de los clientes,  el aviso tengo una lista desplegable que cada vez que elijo un nuevo cliente todos los datos de consumo cambian y igual el valor a cobrar, 

bien hasta alli te explico lo que tengo en el excel, ahora lo que quiero hacer con la macro es cada vez que cambie de cliente, la macro me guarde una copia del "Recibo de cobro" y me ponga el nombre del cliente en el titulo de la hoja , 

el problema esta en que la macro me lo hace para un cliente pero ya el segundo me tira error

por esto:

Sheets("Hoja16").Select
Sheets("Hoja16").Name = "SUPER QUEQUES"
Sheets("Aviso de Cobro").Select
ActiveWindow.SmallScroll Down:=-12
Range("A1:M51").Select
Application.CutCopyMode = False
Selection.Copy

osea que cuando excel me crea una nueva hoja le pone el siguiente numero de hoja, entonces la macro se pierde porque ya tiene un numero de hoja predifinido

en sistesis lo que quiero es copiar el aviso de cobro en una nueva hoja y que a esta se le ponga el nombre o codigo del cliente

Sigo sin entender muy bien qué necesitas.

Olvida tu macro. De eso no te preocupes, yo te ayudo con el código.

Quieres que en automático la macro tome un cliente, lo ponga en una hoja, cree una nueva hoja con el nombre del cliente y repita estos pasos.

O tú vas a poner el cliente en una hoja y solamente quieres que la macro copie la hoja en una nueva hoja y la nueva hoja sea renombrada.


Toda la explicación la debes hacer con un ejemplo real, de preferencia utiliza imágenes para que sea más claro el ejemplo.

Este es el aviso de cobro, lo que quiero es que cada vez que cambie de cliente, se guarde una copia en una hoja nueva en excel, a través del botón "Grabar Aviso"

Seria que al momento de crear la nueva hoja se cambie el nombre por el cliente o el numero de local, que están en la columna C11 o en la B13

Te anexo la macro

Sub Grabar_Aviso()
'Por Dante Amor
' Grabar_Aviso Macro
    '
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set h1 = Sheets("Aviso de Cobro")
    If h1.Range("C11").Value = "" Then
        MsgBox "Debes seleccionar un nombre", vbExclamation
        Exit Sub
    End If
    '
    nombre = Left(h1.Range("C11").Value, 30)
    existe = False
    For Each h In Sheets
        If LCase(h.Name) = LCase(nombre) Then
            existe = True
            Exit For
        End If
    Next
    If existe Then
        res = MsgBox("Ya existe una hoja con el nombre : " & nombre & vbCr & vbCr & _
                     "Deseas borrar la hoja y crear la nueva", vbQuestion + vbYesNo)
        If res = vbNo Then
            Exit Sub
        Else
            Sheets(nombre).Delete
        End If
    End If
    Sheets.Add After:=Sheets(Sheets.Count)
    ActiveSheet.Name = nombre
    Application.ScreenUpdating = True
    MsgBox "Hoja creada con el nombre : " & nombre
End Sub

'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. 
'.[Avísame cualquier duda

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas