Imprimir página | Cerrar ventana

Problema con Filecopy y una unidad de red

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=84005
Fecha de impresión: 23/Septiembre/2019 a las 00:34


Tema: Problema con Filecopy y una unidad de red
Publicado por: carlosb
Asunto: Problema con Filecopy y una unidad de red
Fecha de publicación: 11/Octubre/2018 a las 18:26
Buen día, soy nuevo en este foro. He tenido un problema con un código desde hace un tiempo y en el afán de averiguar la causa y solución he investigado por muchas paginas. Especialmente en este foro he encontrado respuestas a usuarios con problemas parecidos al mio y la buena disposición de los miembros a ayudar. 
Mi problema es en este codigo:
Sub EjecutaCopy1()

 Dim Reporte2 As String

Dim NewReporte2 As String

Dim RutaMaster1, RutaRep1 As String

Dim RptCopy1 As String

Dim Inicio, Fin As String

On Error GoTo Err_Handler1

Inicio = Date

RutaMaster1 = gProject.Path & "\REP\REPORTES\REP_COURIER_1HR_Real\"

RutaRep1 = "x:\"

RptCopy1 = " " & Format(Inicio, "dd") & " " & Format(Inicio, "mmmm") & " " & Format(Inicio, "yyyy") & ".xlsx"

Reporte2 = "REP_COURIER_1HR_Real" & RptCopy1

If Hour(Now) > 0 Then

    NewReporte2 = RutaRep1 & Reporte2

Else

    NewReporte2 = RutaRep1 & Mid(Reporte2, 1, Len(Reporte1) - 5) & " " & Format(Date - 1, "dd") & " " & Format(Date - 1, "mmmm") & " " & Format(Date - 1, "yyyy") & ".xlsx"

End If

FileCopy RutaMaster1 & Reporte2, NewReporte2 'copia la PLANTILLA ...\REP\MASTER\Rep_Celda_1E_15Min.xls a ...\REP\REPORTES\Rep_Energia\Rep_Celda_1E_15Min dd mmmm yyyy

Err_Handler1:

End Sub

Este código lo usamos para copiar-pegar un reporte excel (previamente creado) a una unidad de red x:\ (señalada arriba), cuando ejecuto el script no manda ningún error, pero al fijarme si ha pegado no encuentro nada en la unidad X: . He cambiado la unidad destino por la unidad C: y efectivamente ahi si pega. Solo tengo ese problema cuando intento pegar en cualquier unidad de red.ConfusedConfused

No se cual es el problema, los permisos están gestionados bien en la unidad de red. Agradecería su ayuda o dirección. Y de antemano gracias por su tiempo SmileSmileSmileSmile



-------------
karu



Respuestas:
Publicado por: lbauluz
Fecha de publicación: 12/Octubre/2018 a las 05:10
Supongo que como en RptCopy1  tienes espacios, deberías añadir comillas a la cadena, algo así como 

FileCopy  Chr$(34) & RutaMaster1 & Reporte2  Chr$(34) , NewReporte2 

No lo he probado, pero por lo que veo parecelo que falla

Un saludo.

Luis


-------------
Estos son mis principios. Si no le gustan... tengo otros


Publicado por: carlosb
Fecha de publicación: 12/Octubre/2018 a las 19:07
Saludos Luis. Gracias por responder.Smile
 Efectivamente acabo de probar con las comillas, pero sigue sin copiar el archivo a la unidad de red.

 Cuando cambio la ruta a la unidad C:/ , ahí no presenta ningún problema. Necesito que trabaje en la unidad de red.



Publicado por: xavi
Fecha de publicación: 14/Octubre/2018 a las 07:59
Hola,

Algunas cosillas.
No se si falta código  no pero, en caso de producirse cualquier error en el FileCopy tu código no te diria nada  y, de ejecutarlo paso a paso, tampoco detectarías si ha fallado. 
Después de la línea FileCopy pon estas:
ExitProcedure:
  Exit Sub
ErrHandler1:
  MsgBox Err.Number & "-" & Err.Description
  Resume ExitProcedure
End Sub
De esta manera, si ejecutas paso a paso, te puede saltar el error.

Como tonteria (que no creo que tenga nada que ver)

Dim RutaMaster1, RutaRep1 As String

Dim Inicio, Fin As String


Esa forma de declarar implica que tanto RutaMaster1 como Inicio son de tipo Variant. Entiendo que RutaMaster1 es un string pero Inicio debería ser Date

Otra mejora:
Format(inicio, " dd mmmm yyyy") es mucho más sencillo para conseguir la cadena que buscas.

Otra cosita más. Realizas una validación de la hora. Cuando es igual a 0 utilizas este código:
NewReporte2 = RutaRep1 & Mid(Reporte2, 1, Len(Reporte1) - 5) & " " & Format(Date - 1, "dd") & " " & Format(Date - 1, "mmmm") & " " & Format(Date - 1, "yyyy") & ".xlsx"

¿Que es Reporte1? Porque haces un Mid desde el caracter 1 (que es lo mismo que hacer un Left) de la longitud de Reporte 1 (que no se ver) menos 5... Si no tenemos Reporte1 su longitud es 0 y si le restamos 5 se convierte en -5.. lo que nos devolvería un error 5.

No verificas si el archivo destino ya existe. Es una posibilidad de que ya tengas un fichero con ese nombre. ¿Has comprobado como se comporta FileCopy si ya existe el fichero de destino?

Como consejo:
1. Quita el control de errores y ejecuta paso a paso o cambialo como te he pusto al principio para que salte. De entrada yo probaria quitandolo así te aseguras de que salte.
2. En la ejecución paso a paso verifica continuamente el contenido de las variables. También verifica que accedes tanto al fichero origen como la ruta de destino y que no exista previamente un fichero con el mismo nombre.
3. Como alternativa al FileCopy nativo puedes utilizar el CopyFile de File System Object

Un saludo


-------------
Xavi, un minyó de Terrassa

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: carlosb
Fecha de publicación: 14/Octubre/2018 a las 18:46
Gracias Xavi, hare lo que me indicas.
Pero bueno, no se si aporta algo, pero el codigo funciona a la perfeccion cuando cambio el destino al disco C:/.
Solo tengo ese problema cuando el destino es X:/ o cualquier unidad de red. :C.
Pondre la parte de codigo que me recomiendas Xavi, gracias. Te avisare como me fue.


Publicado por: xavi
Fecha de publicación: 14/Octubre/2018 a las 20:31
Si funciona perfectamente con C:\loquesea y no funciona con X:\loquesea, tiene la pinta de problema de permisos. Ya se que dices que lo has comprobado pero nunca se sabe...

Otra opción sería que se ejecutara desde una máquina dónde la unidad X no estuviera mapeada. Entiendo que es una posibilidad remota pero también está ahí.

Como consejo adicional utiliza rutas lógicas de forma que cualquiera pueda ejecutar el código. De esa forma no es necesario que todos los posibles usuarios tengan los mismos mapeos de unidades.

Un saludo



-------------
Xavi, un minyó de Terrassa

http://www.llodax.com" rel="nofollow - Mi web



Imprimir página | Cerrar ventana