Hacer copia de seguridad de una hoja determinada de un libro

Haciendo clic en una etiqueta de un UserForm a la que he asociado el código que copiaré después, hago una copia de seguridad de todo un libro de Excel.

Este es el código al que me he referido:

Dim NombreArchivo, Separador, RutaArchivo
Dim bakCarpeta1, bakCarpeta2, Ruta1, Ruta2
NombreArchivo = Application.ThisWorkbook.Name
Separador = Application.PathSeparator
RutaArchivo = Application.ThisWorkbook.Path
bakCarpeta1 = "CopSeg_" & NombreArchivo
bakCarpeta2 = VBA.Format(VBA.Now, "dd-mm-yyyy-hh-mm-ss")
Ruta1 = RutaArchivo & Separador & bakCarpeta1
Ruta2 = RutaArchivo & Separador & bakCarpeta1 & Separador & bakCarpeta2
If Dir(Ruta1, vbDirectory) <> Empty Then
    'Carpeta existe
    VBA.MkDir (Ruta2)
Else
    'Carpeta no existe
    VBA.MkDir (Ruta1)
    VBA.MkDir (Ruta2)
End If
Application.ThisWorkbook.SaveCopyAs Ruta2 & Separador & NombreArchivo
MsgBox "Se ha creado una copia de seguridad del libro y se ha ubicado en el directorio donde se encuentra la aplicación.", vbInformation, "COPIA DE SEGURIDAD"

Me preguntaba cómo hacer una copia de tan solo una hoja del libro. La hoja se llama: 'mis_expedientes'

1 Respuesta

Respuesta
3

Te agregué las instrucciones necesarias para copiar solo la hoja:

Sub copiaSegura()
Dim NombreArchivo, Separador, RutaArchivo
Dim bakCarpeta1, bakCarpeta2, Ruta1, Ruta2
Dim wb
'NombreArchivo = Application.ThisWorkbook.Name
Separador = Application.PathSeparator
RutaArchivo = Application.ThisWorkbook.Path
bakCarpeta1 = "CopSeg_" & NombreArchivo
bakCarpeta2 = VBA.Format(VBA.Now, "dd-mm-yyyy-hh-mm-ss")
Ruta1 = RutaArchivo & Separador & bakCarpeta1
Ruta2 = RutaArchivo & Separador & bakCarpeta1 & Separador & bakCarpeta2
If Dir(Ruta1, vbDirectory) <> Empty Then
    'Carpeta existe
    VBA.MkDir (Ruta2)
Else
    'Carpeta no existe
    VBA.MkDir (Ruta1)
    VBA.MkDir (Ruta2)
End If
'Elsamatilde: copio la hoja activa ..... o asigno su nombre
Sheets("mis_expedientes").Copy
'creamos un nuevo objeto Libro con nombre de la hoja..... ajustar
Set wb = ActiveWorkbook
With wb
    .SaveAs RutaArchivo & "\" & "mis_expedientes" & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
    'cerramos el nuevo libro
    .Close
End With
'se libera el objeto
Set wb = Nothing
'Application.ThisWorkbook.SaveCopyAs Ruta2 & Separador & NombreArchivo
MsgBox "Se ha creado una copia de seguridad del libro y se ha ubicado en el directorio donde se encuentra la aplicación.", vbInformation, "COPIA DE SEGURIDAD"
End Sub

Ajusta el nombre de la copia (quedó como 'mis_expedientes.xlsm' ) y también el mensaje de fin.

*Tema extraído de mis manuales 500Macros y 500Macros+365. 

Hola Elsa   : - )

He fusilado tu código pero aunque me crea la carpeta contenedora de la que habría de ser la copia de seguridad, ésta está vacía.

Si, quizás fui poco clara cuando te comenté que ajustes el nombre de la copia en instrucción SaveAs.

Allí debes dejar la ruta completa... solo dejé RutaArchivo ... pero debes armarla completa, como Ruta1 o Ruta2.

El mismo tema en 2 consultas me desordena bastante. Por favor, cierra una de las 2 y seguimos en la que falta.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas