Visual Basic: Copiar directorio completo

Estoy preparando un formulario para crear copia de seguridad del proyecto. No sólo quiero hacer copia de la base de datos, sino de un directorio completo, incluyendo subdirectorios, etc, ya que tengo subdirectorios con imagenes...

He creado un Cuadro de texto donde introducir la ruta del directorio destino (denominado Ruta_Destino) y un botón de comando con el siguiente código:

Private Sub Hacer_Copia_Click()
Dim Path_Origen As String
Dim Path_Destino As String
Path_Origen = CurrentProject.Path & "\*"
Path_Destino = Forms![Formulario Copia Seguridad]![Ruta_Destino] & "\"
FileSystemObject.CopyFolder Path_Origen, Path_Destino, True
End Sub

Pero me da error: "Se ha producido un error '424' en tiempo de ejecución: Se requiere un objeto.

¿Cómo puedo solucionarlo?

1 respuesta

Respuesta
1

Jon: Pon éste código en un Módulo Estándar

Public Sub CopiaDeDirADir(DirOrigen As String, DirDestino As String)
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.CopyFolder DirOrigen, DirDestino
Set FSO = Nothing
MsgBox "Archivos Copiados.", vbInformation, "CARPETA COPIADA"""
End Sub

Para llamar a éste procedimiento lo puedes hacer desde cualquier de la Aplicación,

Call CopiaDeDirADir(RutaDesdeDondeVasAcopiar, RutaEnLaQueVasACopiar)

Y como ejemplo de las Rutas:

"C:\MisDocumentos\Arcilla\Ceramica"

Un saludo >> Jacinto

Jon: Sobran las dos comillas dobles de CARPETA COPIADA .Un saludo >> Jacinto

Va bien, pero tengo un problema:

Cuando la carpeta destino ya tiene los archivos y subcarpetas, no me hace la copia. ¿Cómo puedo hacer para que sobrescriba el contenido?

Un saludo

Jon: Antes de nada asegura que la Carpeta de Origen y la de Destino están bien referenciadas, porque esa instrucción debe copiarte los archivos, aunque existan.

Si quieres limpiar la Carpeta de Destino antes de Ejecutar ese procedimiento, puedes usar ésta Función, pero ten en cuenta que te borrará todos los archivos que hay en ella.

Function EliminarArchivosDeUnaCarpeta(ByVal LaCarpeta As String)
Dim MisArchivos As String
'Elimina todos los archivos y carpetas, incluso los ocultos y los de sólo lectura
MisArchivos = Dir(LaCarpeta, vbDirectory + vbHidden + vbReadOnly)
Do While MisArchivos <> ""
        If MisArchivos <> "." And MisArchivos <> ".." Then
                  If Not (GetAttr(LaCarpeta & MisArchivos) And vbDirectory) = vbDirectory Then
                            'Si no es un directorio, es un archivo, lo eliminamos
                            Kill LaCarpeta & MisArchivos
                End If
        End If
        MisArchivos = Dir
Loop
End Function

Como puedes ver a esa Función que la puedes llamar desde cualquier sitio de la Aplicación, si está en un módulo estandar, claroesta.

Has de Pasarle la Carpeta>> Ejemplo:

Call EliminarArchivosDeUnaCarpeta("C:\MisDocumentos\Año2017\Facturas"), o definir la carpeta en una Variable y pasarla. Un saludo >> Jacinto

Cierto, estaba haciendo la copia en un pendrive y parece que estaba dañado.

Pero tengo un problemilla, en la carpeta origen tengo archivos y subcarpetas y no me copia los archivos que están diectamente en la carpeta origen. Si que copia las subcarpetas y archivos de las subcarpetas.

Jon: Ese procedimiento actúa sobre la parte que le indiques de modo que si quieres copiar los ficheros de una Carpeta intermedia en otra has de dar el Origen adecuado y el destino Ídem.

Ejemplo >> DirOrigen = "C:\Alfa"

DirDestino = "C:\Carpeta1\carpeta2"

Te copiará todos los archivos de Alfa en Carpeta2. Mis saludos >> Jacinto

Cierto, estaba haciendo la copia en un pendrive y parece que estaba dañado.

Pero tengo un problemilla, en la carpeta origen tengo archivos y subcarpetas y no me copia los archivos que están diectamente en la carpeta origen. Si que copia las subcarpetas y archivos de las subcarpetas.

Jon: Por alguna razón, creo que éste texto anterior está repetidp.

Lo doy por contestado. Saludos >> Jcinto

No, el problema es otro. Me copia las subcarpetas y archivos que están en las subcarpetas, pero no me copia los archivos que están directamente en el DirOrigen

Jon: La verdad es que así a bote pronto, lo ignoro.

Mira si rienes ficheros abiertos en Origen o destino, o alguna cuestión de ese tipo.

Yo acabo de hacer un par de ensayos, por si acaso y no tengo ningún problema, ni con carpetas intermedias, ni finales, ni la primera carpeta. Un saludo >> Jacinto

Si, en efecto tengo abierto un fichero. Uno de los ficheros a copiar es la propia base de datos desde la que estoy ejecutando el código.

¿Cómo puedo, entonces, hacer una copia de seguridad de esta base?, ya que estará siempre abierta.

Jon: Eso va por otro lado. Mira éste enlace de la Web de Neckkito, que hay dos ejemplos de Backup y otro de Backups con XML de Sveinbjorn.

http://siliconproject.com.ar/neckkito/index.php/ejemplos-explicados/seguridad 

Mis saludos >> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas