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

Respuesta
1

¿Ya compartiste el libro?

Revisa el siguiente enlace

http://office.microsoft.com/es-mx/excel-help/usar-un-libro-compartido-para-colaborar-HP010342985.aspx 

¿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

Yo se compartir los archivos y carpetas.

¿Crees qué pueda funcionar si comparto el archivo(resumen)?

¿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.?

Si

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.

la direccion que muestra es: \\Cl-crv-01\recursos\shaday

Es por donde llego a la carpeta

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

Te envío por correo el error

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)

Me refiero a la macro que funsiona dentro de la maquina, no a lo ultimo que enviaste

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(".")

El archivo que me abrió con el nombre de (false) tiene fecha de 01/09/13

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

Todas las facturas tienen el nombre(.)En hoja, por lo que no creo que el problema este ahí.

Como sabemos las fecha de los ejemplos que te envie estan bien, sin embargo no extrajo nada el resumen

Si tienes la facilidad, te pido que hagas una prueba desde otra maquina para que veas que pasa.

El problema no es solo el servidor. sino que no puedes ejecutar la macro desde otra maquina

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

Cuando coloco el cursol en (If existe then, sale el mensaje(existe=verdadero

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.

Que están en el servidor

Comparteste el archivo o la carpeta?

¿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

Estoy usando los 5 archivos de ejemplo que te envíe que tienen la información que me pides

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

Otra cosa, la macro da el mensaje en la parte superior, al lado del nombre (interrupción)

La macro sí se está ejecutando, el problema son los archivos

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

Lo que significa que no esta mirando la fecha que le puse para hacer la extracción

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). 

Te envíe por correo una imagen de lo que muestra ahora.

SAludos,

MG

¿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.

Solo funciona si lo corro directamente en el drive "C" pedro no funciona en el "D"

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"

Te respondí el Email. Donde preguntas cual línea se puso amarilla la cual es :ChDrive Left(ruta, 1)

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

Y que cierre los archivos como hace con la primera macro

¿Con cuál de los 2 ejemplos que te puse abre los archivos?

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.

Solo hace falta que coloque las informaciones en las celdas correspondientes del archivo

Ya me confundí.

Puedes poner la macro que funciona.

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

Ufff

No olvides valorar la respuesta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas