Cambiar directorio desde vba

Soy nuevo en esto de Access y por ello tengo muchas dudas.

Lo que me ocurre es lo siguiente:

Estoy creando una bd para mi trabajo con Access 2007 llamada "clientes". En ella hay formularios que tienen un control "imagen" en el que aparece el logotipo de la empresa (logotipo que puede cambiar). Para no cargar la bd con muchas imágenes, lo que he hecho ha sido crear una carpeta en la que he guardado la imagen en la siguiente ruta: E:\clientes\logos\logo.bmp

Además, como quiera que tenemos que enviar cartas a los distintos clientes, he creado un documento Word (mis jefes quieren utilizar Word para los envíos de cartas) con la siguiente ruta:

E:\clientes\escritos\carta.docx

La letra de la unidad "E" cambia, ya que tan pronto trabajo en mi domicilio como en mi puesto de trabajo, por lo que llevo la bd en un pen y, cada vez que cambio de ordenador, el equipo asigna una letra de unidad distinta a dicho pen (en mi casa es la E, en el trabajo, puede ser la D o la G, depende del día...

Mi problema es el siguiente:

Desde un formulario de la bd, cargo la imagen del logo de la siguiente manera: 1º creo una tabla (tablalogos) con un campo tipo texto y le doy el valor de la ruta mencionada para logo. Después, creo un formulario (form paraimagen) basado en esa tabla con un solo control (también llamado logo). Por último, cuando abro el formulario en el que aparece el control imagen (form previsualización) le asigno a dicho control imagen el valor del control logo del form paraimagen (que se abre previamente y se cierra una vez cargado) y así obtengo la imagen en la previsualización sin necesidad de guardarla cada vez.

Por otro lado, en este form previsualización hay un botón de comando con el siguiente código:

Dim word As New word.Application
Dim pruebarec As word.Document
Dim myrange As Range
word.Visible = True
Set reclamación = word.Documents.Open(FileName:="e:\clientes\escritos\carta.docx", ReadOnly:=True)

Que me abre la plantilla de word (añado después más código para copiar en dicha plantilla todo lo que aparece en previsualización, aunque no lo pongo aquí por no extenderme demasiado, pero que compartiré con gusto si lo deseáis)

En principio funciona bien, solo que, cada vez que cambio de ordenador, tengo que cambiar la unidad en cada uno de los escritos (las plantillas son varias) y también en la tabla "tablalogos". Esto no sería mayor problema (aunque si es un poco enojoso), pero, en mi trabajo, cambian las bd. De unidad con bastante frecuencia (no me preguntéis por qué) y claro, en ese caso si es un problema pues tendría que andar cambiándolo cada dos por tres...

¿Existe alguna forma de poder indicar la ruta sin necesidad de poner la letra de la unidad y que access sepa dónde buscar? Habitualmente, si no pongo letra de unidad, o se vuelve loco o busca por defecto en C:\

1 Respuesta

Respuesta
1

Te voy aportar un par de ideas que creo te servirán para solucionar tu problema.

1º/ Para saber la ruta en la que tienes la BD, puedes usar en VBA: Application. CurrentProject. Path, que te devuelve el directorio en el que se encuentra la BD.

2º/ Para vincular el logo, puedes usar el sistema que explica el experto Neckkito en este ejemplo: http://siliconproject.com.ar/neckkito/index.php/ejemplos-explicados/formularios/93-ejemplos-explicados/ejemplos-de-formularios/166-imagenes-en-formulario

3º/ En tu tabla tablalogos, lo único que tendrías que guardar es el nombre y extensión del archivo, y a la hora de cargar la imagen, completarías la ruta mediante código, algo así, si como me parece entender tienes tu BD en la carpeta "clientes" de tu pen:

Dim miRuta as String

Dim miLogo as string

'Creas la ruta a la carpeta

miRuta=Application.CurrentProject.Path & "\logos\"

'Añades el nombre y extensión

miLogo=miRuta & Me.logo

'Colocas la imagen en el control

Me.Imagen.Picture=miLogo

4º/ Para el tema de la carta en Word, sería parecido:

Dim word As New word.Application
Dim pruebarec As word.Document
Dim myrange As Range

Dim miRuta as String

miRuta=Application.CurrentProject.Path & " \escritos\"
word.Visible = True
Set reclamación = word.Documents.Open(FileName:=miRuta & "carta.docx", ReadOnly:=True)

Hola a todos.

Muchísimas gracias, sulcus, por tu pronta respuesta. Voy a probar todo lo que me dices y te cuento...

A ver si consigo ir acabando...

Gracias de nuevo

Hola otra vez.

Pues... algo falla, algo he hecho mal seguro. Cuando intento ejecutar el código, me localiza la unidad (he probado copiando la base en otro pen, con lo que el equipo le asigna una letra de unidad distinta y ejecutándolo desde dicho pen), pues me da el mensaje siguiente:

"No se puede encontrar el archivo E:\clientes\...\carta.docx"

Si lo intento desde el otro pen, el mensaje es el mismo, pero cambia la letra de la unidad por la que le ha asignado el equipo (en este caso la G:), luego sí que busca en la unidad correcta ( que es lo que yo quería) pero no encuentra el archivo. En cambio poniendo en Filename la ruta completa, sí que lo encuentra...

¿Qué es lo que puede estar fallando?

Muchísimas gracias, una vez más por vuestra atención.

Lo único que se me ocurre es que no estés declarando bien la variable ruta, comprueba que escribres correctamente el nombre de la carpeta en la linea miRuta=Application...

Si quieres, haz una copia de tu BD, borra los registros y pásamela con las carpetas y el archivo word, vía filebig, dropbox... y le echo un vistazo a ver que es lo que pasa...

Ok, cuando tenga un ratito lo compruebo y si no te envío a ver. Muchísimas gracias.

Perdón por no haber respondido antes, es que anduve muy liado y hasta hoy no he podido comprobarlo.

Pues, en efecto tenías razón, el problema era de lo más elemental: En lugar de escribir

miRuta=Application.CurrentProject.Path & "\escritos\"

puse

miRuta=Application.CurrentProject.Path & " \escritos\"

es decir, que dejé un espacio entre las comillas y la contrabarra, con lo cual, access, el pobre, no encontraba el archivo en cuestión. Una vez arreglado, va como una seda. Del mismo modo, para las imágenes, el código que aparece en el link de neckkito, adaptándolo un poco a mis necesidades funciona de maravilla.

Muchísimas gracias a todos. Ya doy por finalizada la pregunta y os agradezco de nuevo vuestra atención, aunque voy a tener que abrir una nueva cuestión, ya que ando muy perdido.

Gracias de nuevo.

Bueno, pues eso, muchas gracias. No me he dado cuenta de que podía comentar aquí lo que os decía antes (eso de ser novato, incluso en el foro...)

Gracias otra vez.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas