Saltar al contenido

Macro para cerrar libro oculto después de un tiempo inactivo


Recommended Posts

publicado
Hace 4 horas, jose lopez contreras dijo:

macro para cerrar un libro abierto pero oculto (Solo se ve el userform) después de un tiempo inactivo, encontré varios en la red pero solo funcionan cuando el libro esta visible. Anexo uno de ellos.

ya me parecía conocido ese código, está basado (precisamente) en cambios de selección de celda(s) de cualquier hoja en el libro, que es lo que hace esta parte de la propuesta que omites (en el módulo de código del ThisWorkbook):

Private Sub Workbook_SheetSelectionChange( _
            ByVal Sh As Object, ByVal Target As Range)
  Permanecer = True
End Sub

luego entonces, al estar oculto tu libro (obviamente) NO es posible (para el usuario) seleccionar nada en él, a menos que encuentres la forma de que tu código haga cambios en tu libro oculto (se entiende ?)

tip: el evento '_change' dispara después el evento '_selectionchange', lo que podría darte una salida a este embrollo (?)

dale una repasada el cuarto mensaje de esta añeja conversación

saludos,
hector.

publicado
En 27/4/2019 at 13:37 , Héctor Miguel dijo:

a menos que encuentres la forma de que tu código haga cambios en tu libro oculto (se entiende ?)

@Héctor Miguel buenos días mira ya leí, leí y leí todo lo que me comentaste y eh realizado muchas pruebas y cambios pero nada me funciona, cambie la instrucción base 

Private Sub Workbook_SheetSelectionChange( _
            ByVal Sh As Object, ByVal Target As Range)
  Permanecer = True
End Sub

' POR ESTA
 
Private Sub Workbook_SheetnChange( _
            ByVal Sh As Object, ByVal Target As Range)
  Permanecer = True
End Sub

Coloque esta instrucción en el Userform principal (menu) y tampoco

Private Sub UserForm_Initialize()
Worksheets("Menu").Select
    Range("A1").Select
End Sub

Private Sub UserForm_Activate()
Worksheets("Menu").Select
    Range("A1").Select
End Sub

Podrás darme un empujoncito por favor. Anexo lo que llevo.

https://mega.nz/#!TMYBQaTZ!EIlXxja2Rug1ZByhS92qhS8Y_2kLlfPBZ24egSsdBz4

publicado
Hace 5 horas, jose lopez contreras dijo:

Anexo lo que llevo

es interesante tu proyecto, pero no creo poder dedicarle el tiempo suficiente para analizarlo...
- 14 hojas (+ sus fórmulas y módulos de código)
- 9 formularios (+ sus controles y códigos)
- 8 módulos de código estándar)
(posiblemente más en la realidad ?)

de seguro alguna instrucción "pasada por alto" (en cualquier lugar) no me deje "ver" sus implicaciones en otras instrucciones (p.ej.)
- en instrucciones como Workbooks.Open mezcladas con ActiveWorkbook, ActiveCell, etc. (en otros procedimientos) puede resultar complicado de rastrear "a cual" libro/hoja/celda pretendes afectar (?)

en resumen, si NO ES el usuario quien va a ingresar datos en las celdas de las hojas en el libro con las macros (?)...

1) cambia de evento en el módulo de código del libro, en lugar de:

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
  Permanecer = True
End Sub

usa este:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
  Permanecer = True
End Sub

2) encuentra la(s) manera(s), forma(s), línea(s), momento(s) en que alguno de tus códigos "haga cambios" en cualquier celda de cualquier hoja del libro con tus procesos, puedes usar una simple instrucción "general" (p.ej.)

op1: OJO: esta instrucción falla si NO hay (al menos) alguna celda con datos en la hoja activa 
cells.find(empty).clear

op2: puedes establecer una hoja y celda fijas para una instrucción (similar a la anterior)
worksheets("hojax").range("z50") = now

el truco es que la instrucción la realice en (alg)un "momento clave", (alg)una línea en (alg)un procedimiento de tu código (se entiende ?)

saludos,
hector.

publicado
En 30/4/2019 at 15:01 , Héctor Miguel dijo:

es interesante tu proyecto, pero no creo poder dedicarle el tiempo suficiente para analizarlo...
- 14 hojas (+ sus fórmulas y módulos de código)
- 9 formularios (+ sus controles y códigos)
- 8 módulos de código estándar)
(posiblemente más en la realidad ?)

de seguro alguna instrucción "pasada por alto" (en cualquier lugar) no me deje "ver" sus implicaciones en otras instrucciones (p.ej.)

Así es Hector, tiene mucho mas, pero realmente todo movimiento en sus formularios, formulas, códigos, módulos y controles al final terminan en el menú principal en el cual coloque en Private Sub UserForm_Initialize() la instrucción que anexo. Toda esta instrucción la ejecuta perfecto, es decir selecciona la hoja menú, escribe en la celda A1 la palabra "Prueba" y deja seleccionada la celda A1,  pero depues de todo esto no se ejecuta la instrucción de cerrar automáticamente. Seguí tus recomendaciones pero sucede lo mismo. Como diría el Chavo del 8 "Me doy". Ahí queda por si alguien se anima a dar una solución. Mil gracias Hector hasta pronto.

Private Sub UserForm_Initialize()
Worksheets("Menu").Select 'selecciona la hoja menu
Range("A1").Value = "Prueba" 'en la celda A1 escribo la palabra Prueba
Range("A1").Select 'finalmente selecciono la celda A1
End Sub

 

publicado
Hace 2 horas, jose lopez contreras dijo:

en Private Sub UserForm_Initialize() ... selecciona la hoja menú, escribe en la celda A1 la palabra "Prueba" y deja seleccionada la celda A1,  pero depues de todo esto no se ejecuta la instrucción de cerrar automáticamente

está bien modificar valores en celdas de cualquier hoja de tu libro al "inicializar" el formulario, la cuestión es que, después de ese "movimiento", transcurrido el "lapso" que establezcas para cada "monitoreo", SI NO SE REALIZA ningún otro cambio (valor o selección de celda), es lógico que se detecte inactividad y el proceso pida cerrarse (?)

publicado
Hace 13 minutos , Héctor Miguel dijo:

está bien modificar valores en celdas de cualquier hoja de tu libro al "inicializar" el formulario, la cuestión es que, después de ese "movimiento", transcurrido el "lapso" que establezcas para cada "monitoreo", SI NO SE REALIZA ningún otro cambio (valor o selección de celda), es lógico que se detecte inactividad y el proceso pida cerrarse (?)

Pues como te comente después del tiempo de inactividad programada transcurrido y sin hacer cambios en ninguna celda, hoja o formulario, el proceso lanza el msg que se cerrara en cierto tiempo, pues hasta ahí llega y nunca se cierra. Espero me hayas entendido.

publicado
Hace 9 horas, jose lopez contreras dijo:

después del tiempo de inactividad programada transcurrido y sin hacer cambios en ninguna celda, hoja o formulario, el proceso lanza el msg que se cerrara en cierto tiempo, pues hasta ahí llega y nunca se cierra

como te comenté anteriormente...

analizar 1,600 líneas de código en tal volumen de objetos (más lo que hayas "rasurado" a tu muestra por considerarlo prescindible), no es tarea de "espérame un ratito"

pudiera haber lineas "perdidas" (supresión de errores, inhabilitado de eventos y alertas, etc.) que harían tardado descubrir cualquier causa del comportamiento que reportas

en el adjunto va una prueba de que sí funcionan los procedimientos ofrecidos (obviamente con muchos menos objetos y no más de 70 líneas de código)

las modificaciones principales son las siguientes:

  • el procedimiento del mensaje inicial comienza ocultando la ventana de excel
  • la visibilidad de excel se restablece en el procedimiento de chequeo (en el caso de cerrar el libro)
  • en el evento '_open' del libro se muestra un formulario (como última instrucción, despues de inicializar la rutina de monitoreo)
  • se cambia el evento Workbook_SheetSelectionChange por el Workbook_SheetChange (como fue sugerido previamente)
  • la constante para el tiempo de reinicio del monitoreo (lapso) va en un minuto (pruebas rápidas, después la ajustas a tu conveniencia)

con respecto del formulario:

  • NO lleva ningún control (no se que necesites hacer en cada uno de los tuyos)
  • para "simular" que TUS CODIGOS (en algún momento) modifiquen celdas en cualquiera de las hojas, se agrega una instrucción para que "paseando" el ratón por la esquina inferior derecha se deposite el tiempo actual en la celda [A1] de una hoja
  • esta acción puede ser "machacante" (según los pases que hagas con el ratón por esa esquina), el MsgBox lo puedes eliminar después y...
  • "aquí es donde..." te toca a ti, establecer que controles y de que formularios realicen esta acción (?)
  • al cerrar el formulario, se debe proveer una salida "similar" a lo que hace el procedimiento de cierre (checarActividad), esto es...
  • restablecer la visibilidad de excel y cerrar el libro (después decides si se guardan o no los cambios)

este orden ES IMPORTANTE, o corres el riesgo de dejar una instancia OCULTA de excel con ese libro "en uso"

si esto sucede, no será fácil localizar esa instancia perdida, hasta que reinicies el equipo (y algunos procesos de recuperación de archivos)

o... que eches mano de alguna "puerta trasera" (como localizar aplicaciones ocultas y terminar su proceso desde otras aplicaciones)

como verás, las modificaciones a los mismos procedimientos sugeridos hace 15 años son mínimas (solo por el formulario y la aplicación oculta)

si cualquier duda (o información adicional)... comentas ?

saludos,
hector.

cerrar inactivo.zip

publicado
Hace 9 horas, Héctor Miguel dijo:

en el adjunto va una prueba de que sí funcionan los procedimientos ofrecidos (obviamente con muchos menos objetos y no más de 70 líneas de código)

Amigo deja te comento que tu anexo hace lo mismo que mi caso, es decir se oculta la ventana de excel y surge el userform, después de un minuto salta el MsgBox de aviso del cierre y llevo una hora esperando que se cierre y nada. Al pasar el puntero por la esquina inferior derecha salta MsgBox "Sigo trabajando" y se reinicia el conteo de 1 minuto y sigue igual a lo ya comentado. Anexo pantallasos. Saludos

Pantallasos

publicado
Hace 46 minutos , Leopoldo Blancas dijo:

Yo probé el archivo que subió @Héctor Miguel y si se cierra automáticamente.

Yo lo estoy probando en una maquina Con windows 10 pro x64 bits y office profesional plus 2016 x 32 bits y la verdad que no se cierra automáticamente, tu que estas utilizando amigo. intentare en otra maquina. Saludos

publicado
Hace 4 minutos , Leopoldo Blancas dijo:

También en una de 64 Bits y windows de 32 bits, 2 núcleos.

Eso lo acabo de hacer ahorita.

Pues esta raro la verdad en esta maquina me han sucedido algunas cosas raras, la llevare a que le den una rameada como dicen acá en México, gracias 

publicado
Hace 1 minuto , jose lopez contreras dijo:

Pues esta raro la verdad en esta maquina me han sucedido algunas cosas raras, la llevare a que le den una rameada como dicen acá en México, gracias 

Cuando pasan cosas Raras es por Virus y otros Bichos.... Y si eso no responde Formatearla.

publicado
Hace 2 horas, jose lopez contreras dijo:

en esta maquina me han sucedido algunas cosas raras, la llevare a que le den una rameada

y... si no fuera "la maquina" ?

pudiera ser "el archivo" (algún exceso) ?

publicado
  • abre excel (libro1 en blanco)
  • localiza y abre cualquiera de los dos libros manteniendo pulsada la tecla {shift} (NO eventos de apertura)
  • abre el editor de vba (Alt + F11)
  • busca si en herramientas > referencias ... aparece alguna marcada como FALTA:xxx o MISSING:xxx

comenta también cuales aparecen marcadas (todas)

saludos,
hector.

publicado
Hace 14 horas, Héctor Miguel dijo:
  • abre excel (libro1 en blanco)
  • localiza y abre cualquiera de los dos libros manteniendo pulsada la tecla {shift} (NO eventos de apertura)
  • abre el editor de vba (Alt + F11)
  • busca si en herramientas > referencias ... aparece alguna marcada como FALTA:xxx o MISSING:xxx

comenta también cuales aparecen marcadas (todas)

Seguí tus recomendaciones y no hay ninguna que diga FALTA:xxx o MISSING:xxx, anexo referencias marcadas. Espero comentario

Rferencias marcadas

publicado
Hace 11 horas, jose lopez contreras dijo:

no hay ninguna que diga FALTA:xxx o MISSING:xxx, anexo referencias marcadas

primero, gracias a @Leopoldo Blancas por las pruebas verificando el funcionamiento de la muestra ;)

segundo, tratando de descartar a "la máquina", pudiera ser que tu office/excel 2016...

  • no está completa o correctamente instalado
  • no tiene instaladas actualizaciones
  • alguna actualización no terminó "exitosamente"

a reserva de que confirmes/corrijas lo anterior...

saludos,
hector.

publicado
En 4/5/2019 at 20:12 , Héctor Miguel dijo:

segundo, tratando de descartar a "la máquina", pudiera ser que tu office/excel 2016...

  • no está completa o correctamente instalado
  • no tiene instaladas actualizaciones
  • alguna actualización no terminó "exitosamente"

a reserva de que confirmes/corrijas lo anterior...

Amigo te comento, desinstale totalmente office y lo instale nuevamente bajado de la pagina oficial lo active y actualice, pero no paso nada sigue todo igual. pregunta tu anexo funcionara en una pc con win 7, por que es lo único que tengo a la mano aparte de mi pc para poder hacer la prueba haber si se cierra automáticamente

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 109 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      187
    • Comentarios
      97
    • Revisiones
      28

    Más información sobre "Un juego del Rabino en Excel"
    Última descarga
    Por pegones1

    1    1

  • Crear macros Excel

  • Mensajes

    • Vale mil gracias, en vdd se agradece todo el apoyo y comentarios
    • Hola nuevamente. Por eso la importancia de lo que mencionas tú como "ruta relativa". Tal cual comentas, y aún sin llegar a algunos detalles importantes para ayudarte, en realidad tal cual te comenté le día miércoles, pues sí podías hacer como comentabas, era cosa de obtener los Id de Windows (como tú los llamas) y la ruta de OneDrive en casa usuario y eso sí se puede obtener con VBA y luego pasarlo a PQ, pero medio que te cerraste en que "PQ no puede trabajar con rutas relativas", cosa cierta pero siempre hay formas. Si SAP puede o no guardar en OneDrive o SharePoint, pues si está mapeado en la PC ¡claro que se puede! Pero bueno, creo que si te es útil tu propia propuesta ¡avanza con eso!
    • Perdona @Abraham Valencia pero he estado liado estos días. En realidad todo el problema se reduce a estos dos problemas: Problema 1: El script que "fabrica" SAP y que luego "pego" en la macro, no es capaz de  guardar archivos en SharePoint. He estado buscando, y en realidad muchas personas tienen ese problema (no poder guardar un Excel en SAP a través de VBA). Eso muy probablemente sean problemas de permisos, que no puedo cambiar (no soy administrador de nada). Como no puedo solucionarlo así, paso al plan B, que es guardar en Excel que me genera SAP en el ordenador de cada usuario que ejecute la plantilla (y que sí está guardada en SharePoint), para después con PowerQuery llamar a ese Excel (el export). Para ello, pretendo guardar el export, en la ruta relativa "C:\..\..\..\OneDrive - NombreEmpresa\Documentos\SAP\SAP GUI" donde los \..\..\..\ saltan las rutas personales de cada usuario (tipo C:\users\IDusuario\). Eso lo hace bien, y el archivo se guarda en la ruta de cada usuario que lo usa, pero surge el problema 2 Problema 2: PowerQuery no trabaja con rutas relativas del tipo  "C:\..\..\..\OneDrive - NombreEmpresa\Documentos\SAP\SAP GUI" necesita que sea del tipo fija "C:\users\IDusuario\OneDrive - NombreEmpresa\Documentos\SAP\SAP GUI" pero claro, IDusuario es diferente para cada usuario.   Pero escribiendo todo esto, creo que he dado con una posible solución, no grabar el export en una ruta de usuario, sino en una en la raiz de C:, que siempre será igual para todos los usuarios, del tipo C:\Sap\export.xlsx que seria igual en todos los ordenadores. Asi sí podría decirle a PowerQuery que vaya siempre a la ruta C:\Sap\ que existirá en todos los ordenadores. Mañana intentaré hacer pruebas, aunque mi solución ideal seria que se pudiera guardar en el SharePoint. Saludos.
    • Hola La opción brindada por @torquemada es correcta, funciona, pero hay algunos inconvenientes que (desde mi punto de vista) no la convierten en mi primera elección. Los inconvenientes son: Tendrías que ir columna por columna haciendo los reemplazos, claro que no se harían a mano sino que utilizarías la opción reemplazar o la opción texto en columnas, aun asi demorará un poquito y será trabajoso. Cada vez que descargues otro listado, tendrás que volver a realizar los reemplazos. Me parece una mejor propuesta lo siguiente: Descarga los movimientos a un archivo de Excel Desde tu control de pagos (otro archivo) cargas los movimientos del archivo descargado mediante Power Query Power Query hará los reemplazos y reconocerá todo correctamente (sin que tengas que hacer nada especial) Cuando descargues los movimientos un día posterior, solamente tendrás que hacer clic en "Actualizar" y todo funcionará en automático
    • Hola a todos, Efectivamente, me temo que tal como trabajan las funciones =HOY() y/o =AHORA() (volátiles), sólo con macros puedes obtener soluciones. Un recurso pedestre podría ser, cada vez que quieras que se fije un dato, te sitúes en esa celda y pulses F2, F9 e INTRO.  Pero claro, puede ser un inconveniente si hay que hacerlo repetitivamente en muchas ocasiones,.............. en fin, lo comento sólo como posibilidad. Saludos,
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.