|
Responder ![]() |
Autor | |
carlosb ![]() Nuevo ![]() ![]() Unido: 11/Octubre/2018 Localización: Lima Estado: Sin conexión Puntos: 5 |
![]() Enviado: 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. 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 |
|
karu
|
|
![]() |
|
lbauluz ![]() Administrador ![]() ![]() Unido: 29/Marzo/2005 Localización: ROC, NY Estado: Sin conexión Puntos: 3256 |
![]() |
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
|
|
Those are my principles, and if you don't like them... well, I have others. Groucho Marx
|
|
![]() |
|
carlosb ![]() Nuevo ![]() ![]() Unido: 11/Octubre/2018 Localización: Lima Estado: Sin conexión Puntos: 5 |
![]() |
Saludos Luis. Gracias por responder.
![]() 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. Editado por carlosb - 12/Octubre/2018 a las 19:08 |
|
![]() |
|
xavi ![]() Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador ![]() ![]() Terrassa-BCN Unido: 10/Mayo/2005 Localización: Catalunya |||| Estado: Sin conexión Puntos: 11721 |
![]() |
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
|
|
![]() |
|
carlosb ![]() Nuevo ![]() ![]() Unido: 11/Octubre/2018 Localización: Lima Estado: Sin conexión Puntos: 5 |
![]() |
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. Editado por carlosb - 14/Octubre/2018 a las 18:47 |
|
![]() |
|
xavi ![]() Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador ![]() ![]() Terrassa-BCN Unido: 10/Mayo/2005 Localización: Catalunya |||| Estado: Sin conexión Puntos: 11721 |
![]() |
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
|
|
![]() |
Responder ![]() |
|
Tweet
|
Ir al foro | Permisos de foro ![]() Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |