Duda Excel: Evitar ejecución de código VBA como "Workbooks Open" al abrir. ¿Es posible?

Tema en 'Informática - Tecnología' iniciado por McClane, 31 Ago 2023.

  1. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    43.550
    Me Gusta:
    22.982
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    Hola foreros!! Tema un poco complicado y "delicado". :censored:

    Hace unos meses me hice un curso de Excel de 24 horas desde la nada hasta VisualBasic, que es lo que realmente me interesaba. Aprendí muchas cosas pero evidentemente no lo aprendí todo. :LOL:

    En el trabajo tenemos un archivo Excel que nos saca un reporte de lo que hemos hecho en el día. Este archivo dependía de un informático que lo iba actualizando según necesidades pero desde hace tiempo, ese informático ya no trabaja y el archivo está "abandonado" pero se sigue usando. La información que saca era incoherente, sin descripciones, pero como sacaba nuestro comentario y el número de trabajo, se seguía usando. Tras este curso de Excel me propuse mejorar, limpiar y optimizar el código para que se ejecute más rápido y... Arreglarlo. biggrin

    En ratos libres fui metiendo horas al libro, estudiando y optimizando su código. Es un libro que importa CINCO archivos Excel, copia una hoja, la pega en este archivo y luego los cierra. Me di cuenta, estudiando el código, que dos de ellos eran completamente inútiles, y hay un tercero que es como ir de Getafe a Móstoles pasando por Aranjuez. Subimos el archivo a la red para que luego lo copie de nuevo a local. :muro: Aquí hay margen de mejora. biggrin

    La mejora fue crear un código VBA del tipo Workbooks Open que nada más abrir el libro, modifique una celda. Esta celda contiene la ruta en local del archivo que había que subir a la red. Como cada usuario es distinto, el código obtiene el nombre de la carpeta de usuario y completa una ruta. Todo maravilloso y funciona perfecto. Tarda BASTANTE menos la importación y procesado de datos (de 40s a poco más de 10s). Un ajuste de tiempo considerable. :LOL:

    Ahora tengo un problema. A un compañero de trabajo NO se le ejecuta este código. El código está bien puesto y configurado como tiene que estarlo. Está probado en:

    Windows 7, Excel 2010
    Windows 10, Excel 2012
    Windows 10, Excel 2021

    En TODOS funciona. Ya no tenemos Excel 2012, por lo que no puedo probarlo ahí, solo el 2021 y yo el 2010 porque aún trabajo con Windows 7. :devil: He probado a guardar el libro en Excel 2021 pero sigue sin ejecutarse. Aquí viene lo "delicado". Este compañero es "reacio" a los cambios y sospecho que un archivo que nos funciona a cinco personas de cinco lo esté "saboteando" de alguna manera para que no se ejecute correctamente. Si hago yo ese reporte, el 100% de las veces funciona, pero a él, casualmente, NUNCA le funciona. Una vez le pillé intentando engañarme provocando un fallo en el código, pero él no lo sabe.

    La pregunta es la siguiente: ¿Existe alguna manera de evitar la ejecución del código VBA que está como Workbooks Open (ejecutar al abrir el libro) si se pulsa alguna tecla o se hace algo especial? Es que no me cuadra que en tres versiones distintas de Office funcione y precisamente a él, con la misma versión, no le funcione... :whistle:


    Saludos!!
     
  2. DavidV

    DavidV Productividad Nula Miembro del Club

    Registrado:
    29 Jun 2004
    Mensajes:
    18.486
    Me Gusta:
    28.011
    Ubicación:
    Suburbian Madriletensis
    Modelo:
    F36 & G26
    Unete a BMW FAQ Club Unete a BMW FAQ Club Unete a BMW FAQ Club
    Manteniendo pulsado ctrl al iniciar excel entras en modo seguro

    También un toque al esc al iniciar lo para todo
     
  3. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    43.550
    Me Gusta:
    22.982
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    Gracias!! Añado que cuando abrió el libro, usó el propio Excel desde el menú Archivo, y ahí pude ver que el código no se ejecutó porque aparecía mi usuario y no el suyo. No me pareció haber visto que pulsase tecla alguna, pero todo es posible al no conocer estos métodos. Probaré mañana a hacer esto en ambas versiones a ver qué hace. :)
     
  4. DavidV

    DavidV Productividad Nula Miembro del Club

    Registrado:
    29 Jun 2004
    Mensajes:
    18.486
    Me Gusta:
    28.011
    Ubicación:
    Suburbian Madriletensis
    Modelo:
    F36 & G26
    Unete a BMW FAQ Club Unete a BMW FAQ Club Unete a BMW FAQ Club
    Mira que no tenga bloqueada la ejecución de macros desde seguridad
     
  5. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    43.550
    Me Gusta:
    22.982
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    No la tenemos, porque para ejecutar ese libro, hay que ejecutar un lote de macros, y como el archivo se creó dentro del entorno de nuestro trabajo, no nos salta la advertencia de macros como cuando viene de fuera. Si no tiene las macros, no podría ejecutar el archivo. Me apunto todo esto para mañana. :)
     
  6. SP_Kenny

    SP_Kenny Forista Legendario Miembro del Club

    Registrado:
    8 Ago 2007
    Mensajes:
    12.005
    Me Gusta:
    16.634
    Ubicación:
    Madrid y Gijón.
    Modelo:
    Leon ST FR 1.8
    Unete a BMW FAQ Club Unete a BMW FAQ Club Unete a BMW FAQ Club
    A mí lo que más me sorprende es que tengáis eso montado en excel.
     
  7. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    43.550
    Me Gusta:
    22.982
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    Novedades. Ayer por la mañana, en un tiempo muerto, estuve haciendo pruebas con todo esto. Con la tecla escape, el archivo se ejecuta igualmente. Manteniendo la tecla escape, se ejecuta igualmente. Arrancando Excel en modo seguro (tienes que ser MUY rápido después del doble clic :LOL:) te pregunta si quieres arrancarlo en modo seguro. Al decirle que sí, se ejecuta.

    Ahora viene la excepción. Si vas a abrir el archivo desde el menú Archivo de Excel, se ejecuta igualmente tanto en modo seguro como normal. Pero si lo tienes abierto de fondo y lo abres desde el menú Archivo, NO se ejecuta. Cuando hice esto, vi que el archivo se abría muy rápido (básicamente como cambiar de ventana) y no recuerdo la velocidad con la que se abrió en el ordenador de este compañero. No sé si lo modificó para que viera yo que no funciona e hizo esto para quejarse estúpidamente o realmente lo abrió así. En Excel 2010 no probé a hacer esto, ya que somos cuatro gatos (o menos incluso :LOL:) los que aún tenemos un ordenador con Windows 7. :LOL:

    Seguiré informando a ver si misteriosamente le vuelve a fallar únicamente a él. :)
     
  8. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    43.550
    Me Gusta:
    22.982
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    He visto cosas muy bestias montadas en Excel y ésto es bastante suavecito. :LOL: Tenemos un XLSX que nos devuelve una aplicación, que es el reporte y el Excel con VBA lo único que hace es coger dos archivos más y complementar el reporte con datos de los otros y luego aplicar unos colores para lectura fácil, no hace más. Hay por ahí un vídeo de Youtube en el que un menda se monta un TPV táctil con Excel. Eso sí, el código VBA es más largo que el guión del Señor de los Anillos versión extendida. :descojon:
     
    A SP_Kenny le gusta esto.
  9. pUllastre

    pUllastre Clan Leader

    Registrado:
    18 Oct 2007
    Mensajes:
    20.852
    Me Gusta:
    11.516
    Ubicación:
    Barcelona
    Jodó !! Yo antaño hice unas cuantas macros para extraer datos de unos txt y transformarlo con gráficos y cositas. Ahora ya no me acuerdo de absolutamente nada de programar xD
     
  10. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    43.550
    Me Gusta:
    22.982
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    Y no me extraña, porque VBA es bastante arcaico para entenderlo y ciertamente difícil entenderlo. :LOL:
     
  11. Alvaris

    Alvaris Clan Leader Moderador Miembro del Club

    Registrado:
    4 Ene 2007
    Mensajes:
    39.731
    Me Gusta:
    55.280
    y digo yo, desde el centro de seguridad de su excel habéis probado a deshabilitar macros y que confíe siempre en VBA?
     
  12. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    43.550
    Me Gusta:
    22.982
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    No hay que mirar nada, porque no es necesario. El archivo funciona y punto. :rage:

    Esta mañana me ha dicho que ya sabe cuál es el problema, y es que se le queda mi usuario (el del último que lo abre) y que por eso falla el archivo, que él pone a mano su usuario y ya funciona. Le he dicho que no, y ya que ha sacado el tema, lo hemos probado. No quería abrir Excel porque ya sabe que funciona, pero le he insistido y lo ha abierto. Al aparecer su usuario dice que es normal, porque ayer guardó con el suyo y que por eso no cambia, pero al poner un manotazo de teclado como usuario (algo del estilo "flñsdhfjlsd") y guardo, al abrir de nuevo el código se ejecuta tal y como estaba previsto. Probado en bastantes máquinas con funcionamiento correcto, pero él insiste en que a él le falla.

    No sé cómo lo abrirá, pero él siempre abre los archivos abriendo Excel y luego desde el menú "Abrir", pero ya le he demostrado que funciona. Se ha quedado sin opciones, aparte de la socorrida "pues a mí no me funciona". biggrin


    Muchas gracias a todos!! :)
     
    A SP_Kenny y alvaris les gusta esto.
  13. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    43.550
    Me Gusta:
    22.982
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    Refloto el hilo, porque no era lo que yo pensaba. Volvemos a tener problemas con ese libro en concreto. Dos compañeros de trabajo tuvieron problemas el viernes para ejecutar el libro y he tenido que hacerlo yo hoy por la mañana. Afortunadamente no es algo de vida o muerte, pero debería funcionar sin que yo esté delante.

    Recordemos lo que pasaba. En ocasiones, sin saber por qué, la macro del tipo Workbooks Open no se ejecuta. Esa macro escribe en una celda la ruta de un archivo de reporte para transformarlo. Si no se ejecuta, la ruta es errónea, por lo que tira un error. Estaba equivocado, no estaba saboteando el archivo. Los afectados son gente que no pone problemas en estas cosas y son un poco limitados a la hora de usar estas aplicaciones. Así que seguimos con el problema. :stop:

    Tengo varias teorías de lo que puede estar pasando:

    -Excel crea un archivo temporal oculto cuyo nombre es similar a ".~archivo.xlsm". Es posible que, al abrir el libro, tome datos temporales que no debe usar porque son antiguos o no ejecute la macro porque entiende, de alguna manera, que el libro ya se ejecutó en su momento.
    -Excel 2021 LTSC tiene algún fallo que evita que se ejecute código nada más abrir el libro, aun siendo creado en un "entorno seguro". Al abrir el archivo, no avisa de que es un archivo con macros, lo abre y ya.

    ¿Tenéis experiencia con algún archivo que no ejecuta lo que tiene que ejecutar nada más abrirlo? La investigación continúa, se reabre el caso. biggrin

    Para hacer un remiendo, he metido la línea que debe ejecutarse en la primera línea de código que tiene que ejecutar. He probado a escribir un manotazo en la celda y al pulsar el botón no se queja y ejecuta el código. Al terminar, aparece el nuevo contenido en esa celda. :)
     
  14. SP_Kenny

    SP_Kenny Forista Legendario Miembro del Club

    Registrado:
    8 Ago 2007
    Mensajes:
    12.005
    Me Gusta:
    16.634
    Ubicación:
    Madrid y Gijón.
    Modelo:
    Leon ST FR 1.8
    Unete a BMW FAQ Club Unete a BMW FAQ Club Unete a BMW FAQ Club
    El problema es solo la ruta del reporte?, porque si es una ruta más o menos fija, en la que va cambiando la fecha por ejemplo, lo puedes hacer en la propia celda vía formula...
    También puedes hacer que la formula sea una llamada a una función propia... [​IMG]
     
  15. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    43.550
    Me Gusta:
    22.982
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    Necesito el Environ("username") para que el archivo funcione sin problemas. No conozco fórmula que haga eso. Cada usuario ejecuta el archivo en su máquina. Esa ruta lleva al archivo "padre" que es el que tiene la mayor parte de la información. Ese archivo se descarga de un programa que tenemos y lo deja siempre en el mismo sitio. Así, sea el usuario que sea, la ruta es "la misma" a excepción de la carpeta del usuario, que esa debe "calcularse" con Environ("username"). :)

    Gracias por responder!! :guiño:
     
  16. SP_Kenny

    SP_Kenny Forista Legendario Miembro del Club

    Registrado:
    8 Ago 2007
    Mensajes:
    12.005
    Me Gusta:
    16.634
    Ubicación:
    Madrid y Gijón.
    Modelo:
    Leon ST FR 1.8
    Unete a BMW FAQ Club Unete a BMW FAQ Club Unete a BMW FAQ Club
    La función puede hacer lo mismo que hagas en el Sub y devolverte el valor a la celda.

    Son Function en vez de Sub.
    [​IMG]
     
  17. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    43.550
    Me Gusta:
    22.982
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    Ah vale, programando la función. Sí, ahora recuerdo que se podía hacer eso. :LOL: Con el remiendo de poner la línea de lo que hay dentro de Workbooks Open en la primera línea de ejecución de la macro (no es la primera exactamente, pero es la primera donde puede ir) vamos funcionando, ya que solo falla a veces, pero esas veces hace un estropicio. Seguiré investigando y probando por qué no siempre carga el código de Workbooks Open. :)
     
  18. SP_Kenny

    SP_Kenny Forista Legendario Miembro del Club

    Registrado:
    8 Ago 2007
    Mensajes:
    12.005
    Me Gusta:
    16.634
    Ubicación:
    Madrid y Gijón.
    Modelo:
    Leon ST FR 1.8
    Unete a BMW FAQ Club Unete a BMW FAQ Club Unete a BMW FAQ Club
    La diferencia con la función dentro de la celda, es que a menos que desactives el recálculo automático, al abrir recálcula todas las fórmulas y tendrías el mismo funcionamiento que el macro en la apertura en esa celda.
     
  19. JoeDalton

    JoeDalton Forista

    Registrado:
    3 Feb 2017
    Mensajes:
    820
    Me Gusta:
    1.181
    con el environ puedes usar cualquier variable que te devuelve el comando set del cmd

    https://stackoverflow.com/questions...-current-users-application-data-folder#976580


    Yo no soy usuario avanzado de Excel mala bien superviviente, pero en otros casos cuando hemos tenido problemas hemos firmado digitalmente el código con un certificado de firma, si tenéis una ca interna a nivel de dominio windows (o incluso de un tercero) es fácil de crear, desplegar a los puestos, sin coste, y ayuda, yo por ej. los scripts de PowerShell van firmados y solo permitimos la ejecución de los firmados.
    Con código vba debería de hacerse, seguramente al arrancar te ejecutará el código sin pedir confirmación de usuario, a nivel de políticas de Windows no se si había alguna opción de configuración a aplicar.
     
  20. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    43.550
    Me Gusta:
    22.982
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    Gracias, le echaré un ojo!! :)

    Como digo, aunque no se ejecuta nada más abrir el libro, sí se ejecuta esa línea cuando se pulsa el botón de "comenzar proceso", lo que hace que funcione prácticamente igual que como debería funcionar. Así, de otra forma, también me aseguro que cuando se pulsa ese botón se reconstruye la celda en cuestión, por lo que pueda pasar. A seguir investigando por qué a veces se ejecuta y otras no. :guiño:
     
  21. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    43.550
    Me Gusta:
    22.982
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    Estoy intentando hacer eso pero no me sale, incluso copiando al dedillo lo que indicas. Si uso el nombre de la función MYFUN no dice nada y el resultado es un error:

    Captura de pantalla 2024-10-24 a las 20.42.23.png

    Pero si uso otro nombre, al escribir la "fórmula" me indica esto:

    Captura de pantalla 2024-10-24 a las 20.42.37.png

    No sé si estoy haciendo algo mal, pero está copiada al dedillo después de fracasar estrepitosamente. :nose:

    Aun así, me sigue intrigando que Excel se salte el paso de ejecutar código al abrir el libro... (n)
     
  22. SP_Kenny

    SP_Kenny Forista Legendario Miembro del Club

    Registrado:
    8 Ago 2007
    Mensajes:
    12.005
    Me Gusta:
    16.634
    Ubicación:
    Madrid y Gijón.
    Modelo:
    Leon ST FR 1.8
    Unete a BMW FAQ Club Unete a BMW FAQ Club Unete a BMW FAQ Club
    Fallo mío...

    La función debe crearse dentro de un módulo de la Excel para que sea usable (se me ha colado una S en el código..., es el portátil de casa y tiene las teclas intercambiadas para el acceso rápido a recortes.., p*to Asus...)
    [​IMG]

    Si está en otra excel, se puede referenciar también, por ejemplo en el libro personal.
    [​IMG]
    Dando al botón de formula (fx), puedes buscarla en las Definidas por el usuario.
    [​IMG]
     
    Última edición: 24 Oct 2024
  23. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    43.550
    Me Gusta:
    22.982
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    Nada, tampoco funciona en módulos. :rage:

    CODE, HTML o PHP Insertado:
    Function MENSAJE()
        MENSAJE = "Mensaje"
    End Function
    @SP_Kenny
     
    A SP_Kenny le gusta esto.
  24. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    43.550
    Me Gusta:
    22.982
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    Y acabo de probar con Excel 2021 y me dice exactamente lo mismo. :muro:
     
  25. SP_Kenny

    SP_Kenny Forista Legendario Miembro del Club

    Registrado:
    8 Ago 2007
    Mensajes:
    12.005
    Me Gusta:
    16.634
    Ubicación:
    Madrid y Gijón.
    Modelo:
    Leon ST FR 1.8
    Unete a BMW FAQ Club Unete a BMW FAQ Club Unete a BMW FAQ Club
    Mañana por la mañana te hago un excel de ejemplo y te lo adjunto, o mandame tu mail por mp y te lo envío.
     
  26. SP_Kenny

    SP_Kenny Forista Legendario Miembro del Club

    Registrado:
    8 Ago 2007
    Mensajes:
    12.005
    Me Gusta:
    16.634
    Ubicación:
    Madrid y Gijón.
    Modelo:
    Leon ST FR 1.8
    Unete a BMW FAQ Club Unete a BMW FAQ Club Unete a BMW FAQ Club
    Perdona @McClane, ayer tuve lío y se me fue por completo...

    Adjunto un xlsm comprimido en 7z y renombrado a pdf para poder adjuntarlo...
     

    Adjuntos:

  27. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    43.550
    Me Gusta:
    22.982
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    Sin problemas!! :joyful:

    Nada, tu función funciona pero la mía no. :rage: He probado a poner una cuenta matemática por si acaso y dice que tararí. He probado a concatenar textos y lo mismo: la tuya funciona, la mía no. :muro:
     
  28. SP_Kenny

    SP_Kenny Forista Legendario Miembro del Club

    Registrado:
    8 Ago 2007
    Mensajes:
    12.005
    Me Gusta:
    16.634
    Ubicación:
    Madrid y Gijón.
    Modelo:
    Leon ST FR 1.8
    Unete a BMW FAQ Club Unete a BMW FAQ Club Unete a BMW FAQ Club
    Te añado otra opción, con el onload en la hoja y en el módulo con la opción Application.Volatile que hace que se actualice en cada interacción
     

    Adjuntos:

  29. SP_Kenny

    SP_Kenny Forista Legendario Miembro del Club

    Registrado:
    8 Ago 2007
    Mensajes:
    12.005
    Me Gusta:
    16.634
    Ubicación:
    Madrid y Gijón.
    Modelo:
    Leon ST FR 1.8
    Unete a BMW FAQ Club Unete a BMW FAQ Club Unete a BMW FAQ Club
    Es raro de narices eso...:LOL::LOL::LOL:
     

Compartir esta página