Subir archivos con un botón en access
Buenas tardes no se si es posible quisiera que con un botón poder subir archivos por ejemplo le doy clic al botón y me permita buscar el archivo y cuando acepte poder guardarlo en una carpeta especifica y poder asignarle un nombre predeterminado tenga el nombre que tenga
Un saludo
1 Respuesta
Entiendo que lo que quieres es poder seleccionar un archivo del disco y poder copiarlo en otra carpeta.
Si es eso, se puede hacer por código, aprovechando las librerías estándar, no es difícil.
Te podría pasar una función para hacerlo, pero necesito que me des un poco más de información acerca de lo que tienes, es decir:
- Carpeta de origen
- Carpeta de destino
- Si pretendes cambiar el nombre del archivo de destino
Dame algo más de información y cuando tenga un rato te pasaré un pedazo de código para hacerlo.
Si mira lo que prentedo es eso poder coger un archivo del disco y guardarlo en una carpeta que sera una ruta que estará almacenada en un formulario
Carpeta destino es una ruta que yo le diré osea dependiendo el cliente yo almaceno la ruta en un label por ejemplo C:\Users\usuario\Desktop\Archivosguardados\
Y el nombre del archivo seria por ejemplo pedido 001 pedidos seria un nombre fijo el 001 seria una variable que se guardar en el formulario
Gracias por tu atencion un saludo
Vamos a ver. Voy a hacer ciertas suposiciones:
- En tu form hay un campo de texto que se llama origen, donde está almacenada la carpeta en la que hay que buscar los archivos originales
- En tu form hay un campo de texto que se llama destino, donde está almacenada la carpeta en la que hay que archivar los documentos de destino
Crea un módulo independiente y en él copias este código:
Public Function SubirArchivo(CarpetaOrigen As String) as Variant Dim dlgAbrir as FileDialog, vrtSelected as Variant Dim archivo as String Set dlgAbrir = Application.FileDialog(msoFileDialogFilePicker) With dlgAbrir .AllowMultiSelect = False .title = "Elegir archivo a copiar" .InitialFileName = CarpetaOrigen .ButtonName = "Seleccionar" If .Show = -1 Then For Each vrtSelected In .SelectedItems archivo = vrtSelected Next End If End With SubirArchivo = archivo End Function Public Function SoloNombre(fullpath As String) As String Dim longitud As Integer, i As Integer, caracter As String, nombre_fichero As String longitud = Len(fullpath) i = longitud nombre_fichero = "" caracter = Mid(fullpath, i, 1) While caracter <> "\" nombre_fichero = caracter & nombre_fichero i = i - 1 caracter = Mid(fullpath, i, 1) Wend SoloNombre = nombre_fichero End Function
Lo anterior abre un diálogo de sistema que te permite elegir un archivo de una carpeta dada (InitialFileName = CarpetaOrigen) y solo uno (AllowMultiSelect = False) y devuelve ese nombre de archivo.
Como lo devuelto es un nombre de archivo con todas las carpetas de la via de acceso, la función SoloNombre la usaremos para aislar el nombre del archivo. Después verás para que sirve.
Esto tal como está no hace nada. Guarda y cierra el módulo. Ponle el nombre que quieras y volvamos al formulario.
Con las suposiciones anteriores, en tu formulario tienes un botón que se llama SubirArchivo. En la ventana de propiedades del botón, busca la propiedad Al hacer click, elige Procedimiento de Evento y haz click en el botón ... que está justo a la derecha de la citada propiedad. Se abrirá la ventana de VBA otra vez.
Debería aparecerte, entre otras cosas, algo similar a lo siguiente:
Private Sub SubirArchivo_Click() End Sub
Entre esas dos líneas pones lo siguiente:
Dim archivo as string archivo = SubirArchivo(Me.Origen) FileCopy Me. Origen, Me. Destino & "\" & SoloNombre(archivo)
Lo que hace este código es, en primer lugar, guardar en la variable archivo el nombre del archivo (completo, con las carpetas), y a continuación copia el archivo original en la carpeta de destino, y aquí es donde usas la función SoloNombre, para, en la path de destino, añadir el nombre del archivo convenientemente aislado.
Debería funcionar, no lo he probado, he copiado porciones de código que hice hace tiempo.
Prueba y si no va me lo dices e intentaré modificarlo para que funcione.
Buenas noches
Si me funciona hasta el punto que elijo el archivo pero al seleccionar me sale error en la ruta
FileCopy Me.VOrigen, Me.VDestino & "\" & SoloNombre(archivo)
y en este codigo que se supone que hace
/*
Public Function SoloNombre(fullpath As String) As String
Dim longitud As Integer, i As Integer, caracter As String, nombre_fichero As String
longitud = Len(fullpath)
i = longitud
nombre_fichero = "DiegoPedido"
caracter = Mid(fullpath, i, 1)
While caracter <> "\"
nombre_fichero = caracter & nombre_fichero
i = i - 1
caracter = Mid(fullpath, i, 1)
Wend
SoloNombre = nombre_fichero*/
¿Qué es carácter?
Un saludo
Vamos por partes.
Como te decía, copié porciones de código de un programa que hice hace tiempo, por lo que puede haber algún pequeño error de sintaxis. Lo más seguro es que sobre la \, por lo que puedes modificar el código que me dices y dejarlo como:
FileCopy Me. VOrigen, Me. VDestino & SoloNombre(archivo)
En cuanto a la función SoloNombre(archivo), la asignación
archivo = SubirArchivo(Me.Origen)
hace que archivo sea una ruta completa con nombre de archivo, es decir, una vez has seleccionado el archivo de disco, lo que obtienes en la variable de cadena es algo tipo:
"c:\carpeta1\carpeta2\carpeta3\fichero.pdf"
Lo que me interesa es que al copiar tengamos algo similar a:
FileCopy "c:\carpeta1\carpeta2\carpeta3\fichero.pdf", "c:\carpetaA\carpetaB\fichero.pdf"
Pero como archivo tiene el valor que te decía más arriba, hay que quitar todo lo que sobre para que me quede únicamente fichero.pdf.
Lo que hace la función SoloArchivo, es recorrer la cadena que pasamos como parámetro, de derecha a izquierda hasta que encuentra la primera \, momento en el cual tiene que entender que no tiene que mirar nada más, y ya tiene aislado el nombre del archivo.
Prueba lo que te decía más arriba, elimina el & "\" y me dices. Si no te va intentaré buscarte un hueco entre hoy y mañana para probarlo con un ejemplo y lo vemos.
Buenos días ya lo probé sale el mismo error
He cambiado la ruta donde se habrá en C pero me sale el mismo error si le quito el & solo nombre igual falla así que no creo que sea eso esta en la ruta de origen y destino
Gracias por tu tiempo
Hoy que tenía algo de tiempo he rehecho el ejemplo completo y simplificado de lo que pides.
Puedes descargarlo de aquí:
https://dl.dropboxusercontent.com/u/18742583/todoexpertos/dyberna/ejemplo%20todoexpertos.accdb
Te lo dejo de momento en mi dropbox, a ver si tengo tiempo y hago una entrada en mi blog, que está algo abandonado.
Mira a ver si te vale, creo que sí, y si no lo corregimos hasta que te funcione bien.
- Compartir respuesta