Resumen Diario de Facturas cobradas
Dante, ¿Por qué no me funciona el archivo (Resumen) con la macro que me hiciste si lo coloco en un servidor?
1 Respuesta
¿Ya compartiste el libro?
Revisa el siguiente enlace
¿Qué error te envía?
¿En qué línea de la macro se detiene?
La macro no da ningún error, corre normal pero cuando doy click a la ventanita que siempre presenta luego de presionar el botón (resumen), quedan todas las celdas en blanco. Tengo otra carpeta con el mismo nombre (carpeta de factura) en el servidor idéntica a la que esta en la maquina y coloque el archivo dentro de la carpeta para correrlo y al hacerlo no salio información, sin embargo, si lo corro en la maquina sale bien.
El enlace no me funciona porque no deseo compartir ese archivo, más bien lo voy a proteger dentro de la carpeta para que no puedan verlo. El objetivo es monitorear a la persona que recibe el dinero durante el día y para eso deseo sacar el resumen del servidor en lugar de la maquina, puesto que cada ves que imprime, la macro que tiene la factura me guarda una copia en el servidor además de la maquina.
La macro lee los archivos que están en la misma carpeta donde se encuentra el archivo con la macro.
¿Tienes los archivo en el servidor?
Asi es. Yo tengo una carpeta con el mismo nombre, con los mismos archivos y el archivo (resumen) dentro de la carpeta pero no funsiona en el servidor.
Hice otra prueba, entré a la maquina donde esta la carpeta desde otra maquina y tampoco me extrae la informacion.
MG
¿No funciona la macro o ninguna macro?
Realiza una pequeña prueba
Pon una macro simple para ver qué es lo que hace, por ejemplo:
Sub ResumenDiario() MsgBox "Estoy ejecutando la macro del archivo que está en el servidor" End Sub
Después de esa prueba puedes poner esto:
Sub ResumenDiario() Set l1 = ThisWorkbook Set h1 = l1.Sheets("Hoja1") ruta = l1.Path MsgBox ruta End Sub
Revisa que el mensaje de la ruta sea la ruta correcta del servidor
Solo estamos probando el archivo al cual me le pusiste la macro(resumen) el cual esta en una carpeta en el servidor y que todo el personal la puede ver y abrir desde su maquina con un enlace domestico que hice a través de la red. El archivo me hace creer que esta buscando la información dentro de la carpeta, pero termina más rápido de lo normal y no extrae nada. Por lo general no corro macros ahí solo direcciono archivos desde otras maquinas hacia el servidor. Esta es la primera ves que trato de correr una macro aquí.
Deseas que le quite la macro que le pusiste al archivo (resumen) y ponga lo que me enviaste para hacer prueba.?
Buenos días dante,
Hice las pruebas que me pediste. En la primera me sale la ventanita con el mensaje que escribiste dentro. Y en la segunda prueba me sale la dirección a la cual me meto para llegar a la carpeta de factura para correr el archivo ¨´resumen¨´. Pero no extrae información.
Realiza esta prueba, te debe mostrar los archivos que tengas en esa carpeta
Sub ResumenDiario() 'Por.Dante Amor Application.ScreenUpdating = False Set l1 = ThisWorkbook Set h1 = l1.Sheets("Hoja1") ruta = l1.Path ChDir ruta archi = Dir("*.xls*") Do While archi <> "" MsgBox archi archi = Dir() Loop End Sub
veo Algo peculiar en el archivo, es cuando lo corro en la maquina directamente me presesnta la ventanita con la palabra (aceptar), pero cuando lo corro desde otra maquina, me escribe el mensaje que pusiste la final de la macro (Resumen diario sin terminar)
Sabes ejecutar la macro en "Depuración", entra a la macro del servidor y presiona F8, verás como la macro empieza a ejecutarse, deberás llegar a la parte dónde se abre el primer archivo, sigue ejecutando la macro y dime qué es lo que hace.
Estube presionando (F8) hasta que llego a :existe = False, entonces me abrio un archivo con el nombre (false).
Segui presionando y cuando llega a la palabra (Next), se devuelve a: if h1.cells (i "B") = 12.sheets(".")
Los archivos que abre deben tener una hoja llamada . (un punto), así es como me enviaste los ejemplos, entonces revisa que la hoja se llame "."
También revisa que la fecha 01/09/13 esté en formato fecha
Sigue probando con F8.
Si el problema es la hoja "." y con eso se resuelve, no olvides valorar.
Acabo de realizar otro ejercicio. Me fui a otra maquina y desde ahi entre a mi maquina para correr el archivo con los ejemplos que te envie y no funsiono tampoco
Como sabemos las fecha de los ejemplos que te envie estan bien, sin embargo no extrajo nada el resumen
Permíteme recordarte que si lo corre en la misma maquina donde esta el resumen, funciona bien, el problema esta cuando me voy a otra maquina para ejecutarlo desde desde esa maquina.
Mi máquina es otra máquina diferente a la tuya, entonces sí funciona en otras máquinas.
Prueba con otro archivo, sigue con el F8 para que veas por qué, si abre el archivo, pero no entra a la hoja
Cuando llegues a esta línea
If existe Then
Acerca el cursor del mouse a la palabra existe y te va a aparecer el valor que en ese momento contiene la variable existe, dime qué valor te pone
lo que intento decirte es que que trates de correrlo en tu maquina conectado desde otra maquina. otra maquina enlazada a la tuya.
Y el archivo que me esta abriendo con el nombre (falso) no tiene relación con las fechas que estoy utilizando para la extracción
Entonces, la macro sí se está ejecutando, la macro si abre los archivo, lo que debes hacer es poner archivos que sí tengan relación.
Nuevamente, revisa tus archivos, revisa que tenga la hoja "." y que tengan la fecha que quieres llevar a la hoja resumen.
No tengo máquinas para las pruebas.
Como te explique más arriba, si corro la macro con los archivos que te envíe de ejemplos que tienen tanto la fecha correcta así como el punto(.) En (Hoja) en mi maquina, trabaja bien, pero cuando me voy a otra maquina para entrar a la mía y abro el archivo para correr la macro, esta no hace la extracción desde la otra maquina.
Lo que indica es que no se puede correr la macro desde otra maquina sino que hay que hacerlo directamente en la maquina donde se coloque. eso es lo que estoy viendo
Ya hice una prueba, creé un servidor en mi máquina, compartí el archivo y lo ejecuté y sí funciona bien.
Ahora No entiendo qué necesitas.
Quieres qué la macro que estás ejecutando en el servidor abra los archivo que están en el servidor o que abra los archivos que están en tu PC?
Pregunto. es posible colocar el archivo (resumen) en mi maquina y ponerle una direccion (\\Cl-crv-01\recursos\shaday\carpeta de factura) la macro para que valla al lugar donde esta la carpeta(carpeta de factura) y busque la informacion?
Quieres qué la macro que estás ejecutando en el servidor abra los archivo que están en el servidor o que abra los archivos que están en tu PC?"
No entiendo lo que pusiste: "es posible colocar el archivo (resumen) en mi maquina y ponerle una direccion (\\Cl-crv-01\recursos\shaday\carpeta de factura) la macro para que valla al lugar donde esta la carpeta(carpeta de factura) y busque la informacion?"
Puedes poner la información real y completa para entender lo que quieres.
¿Y entonces?
¿Ya revisaste lo que te pedí? Archivos, hojas, fechas, la fecha tiene que estar en la celda N5
Como te dije a mi sí me funciona.
De hecho, como podrás ver, la macro sí se está ejecutando, está abriendo los archivos "xls", si tienen la hoja "." busca la fecha
Es sencillo, utiliza solamente un archivo con los datos que son correctos
Estoy utilizando los ejemplos que me enviaste, los cuales me funcionan cuando lo hago directamente en mi maquina, lo cual significa que estoy usando información usada por ti y cuya información estoy tratando de ver desde otra maquina y no puedo
Antes de ejecutar la macro, quita esta línea de la macro
Application.ScreenUpdating = False
Eso es para ver los cambios en la hoja de manera inmediata. No afecta a la macro.
Vamos desde el principio otra vez, nos quedamos que abría el primer archivo y la variable existe decía verdadero.
Recuerda que tienes que poner la fecha que quieres sumar en la columna "B" de la hoja donde tienes la macro, del libro "Resumen", a partir de la fila 4.
También recuerda que en las hoja "." en la celda "N5" la fecha debe coincidir con la fecha del libro resumen.
Sigue presionando F8, como existe es verdadero, entonces la siguiente instrucción que ejecuta la macro es esta:
For i = 4 To h1.Range("B" & Rows.Count).End(xlUp).Row
Si en la hoja del libro resumen tienes fechas entonces debe pasar a la siguiente línea de la macro:
If h1.Cells(i, "B") = l2.Sheets(".").[N5] Then
Si las fechas son iguales, y deben ser iguales, porque en los comentarios anteriores te puse que deben ser iguales, entonces debe pasar a las siguientes 2 líneas:
h1.Cells(i, "C") = h1.Cells(i, "C") + 1
h1.Cells(i, "D") = h1.Cells(i, "D") + l2.Sheets(".").[N9]
Si no pasa a las siguientes 2 líneas entonces revisa las fechas de tus archivos para que sean iguales.
Revisa todo esto y me comentas.
Buen día Dante,
Hice una prueba como me pediste.
Le quite el texto y le di (F8) al llegar a la palabra (existe=falso) me detuve sobre la palabra y me abrió un archivo con el nombre(falso) y el valor que me muestra es(existe=vacío), cuando llego a la palabra (exit for) entonces me cambia el valor a (existe=verdadero). Continuo dando F8 y cuando llega a (next) se devuelve al texto
If h1. cells(i, "B") = 12.sheets(".") . (N5) then
Dime tu opinión de este mensaje que vi el link que me enviaste
"Nota Debe utilizar una carpeta de red compartida, no un servidor web." porque yo estoy tratando de correrlo en un servidor.
Entiendo que la macro no ha dejado de ejecutarse. El problema esta cuando usas dos maquinas para ejecutarla, debido a que no encuentra los archivos. Es como te he estado explicando. Si corres el archivo en la misma maquina donde lo colocaste te hace la extracción, pero cuando te vas a otra maquina y desde allí buscas el mismo archivo y lo corre, no extrae nada. Por eso fue que te pedí que hicieras el ejercicio con dos maquinas. Entonces no entiendo como puede estar el problema en los archivos .
Por eso fue que pregunte anteriormente si se le podía poner una dirección a la macro para que buscara la carpeta donde debe leer los archivos
No entiendo por qué estás utilizando el archivo "falso", los archivos que me enviaste se llaman: A1153-12, B112-12, etc
La macro sí abre el archivo, cuando lo estás ejecutando con F8, ¿puedes ver si abre el archivo?
No estoy utilizando archivo(falso). Cuando llego al texto (existe=falso) automáticamente me aparece un archivo en la barra inferior con el nombre por fuera(falso) y por dentro tiene otro nombre y otra fecha
Tengo los mismo archivos que te envíe y cuando ejecuto la macro con F8 desde mi maquina me habré el primer archivo A1153-12, pero cuando me voy a otra maquina y la ejecuto me habré otro archivo con otra fecha distinta
Repito, estoy haciendo las pruebas con los mismos archivos que utilizamos de ejemplo. El problema esta en la ejecucion de la macro desde otra maquina.
Pero los mismos archivos deben estar en la carpeta del servidor, deben estar en la misma carpeta donde pusiste el archivo con la macro.
Servidor
Carpeta xyz
Archivo con la macro
Archivos con datos
PC
Carpeta maximo
Archivo con la macro
Archivos con datos
¿Me explico?, tienes que tener la replica de archivos con datos en el servidor.
Estoy bastante claro en eso y así están:
PC
C
DOCUMENTANDSETTING
ADMINISTRADOR
ESCRITORIO
CARPETA DE FACTURA
ARCHIVO CON MACRO
ARCHIVOS CON DATOS
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
SERVIDOR
ORIGEN
SHADAY
CARPETA DE FACTURA
ARCHIVO CON MACRO
ARCHIVOS CON DATOS
Parece que no logro explicar bien el problema que esta ocurriendo cuando entro a la carpeta (carpeta de factura) del servidor desde mi maquina para ejecutar la macro la cual hace creer que se esta ejecutando pero no extrae nada porque termina más rápido la búsqueda que cuando se hace directamente en mi PC.
Tu mismo me lo dijiste:
"Estube presionando (F8) hasta que llego a :existe = False, entonces me abrio un archivo con el nombre (false)."
Yo no sé que hace ahí un archivo llamado "false", cuando los archivos tiene este nombre: "A1153-12"
La macro funciona en el servidor, tu archivo no tiene la hoja correcta o la información correcta dentro de la hoja, pero no puedo saberlo, yo hice la prueba con el archivo "A1153-12" y funciona.
Quizás te esta funcionando porque creaste un servidor dentro de tu misma maquina y por ende no estas saliendo de tu maquina, contrario a mi que estoy utilizando dos maquinas en lugar de una.
Y estoy usando el mismo archivo que usaste.
SAludos,
MG
Acabo de hacer una prueba directamente en mi maquina, si lo corro en el escritorio o en el disco "C" hace la extracción, pero cuando lo corro en la partición del disco "D" no funciona. Aparentemente el problema no es solo del servidor sino que tampoco corre en otro drive que no sea el "C" dentro de la misma maquina.
Prueba con esto.
ChDrive Left(ruta, 1)
macro completa
Sub ResumenDiario() 'Por.Dante Amor Application.ScreenUpdating = False Set l1 = ThisWorkbook Set h1 = l1.Sheets("Hoja1") u = h1.Range("B" & Rows.Count).End(xlUp).Row + 1 h1.Range("C4:D" & u).ClearContents ruta = l1.Path ChDrive Left(ruta, 1) ChDir ruta archi = Dir("*.xls*") Do While archi <> "" n = archi m = l1.Name If archi <> l1.Name Then Set l2 = Workbooks.Open(archi) existe = False For Each h In l2.Sheets If h.Name = "." Then existe = True Exit For End If Next If existe Then For i = 4 To h1.Range("B" & Rows.Count).End(xlUp).Row If h1.Cells(i, "B") = l2.Sheets(".").[N5] Then h1.Cells(i, "C") = h1.Cells(i, "C") + 1 h1.Cells(i, "D") = h1.Cells(i, "D") + l2.Sheets(".").[N9] Exit For End If Next End If l2.Close False End If archi = Dir() Loop MsgBox "Resumen diario terminado" End Sub
Estamos progresando,
con lo que adicionaste a la macro ahora me funciona en el drive "D" dentro de la misma, y cambio el error, ahora cuando lo corro desde otra maquina, me muestra la ventanita de "Visual Basic" y cuando selecciono la opcion "Depurar" para ver donde esta el error me señala ChDrive Left(ruta, 1).
¿Y qué tienes en ese momento en la variable ruta?
No entiendo cómo es que la macro funciona, abre el archivo y no encuentra la hoja ".", ¿puedes hacer una prueba de cualquier otra cosa con el archivo abierto?
Por ejemplo, cambia la macro del archivo que tienes en la red por esta macro y la ejecutas. Dime el resultado
Sub ResumenDiario() 'Por.Dante Amor Application.ScreenUpdating = False Set l1 = ThisWorkbook Set h1 = l1.Sheets("Hoja1") u = h1.Range("B" & Rows.Count).End(xlUp).Row + 1 h1.Range("C4:D" & u).ClearContents ruta = l1.Path ChDir ruta archi = Dir("*.xls*") Do While archi <> "" n = archi m = l1.Name If archi <> l1.Name Then Set l2 = Workbooks.Open(archi) Set h2 = l2.ActiveSheet MsgBox "el dato del archivo de la red, de la celda N9 es: " & h2.[N9] End If archi = Dir() Loop 'MsgBox "Resumen diario terminado" End Sub
A través de la red no llega a abrir archivo solo muestra el "error5" en la ventana de visual basic. A mi entender es como si encontrara la ruta para abrir los archivos.
Hice prueba con lo ultimo que me enviaste y no extrae nada ni habré archivo.
Para aclarar, en el drive"C" de mi maquina, es decir directamente en la maquina, a través de la red no lo hace.
Pero si ya me habías dicho que si te abre los archivos, incluso me dijiste que te abría el famoso archivo "falso"
Claro que si con la primera macro que me enviaste sin modificar. Pero con la ultima que me acabas de enviar, la cual esta modificada ni habré ni extrae archivos desde otra maquina. Recuerda que habría un archivo con el nombre falso con la primera macro que me enviaste a la cual le agregaste luego: ChDrive Left(ruta, 1). Si te fijas, la ultima difiere de la primera.
Entiendo que lo hace falta es redefinir bien la ruta que agregaste a la penúltima que enviaste la cual funciona en cualquier drive de la maquina, diferente a las otras que solo funcionan en el drive "C"
Dime si con esto puedes abrir un archivo de red
Sub ResumenDiario() 'Por.Dante Amor Application.ScreenUpdating = False Set l1 = ThisWorkbook Set h1 = l1.Sheets("Hoja1") u = h1.Range("B" & Rows.Count).End(xlUp).Row + 1 h1.Range("C4:D" & u).ClearContents ruta = l1.Path 'ChDir ruta archi = Dir(ruta & "\*.xls*") Do While archi <> "" n = archi m = l1.Name If archi <> l1.Name Then Set l2 = Workbooks.Open(archi) Set h2 = l2.ActiveSheet MsgBox "el dato del archivo de la red, de la celda N9 es: " & h2.[N9] End If archi = Dir() Loop 'MsgBox "Resumen diario terminado" End Sub
también prueba con esta para ver si puedes abrir el archivo del servidor
Sub ResumenDiario() 'Por.Dante Amor Application.ScreenUpdating = False Set l1 = ThisWorkbook Set h1 = l1.Sheets("Hoja1") u = h1.Range("B" & Rows.Count).End(xlUp).Row + 1 h1.Range("C4:D" & u).ClearContents ruta = l1.Path 'ChDir ruta archi = Dir(ruta & "\*.xls*") Do While archi <> "" n = archi m = l1.Name If archi <> l1.Name Then Set l2 = Workbooks.Open(ruta & "\" & archi) Set h2 = l2.ActiveSheet MsgBox "el dato del archivo de la red, de la celda N9 es: " & h2.[N9] End If archi = Dir() Loop 'MsgBox "Resumen diario terminado" End Sub
Buen dia DAnte
Ya esta abriendo los archivos uno a uno y va diciendo el valor de cada uno. Ahora solo falta que coloque la información en las columnas correspondientes debido a que no la esta colocando
Prove el ultimo el cual tiene el mensaje:
Set l2 = Workbooks.Open(ruta & "\" & archi)
Voy a provar el primero ahora. No lo habia visto.
El primero da un error de ejecución. Dice que no puede encontrar el archivo A1153-1. Al parecer el segundo es el que esta bien.
DAnte agregue lo siguiente a la macro y ya funciona:
existe = False For Each h In l2.Sheets If h.Name = "." Then existe = True Exit For End If Next If existe Then For i = 4 To h1.Range("B" & Rows.Count).End(xlUp).Row If h1.Cells(i, "B") = l2.Sheets(".").[N5] Then h1.Cells(i, "C") = h1.Cells(i, "C") + 1 h1.Cells(i, "D") = h1.Cells(i, "D") + l2.Sheets(".").[N9] Exit For End If Next End If l2.Close False End If archi = Dir() Loop MsgBox "Resumen diario terminado"End Sub
la ultima que enviaste hizo el trabajo, solo le agregue la otra parte de las primeras macros que me enviaste.
Sub ResumenDiario() 'Por.Dante Amor Application.ScreenUpdating = False Set l1 = ThisWorkbook Set h1 = l1.Sheets("Hoja1") u = h1.Range("B" & Rows.Count).End(xlUp).Row + 1 h1.Range("C4:D" & u).ClearContents ruta = l1.Path 'ChDir ruta archi = Dir(ruta & "\*.xls*") Do While archi <> "" n = archi m = l1.Name If archi <> l1.Name Then Set l2 = Workbooks.Open(ruta & "\" & archi) Set h2 = l2.ActiveSheet existe = False For Each h In l2.Sheets If h.Name = "." Then existe = True Exit For End If Next If existe Then For i = 4 To h1.Range("B" & Rows.Count).End(xlUp).Row If h1.Cells(i, "B") = l2.Sheets(".").[N5] Then h1.Cells(i, "C") = h1.Cells(i, "C") + 1 h1.Cells(i, "D") = h1.Cells(i, "D") + l2.Sheets(".").[N9] Exit For End If Next End If l2.Close False End If archi = Dir() Loop MsgBox "Resumen diario terminado" End Sub
- Compartir respuesta