Macro para guardar una copia del archivo en el mismo sitio que el original y con nombre distinto

Tengo una macro que eligiendo un criterio cambia algunos campos de mi excel, pues bien, lo que quiero es que se guarde una copia de este archivo en el mismo lugar donde se encuentra el original y que de nombre sea el valor de una celda y la fecha en la cual se está guardando.

Con esto sería suficiente. Aunque no se si hay modo de que al crear la copia, se abra ese documento y borre la macro y el botón asociado a ella, para que se quede como un excel plano, simplemente con los datos, y que se guarde así.

2 Respuestas

Respuesta
1

14.03.17 #VBA guardar copia de archivo plano

Buenos días, Ana

Aquí va la rutina que, además graba el archivo sin sus macros ni el botón, como solicitaste.

Accede al Editor de VBA (Atajo: Alt + F11), allí inserta un módulo (Insertar-Módulo) y pega el siguiente código:

Sub BackArchivo()
'---- Variables modificables:
'ANA, modifica estos datos de acuerdo a tu proyecto:
HojaNombre = "Hoja2" 'hoja donde está la celda que contiene el nombre del archivo
CeldaNombre = "F5" 'direccion de la  celda que contiene el nombre del archivo
BotonMacro = "Shape8"
'---- fin Variables
'
'---- inicio de rutina:
'
DirCopia = ActiveWorkbook.Path & "\"
NomArch = Sheets(HojaNombre).Range(CeldaNombre).Value & "-" & Format(Date, "dd-mm-yy")
Application.ScreenUpdating = False
'Elimina botón de macro, si lo encontrase
On Error Resume Next
ActiveSheet.Shapes(BotonMacro).Delete
Err.Clear
On Error GoTo 0
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs DirCopia & NomArch & ".xlsx"
Application.DisplayAlerts = True
ActiveWorkbook. Close xlNo 'esta linea cierra el archivo grabado. Ssi no la necesitas, anúlala.
End Sub

Nota que, al principio del código, hay unas variables para que lo adaptes a tu archivo

.

Hola Fernando, estoy segura que estoy haciendo algo mal, te pongo la macro adaptada a mi excel:

 HojaNombre = "1.Datos generales proyecto" 'hoja donde está la celda que contiene el nombre del archivo
    CeldaNombre = Range("B11")
    BotonMacro = "Shape8"
    DirCopia = ActiveWorkbook.Path & "\"
    NomArch = Sheets(HojaNombre).Range(CeldaNombre).Value & "-" & Format(Date, "dd-mm-yy")
    Application.ScreenUpdating = False
    'Elimina botón de macro, si lo encontrase
    On Error Resume Next
    ActiveSheet.Shapes(BotonMacro).Delete
    Err.Clear
    On Error GoTo 0
    Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs DirCopia & NomArch & ".xlsx"
    Application.DisplayAlerts = True
    ActiveWorkbook.Close xlNo  'esta linea cierra el archivo grabado.
   

Me sale un mensaje de error: Se ha producido un error "1004" en tiempo de ejecución: Error definido por la aplicación o el objeto.

Me aparece cuando llega a la línea:

DirCopia = ActiveWorkbook.Path & "\"
    NomArch = Sheets(HojaNombre).Range(CeldaNombre).Value & "-" & Format(Date, "dd-mm-yy")

Muchas gracias.

.

Buenos días, Ana

El problema, en principio, está en la definición de la variable

CeldaNombre = Range("B11")

Como ves en mi código, sólo tienes que colocar la dirección de la celda. Así:

CeldaNombre = "B11"

Prueba con ese cambio y dime si te funcionó (debería).

Saludos

Fer

.

Respuesta
1

Te anexo la macro para guardar el archivo como excel "plano", sin macros, en la misma ruta

ub Guardar_Xls()
'---
'   Por.Dante Amor
'---
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    nombre = Sheets("Hoja1").Range("A3")
    If nombre = "" Then
        MsgBox "Falta el nombre del archivo", vbExclamation
        Exit Sub
    End If
    '
    ruta = ThisWorkbook.Path & "\"
    arch = nombre & " " & Format(Date, "dd-mm-yyyy")
    Sheets.Copy
    ActiveWorkbook.SaveAs ruta & arch, FileFormat:=xlOpenXMLWorkbook
    ActiveWorkbook.Close
    Sheets(1).Select
    MsgBox "Archivo guardado: " & arch, vbInformation
End Sub

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

Cambia en la macro "Hoja1" por el nombre de la hoja que tiene la celda con el nombre del archivo. También cambia "A3" por la celda que tiene el nombre del archivo

Sub Guardar_Xls()
'---
'   Por.Dante Amor
'---
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    nombre = Sheets("Hoja1").Range("A3")
    If nombre = "" Then
        MsgBox "Falta el nombre del archivo", vbExclamation
        Exit Sub
    End If
    '
    ruta = ThisWorkbook.Path & "\"
    arch = nombre & " " & Format(Date, "dd-mm-yyyy")
    Sheets.Copy
    ActiveWorkbook.SaveAs ruta & arch, FileFormat:=xlOpenXMLWorkbook
    ActiveWorkbook.Close
    Sheets(1).Select
    MsgBox "Archivo guardado: " & arch, vbInformation
End Sub

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

Estoy haciendo algo mal seguro porque me sale un error:

Se ha prosucido el error "13" en tiempo de ejecución: No coinciden tipos.

Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    nombre = Sheets("1.Datos generales proyecto").Range("B11:H11")
    If nombre = "" Then
        MsgBox "Falta el nombre del archivo", vbExclamation
        Exit Sub
    End If
    '
    ruta = ThisWorkbook.Path & "\"
    arch = nombre & " " & Format(Date, "dd-mm-yyyy")
    Sheets.Copy
    ActiveWorkbook.SaveAs ruta & arch, FileFormat:=xlOpenXMLWorkbook
    ActiveWorkbook.Close
    Sheets(1).Select
    MsgBox "Archivo guardado: " & arch, vbInformation

No he puesto el sub y ni end sub porque esta integrada en una macro, y este sería el final.

Muchísimas gracias.

Si tienes la celda combinada de b11 a h11 solamente pon b11

Perfecto, era eso! Funciona a la perfección.¡Muchas gracias! =)

Ains!siento molestar otra vez!=S

Lo de guardar con el nombre que quiero funciona a la perfección, lo que no hace es eliminar el botón de la macro y dejarlo como en texto "plano".

Gracias.

No sabía que tenías un botón y que querías borrarlo.

Después de esta línea:

Sheets. Copy

Agrega esta línea:

Sheets("1.Datos generales proyecto"). DrawingObjects("1 Rectángulo redondeado").Delete

Supongo que en la hoja "1.Datos generales proyecto", tienes el botón.

También supongo que es un botón de Autoforma o de CommandButton de Control ActiveX. Cambia "1 Rectángulo redondeado", por el nombre que tiene tu botón, puedes ver el nombre de tu botón de esta forma: selecciona tu botón y revisa en el Cuadro de Nombres el nombre del botón, ese nombre lo pones en la macro.

Y por otra parte, no sé a qué te refieres con "y dejarlo como en texto "plano""

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas