Tengo una base de datos en access. Necesito crear un botón para que la guarde con otro nombre a la dirección que le indique.

Crear botón que cuando lo pulse me solicite el nuevo nombre de la base de datos y lo guarde en una carpeta ya determinada.

Debe previamente revisar que el archivo existe

En caso que exista preguntar si lo sobre escribe o cambiar el nombre del archivo a guardar

Respuesta
1

En tu formulario, crea un botón, y en su evento "al hacer clic", le generas este código (supongo que sabes hacerlo, si no es así, dímelo y te guío paso a paso):

Dim elNombre As String, elArchivo As String
Const laRuta As String = "D:\Pruebas Access\"
Set fso = CreateObject("Scripting.FileSystemObject")
Inicio:
elNombre = InputBox("¿Qué nombre le quieres dar al archivo", "Nombre")
If StrPtr(elNombre) = 0 Then
    MsgBox "Proceso de copia cancelado", vbInformation, "Cancelado"
    Exit Sub
ElseIf Nz(elNombre, "") = "" Then
    MsgBox "Debes indicar un nombre válido", vbInformation, "Error"
    Exit Sub
End If
elArchivo=laRuta & elNombre & ".accdb"
If fso.FileExists(elArchivo) Then
    If MsgBox("Ya existe un archivo con ese nombre. Pulsa ""Aceptar"" para sobreescibirlo o ""Cancelar"" para escoger otro nombre", vbOKCancel + vbInformation, "Archivo existente") = vbCancel Then
        GoTo Inicio
    Else
        fso.CopyFile Application.CurrentProject.FullName, elArchivolaRuta & elNombre & ".accdb", True
    End If
Else
    fso.CopyFile Application.CurrentProject.FullName, elArchivo
End If

En el código tienes que hacer uno o dos cambios:

1º/ Donde yo pongo Const laRuta As String = "D:\Pruebas Access\", tú debes poner la ruta a esa carpeta predeterminada, por ejemplo Const laRuta As String = "C:\Backups\"

2º/ Si tu archivo access tiene otra extensión que no sea .accdb, debes cambiar también en esta linea: elArchivo=laRuta & elNombre & ".accdb" la extensión accdb por la que tenga tu BD (mdb, accde...)

¡Gracias! 

Creo que puedo

En lo que lo pruebe te comento

Ok, quedo a la espera por si necesitas alguna aclaración más.

Se me olvidó comentarte, que obviamente también puedes modificar los MsgBox con los textos que quieras, no tienes por qué usar los míos, jejeje

Gracias por tu tiempo para contestar

Te informo, Hice lo siguiente tomando precaución de la dirección donde guardará el nuevo archivo y la extensión del archivo :

FSO = CreateObject("Scripting.FileSystemObject")
Inicio:
elNombre = InputBox("¿Qué nombre le quieres dar al archivo", "Nombre")
If StrPtr(elNombre) = 0 Then
MsgBox "Proceso de copia cancelado", vbInformation, "Cancelado"
Exit Sub
ElseIf Nz(elNombre, "") = "" Then
MsgBox "Debes indicar un nombre válido", vbInformation, "Error"
Exit Sub
End If
elArchivo = laRuta & elNombre & ".accdb"
If FSO.FileExists(elArchivo) Then
If MsgBox("Ya existe un archivo con ese nombre. Pulsa ""Aceptar"" para sobreescibirlo o ""Cancelar"" para escoger otro nombre", vbOKCancel + vbInformation, "Archivo existente") = vbCancel Then
GoTo Inicio
Else
FSO.CopyFile Application.CurrentProject.FullName, elArchivolaRuta & elNombre & ".accdb", True
End If
Else
FSO.CopyFile Application.CurrentProject.FullName, elArchivo
End If

End Sub

He revisado y todo me parece bien, pero me arroja el siguiente error:

No se ha definido la variable y sombrea FSO =

Le agregue a ver si funcionaba

Dim FSO as Scripting.FileSystemObject

También: Dim FSO as String y as Boolean

Y me arroja otros errores

Estoy luchando para corregir

Te informo es una aplicación que estoy haciendo para Análisis de Precios Unitarios y quiero que cada proyecto tenga una base de datos diferente. Pero que trabaje con una base de datos genérica pero que al comenzar le de otro nombre para no perder la BD original

Gracias por tu apoyo 

Disculpa

Me faltó el encabezado que es:

Private Sub GBD1_Click()

Dim elNombre As String, elArchivo As String
Const laRuta As String = "C:\Users\Jose Martinez\Documents\"

..... Set FSO = ....

Gracias Sveinbjorn El Rojo

Ya lo logré, por la función la tenia como Option Explicit con la cual tengo que definir las variables 

Solo borré esta opción y me funciona excelente

Si quieres volver a poner el Option explicit, añade al principio del código un Dim fso As Object. ASí te debiera funcionar.

Otra opción en que registres la librería "Microsoft Scripting Runtime" en el editor de VBA y cambies la línea del Set fso... por ésta otra:

Dim fso As New Scripting.FileSystemObject

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas