Copiar un archivo desde access

Necesito copiar un archivo desde access. Probé una respuesta que dieron a alguien y funciona a la perfección, pero...
Dim A As String, fs As Object
A = "C:\PROGRAMA.mdb"
Set fs = CreateObject("Scripting.FileSystemObject")
fs.copyfile A, "C:\Mis documentos\PROGRAMA.mdb", True
Pero mi problema es que mi archivo a copiar será desde una memoria extrable (F:\, G:\, dependiendo cual toque) y el nombre del archivo no está definido sino que tendría que elegirlo de los archivos que están dentro de la memoria extraíble. Es decir, que sería como si abriera el explorador de windows para seleccionar mi achivo.
Y seguramente ya estoy pidiendo demasiado pero, además necesitaría cambiarle el nombre.

1 Respuesta

Respuesta
1
El problema es un pelín más complicado. En el fondo parece que pretendes crear un sistema que permita copiar cualquier archivo cambiando o no el nombre desde cualquier sitio a cualquier otro sitio.
Para empezar yo crearía un formulario con 3 cuadros de texto y 3 botones.
El primer cuadro de texto es dónde deberíamos a almacenar la ruta completa del archivo origen. Para conseguir esa ruta deberíamos utilizar un FileDialog (es cuadro que te aparece cuando, por ejemplo, descargas un archivo y te pregunta dónde quieres guardarlo). Si utilizas Office 2007 puedes utilizar la propia biblioteca de office que ya te proporciona un FileDialog. Si tienes una versión anterior (o sospechas que dónde se pueda instalar el programa la pueda tener), podrías utilizar el FileDialog de Happy (http://accessvbafaq.mvps.org). Ambas opciones te permiten recuperar la ruta completa al archivo 'origen'. Esa ruta la guardas en el primer cuadro de texto.
El segundo cuadro de texto sirve para poner la ruta dónde se copiará el archivo (sin el nombre del archivo). Para seleccionarla puedes utilizar una función llamada GetFolder que probablemente encontraras en mi web (http://www.llodax.com). Esa función la llamarías desde el segundo botón.
Finalmente tendríamos el cuadro de texto dónde el usuario escribiría el nombre del archivo con el que se va a guardar.
Un último botón realizaría la copia con el código que has indicado pero adaptado a los controles. Solo quedaría hacer ciertas comprobaciones y listo.
Hola Xavi. He estado trabajando en lo que me dijiste y tengo varios problemas y dudas. En cuanto a FileDialog, en la ayuda Access, venía esto como ejemplo para abrir un archivo, que supongo es lo que decías, lo copié tal cual pero me da problema y no sé porque, supongo que por la expresión (Aplicación), no sé cómo adaptarlo a mi base de datos. ¿Podrías ayudarme?
Dim dlgOpen As FileDialog
Set dlgOpen = Application.FileDialog( _
    FileDialogType:=msoFileDialogOpen)
With dlgOpen
    .AllowMultiSelect = True
    .Show
End With
También he visto FileDialog de Happy (http://accessvbafaq.mvps.org) pero es más enrevesado aunque en la base de datos ejemplo que pone funciona, pero es más complicado de adaptar a la mía, creo.
En cuanto a GetFoder no creo q tenga poblemas pq la defines en tu página.
Como filedialog es el primer campo del formulario y getfolder el segundo, para copiar el archivo de un sitio al otro utilizaría como me dijiste:
'Private Sub Perfil_Click()'copia el archivo de una dirección a otra
'Dim A As String, fs As Object
'A = "G:\Ingles\EXERCISES\modals.doc"
'Set fs = CreateObject("Scripting.FileSystemObject")
'fs.copyfile A, "C:\Users\Usuario\Documents\...", True
'End Sub
Cómo sería la sintaxis para q A fuera el 1ºcampo y "C:\Users\Usuario\Documents\... fuera el 2º campo?
La verdad es que no veo cual es el problema con el FileDialog. Ya veo que puedes utilizar el propio de Office, con lo que te ahorras el módulo de clase y el resto del código de Happy.
Pero si te sirve el ejemplo de Happy como 'guia' para entender que es cada una de las cosas que se puede hacer con un FileDialog. En el código que tu has puesto, no veo que recorras la colección de elementos seleccionados (por cierto: permites multiselección... no lo veo yo muy claro) para asignar su valor al control correspondiente
En cuanto a tu ultima parte:
fs.CopyFile Me!uncuadrodetexto, Me!otrocuadrodetexto, True
Así de simple y sin variables de por medio (bueno, solo el fs)
Xavi
Bien, después de trabajar con ello un buen tiempo, he conseguido lo que necesitaba y tu información me ha sido imprescindible. Muchas gracias por ella y por la espera.
Hasta la próxima peguta...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas