No puedo abrir un archivo pdf desde access

Tengo un problema que no puedo solucionar
Intentaré explicarme lo mejor posible.
Tengo un formulario donde tengo un campo de texto que guardo las direcciones de los archivos PDF que son facturas que he creado, cuando quiero ver alguna factura voy a la ruta que quiero y pulso dos veces entonces tengo una rutina que me los habré.
Hasta hay todo ba bien .
Cuando miro las ultimas fras. Me se habren, pero cuando quiero ver unos meses atrás
me se habré en un directorio que no es el correcto, no lo entiendo. Os envío el código
muchas gracias
Private Sub rutafa_DblClick(Cancel As Integer)
Dim anyo, mes, direc As String
varinici
anyo = CStr(Year(Me!fechafactura))
mes = Format(Me!fechafactura, "mmmm")
If Trim(Nz(Me!rutafa, "")) = "" Then
   MsgBox "Documento no encontrado", vbCritical
 Else
 direc = varini & "\empresa\repara-espinosa\" & anyo & "\" & mes & "\facturas\"
 MsgBox direc
 ChDir (direc)
MsgBox Me!rutafa
Call Shell("explorer.exe " & " " & Chr(34) & Me!rutafa & Chr(34), vbNormalFocus)
End If
End Sub

1 Respuesta

Respuesta
1
Lo primero, aunque no te puedo asegurar que el error venga por ahí (aunque lo sospecho), la declaración de variable que haces del año, mes y direc es incorrecta. Te explico. Declarando con separación de comas, sin identificar para cada variable su tipo, estás declarando el año y mes como Variant y sólo direct como String.
Mejor has la declaración así,
Dim anyo As String, mes As String, direct As String
Verifica si está leyendo la fecha correctamente como dd/mm/yyyy, ya que a veces las lee como mm/dd/yyyy.
No sé si varinici es una variable tipo Global, pero en todo caso en tu línea de código
 direc = varini & "\empresa\repara-espinosa\" & anyo & "\" & mes & "\facturas\"
Tienes escrito varini ; si haces referencia a varinici está mal escrita.
Por último para abrir archivos prefiero utilizar el comando siguiente
Application. FollowHyperlink NOMARCHIVO
Donde nombre archivo es la ruta completa del archivo, sería como
NOMARCHIVO=direc & me.rutafa
Hola
Tengo un problema que no puedo solucionar
Intentaré explicarme lo mejor posible.
Tengo un formulario donde tengo un campo de texto que guardo las direcciones de los archivos PDF que son facturas que he creado, cuando quiero ver alguna factura voy a la ruta que quiero y pulso dos veces entonces tengo una rutina que me los habré.
Hasta hay todo ba bien .
Cuando miro las ultimas fras. Me se habren, pero cuando quiero ver unos meses atrás
me se habré en un directorio que no es el correcto, no lo entiendo. Os envío el código
muchas gracias
Private Sub rutafa_DblClick(Cancel As Integer)
Dim anyo, mes, direc As String
varinici
anyo = CStr(Year(Me!fechafactura))
mes = Format(Me!fechafactura, "mmmm")
If Trim(Nz(Me!rutafa, "")) = "" Then
   MsgBox "Documento no encontrado", vbCritical
 Else
 direc = varini & "\empresa\repara-espinosa\" & anyo & "\" & mes & "\facturas\"
 MsgBox direc
 ChDir (direc)
MsgBox Me!rutafa
Call Shell("explorer.exe " & " " & Chr(34) & Me!rutafa & Chr(34), vbNormalFocus)
End If
End Sub
Hola
Muchas gracias por tu respuesta
En cuanto a la variables tienes razón
Pero lo curioso es que en unas rutas me las lee bien y en otras que son más antiguas me dirige a un directorio equivocado, en cuanto a la forma
Application.FollowHyperlink NOMARCHIVO
esta fué la primera que utilice y me ocurria igual , bueno cuando miraba unas de las facturas que hacia mas tiempo me salia un error nº 490 donde decia que no encontraba la ruta y la ruta estaba bien .
No lo entiendo
Espero tu opinión, gracias
Franespi
El error 490 se refiere al mismo problema que tienes ahora y sale cuando la ruta que has colocado no es válida. Así que el problema lo tienes en la forma que defines la ruta.
Cuando te da el error y te da la opción de depurar, ¿en qué línea del código te da el error? ¿En el Chdir o en el Shell?
Entiendo que la tu ruta se compone de:
Varinici: que debe tener la letra del disco o la IP si estás en una red y debe ser algo como C: o \\192.168.1.22\
¿Qué contiene la variable varinici en tu caso?
A continuación colocas \empresa\repara-espinoza\ que es una parte fija de las carpetas
después la variable año que es un número que convierte en texto
¿Este número es siempre de 2 ó 4 cifras?
Sigues con una barra y el mes en letras, esta variable no es necesario convertirla a texto ya que así sale del format. Verifícalo.
Sigues con la carpeta facturas entre dos barras
supongo que la línea con el MsgBox la colocaste para ver la dirección que arma. ¿Hasta ahí siempre compone bien la ruta? ¿Con fechas nuevas y viejas?. Y lo mismo supongo para la línea del MsgBox con rutafa. ¿Has podido ver si siempre está bien escrito el nombre del archivo?
Si sabes hacerlo, ejecuta el código línea por línea y en la ventana de inspección mira el valor que te van tomando las variables, así podrás ver cual es la parte de la ruta que no queda bien escrita. Por supuesto comprueba que la ruta existe en tu ordenador.
Sigo pendiente por si necesitas más ayuda, te repito que el problema está en la generación de la ruta, posiblemente con las variables que utilizas.
Hola
Muchas gracias
He corregido algunas cosas que me has dicho y que he encontrado mal
ahora va mejor, pero aun tengo el mismo problema.
Es curioso que cuando la ruta es de otro año es cuando se sitúa en un directorio erróneo y siempre es el mismo
"franespi\mis documentos"
Es un formulario que cada vez que pasa de una fra a otra sale la ruta en un campo de la tabla "facturas" que se llama "rutafa" que es donde guarda la ruta del fichero y al situarme encima de ese campo y hacer doble click hace el evento que te he enviado.
Lo que no entiendo es que si primero ago un fiiltro para mirar si esta el archivo, ¿cómo es que siempre me lo da como que esta y después no lo habré?.
Private Sub rutafa_DblClick(Cancel As Integer)
Dim anyo As String
Dim mes As String
Dim direc As String
Dim nump As String
varinici
If Trim(Nz(Me!rutafa, "")) = "" Then
   MsgBox "Documento no encontrado", vbCritical
 Else
 nump = Right(Me!rutafa, 11)
 direc = Left(Me!rutafa, InStr(Me!rutafa, nump) - 1)
 MsgBox direc
 ChDir (direc)
MsgBox Me!rutafa
Call Shell("explorer.exe " & " " & Chr(34) & Me!rutafa & Chr(34), vbNormalFocus)
End If
End Sub
¿Me puedes poner un ejemplo de los valores que tienes en rutafa? Uno de cuando te funciona y otro de cuando no te funciona.
Me está dando la impresión de que tal vez los valores que tienes cargados en la tabla que están asociados al campo rutafa, pueden tener algún defecto.
Por cierto, en este código veo que no estás utilizando ninguna de las variables que tienes declaradas. Y no sé que información tiene la variable varinici.
Valores de las variables
me!rutafa=
esta me funciona
c:\My Dropbox\empresa\repara-espinosa\2011\FEBRERO\facturas\ 2011003.pdf
me!rutafa=
esta no me funciona
c:\My Dropbox\empresa\repara-espinosa\2010\DICIEMBRE\facturas\ 2010036.pdf
Si el directorio existe, hay dos opciones:
- Que la carpeta de los otros años distintos al 2011, tengan un espacio en el nombre o en el del mes.
- Que haya rutas que están en el campo rutafa de la tabla no esté bien escrita
De tu último código hay líneas que no entiendo su función, pareciera que están de sobra.
Private Sub rutafa_DblClick(Cancel As Integer)
Dim anyo As String Declaras esta variable y luego no la usas
Dim mes As String Declaras esta variable y luego no la usas
Dim direc As String
Dim nump As String
varinici
If Trim(Nz(Me!rutafa, "")) = "" Then
   MsgBox "Documento no encontrado", vbCritical
 Else
 nump = Right(Me!rutafa, 11)
 direc = Left(Me!rutafa, InStr(Me!rutafa, nump) - 1)
 MsgBox direc
 ChDir (direc)
MsgBox Me!rutafa
Call Shell("explorer.exe " & " " & Chr(34) & Me!rutafa & Chr(34), vbNormalFocus) En esta línea si ya has cambiado al directorio en lugar de Me!rutafa debes utilizar la variable nump
End If
End Sub
Como te dije, revisa los valores guardados en los registros del campo rutafa de la tabla y los nombres de las carpetas, en busca de espacios en blanco al principio o al final de los nombres.
De resto el código está bien
Excelente, ahora si !
He cambiado me! Ruta por nump y perfecto
Así lo he dejado
Private Sub rutafa_DblClick(Cancel As Integer)
Dim direc As String
Dim nump As String
If Trim(Nz(Me!rutafa, "")) = "" Then
   MsgBox "Documento no encontrado", vbCritical
 Else
 nump = Right(Me!rutafa, 11)
 direc = Left(Me!rutafa, InStr(Me!rutafa, nump) - 1)
  ChDir (direc)
Call Shell("explorer.exe " & " " & Chr(34) & nump & Chr(34), vbNormalFocus)
End If
End Sub
Un saludo
Gracias por tu esfuerzo y rapidez
Me alegro, en cuanto puedas valoras mi ayuda,
saludos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas