Saltar al contenido

No quiero que aparezca cuadro de dialogo


Recommended Posts

publicado

Buenos dias a todos, cree el siguiente codigo porque muchos usuarios diferentes trabajan sobre el mismo archivo, y tienen diferentes accesos y conecciones a los discos de la red, de modo que cada que vez que alguien abría el archivo debia modificar todos los vinculos (son como 10) manualmente.

El problema que tengo ahora es que cuando el programa va realizando lo cambios, abre automaticamente varios cuadros de dialogo para seleccionar un archivo que  necesita para seguir ejecutandose. Los usuarios le damos cancelar a todos los cuadros de dialogo que aparecen y el codigo sigue su ejecucion normal. Mi consulta es, sabiendo que dando cancelar el programa sigue su ejecucion normal, no puedo bloquear ese cuadro de dialogo emergente y que tome como valor por defecto "Cancel". Les comparto el codigo (el codigo fue tomado de algun foro y modificado a mis necesidades)

Saludos.

	Application.ScreenUpdating = False 'Apagar el parpadeo de pantalla evitando  los movimientos de pantalla que se producen al seleccionar celdas, 		hojas y libros
    Application.Calculation = xlCalculationManual  'Apagar los cálculos automáticos evitando que se recalcule todo cada vez que se pegan o modifican 		datos
    Application.EnableEvents = False 'Apagar los eventos automáticos evitando que se disparen macros de evento si las hubiere
    ActiveSheet.DisplayPageBreaks = False 'Apagar visualización de saltos de página sirve para evitar algunos problemas de compatibilidad entre macros 		Excel 2003 vs. 2007/2010
    Application.DisplayAlerts = False 'Apaga las alertas

    ubicacion = ActiveWorkbook.Path 'Traemos la ubicacion actual del archivo

    Dim wbTrg As Workbook
    Dim sLinkNew As String
    Dim aLinks As Variant, vLink As Variant

        Set wbTrg = ThisWorkbook   'resume la funcion ThisW.. en wbTrg ..> no se porque

        Rem Set array with all excel links
        aLinks = ActiveWorkbook.LinkSources(xlExcelLinks) ' define un array con los links del libro
        
        Rem Replace each excel Link
        If Not IsEmpty(aLinks) Then 'si el array anterior no esta vacio, entonces...
            For Each vLink In aLinks ' para cada link en el array de links, hacer...
                texto = Split(vLink, "\") 'obtiene un array de todas las cadenas de texto separadas por la barra invertida, esto es para luego traer la 				ultima palabra(nombre del archivo) con la funcion Ubound obtiene el mayor indice de un array
                If texto(UBound(texto)) = "AtData.xla" Then
                'no quiero que haga nada
                Else
                wbTrg.ChangeLink Name:=vLink, NewName:=ubicacion & "\" & texto(UBound(texto)), Type:=xlExcelLinks
                End If



        Next: End If

    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
    ActiveSheet.DisplayPageBreaks = True
    Application.DisplayAlerts = True

 

publicado

Hola.

Pues  ya tienes Application.DisplayAlerts = False eso debería suprimir la mayoría de los cuadros de diálogo, pero por lo que dices no está funcionando.

lamento no ayudarte mucho, porque yo no conozco una forma directa de suprimir estos cuadros de diálogo en el VBA. Aunque, puedes intentar un par de ideas.

Puedes intentar usar Application.OnKey para manejar el evento de presionar la tecla ESC (parecido a hacer clic en Cancelar)

Application.OnKey "{ESC}", "MyCancelRoutine"

Luego definir MyCancelRoutine para manejar el evento

Sub MyCancelRoutine()
    ' Aquí
End Sub

Otra opción sería usar SendKeys para enviar la tecla ESC. Sin embargo, toma en cuenta que SendKeys puede causar problemas si se usa incorrectamente

Application.SendKeys "{ESC}"

Recuerda, son ideas no soluciones. Si puedes prueba en una copia del libro por cualquier cosa. Y está al pendiente, en esta sección hay Maestros calificados que pueden aportar soluciones concretas.

¡Saludines!

publicado
hace 17 horas, Israel Cassales dijo:

 SendKeys para enviar la tecla ESC

Hola Israel. Muchisimas Gracias. Estuve investigando tu opcion esto podria ser una opcion (me da un poco de miedo probarla porque en todos los lugares en los que investigué advertian que fuese super cuidadoso al usar SendKeys.

 

Por si las dudas, aclaro, el cuadro de dialogo emergente que aparece al hacer correr el codigo es "para cambiar el vinculo de otro archivo, que esta en un orden posterior en la ejecucion del codigo". Es decir:

1 - el codigo modifica el vinculo del archivo 1

2 - excel detecta que le falta que se actualice el archivo 2, y en vez de esperar a que se actualice (que lo haria mismo codigo en la sentencia siguiente) corta la ejecucion y pide que se actualice manualmente el vinculo del archvio 2,

3 - al darle cancelar, se continua ejecuatando el codigo y se modifican los vinculos faltantes.

 

Podria pasar el archivo, pero enrealidad necesitaria pasarte todos los archivos, toda la carpeta. 

 

image.thumb.png.9f48876f5ca27755bfceab1742f191dc.png

publicado

Es cierto que SendKeys puede ser impredecible y podría causar problemas si se usa incorrectamente. Por esa causa la recomendación de tomar precauciones.

En 18/10/2023 at 12:04 , Israel Cassales dijo:

Sin embargo, toma en cuenta que SendKeys puede causar problemas si se usa incorrectamente

 

hace 8 horas, jbattiato dijo:

Por si las dudas, aclaro, el cuadro de dialogo emergente que aparece al hacer correr el codigo es "para cambiar el vinculo de otro archivo, que esta en un orden posterior en la ejecucion del codigo"

Entonces el problema parece ser que ¿el código está intentando actualizar los vínculos en un orden que no es el deseado? En ese caso una idea adicional podrías ser intentar desactivar la actualización automática de los vínculos antes de cambiarlos y luego reactivarla después. ¿Qué opinas?

Esto se puede hacer con la propiedad AskToUpdateLinks, algo así:

Application.AskToUpdateLinks = False ' Desactiva la actualización automática de los vínculos

' Aquí va tu código para cambiar los vínculos

Application.AskToUpdateLinks = True ' Reactiva la actualización automática de los vínculos

Algo así debería prevenir que Excel intente actualizar los vínculos automáticamente mientras tu código está cambiándolos, aunque no sé si esto sea opuesto a la primera descripción.

En 18/10/2023 at 7:59 , jbattiato dijo:

cree el siguiente codigo porque muchos usuarios diferentes trabajan sobre el mismo archivo, y tienen diferentes accesos y conecciones a los discos de la red, de modo que cada que vez que alguien abría el archivo debia modificar todos los vinculos (son como 10) manualmente.

Lamento no poder aportar más por ahora.

Saludines

publicado

mm no se pudo che de igual manera muchsimas Gracias por el tiempo que le dedicaste y el esfuerzo de buscar una solucion.

 

publicado

Hola

¿En dónde y/o cómo colocaste lo de AskToUpdateLinks recomendado por Israel? Asimismo, para este tipo de dilemas es conveniente enviar la captura de pantalla del cuadro de diálogo inicial que te da como respuesta tu macro, no solo uno secundario y/o lo que en tu evaluación son las causas.

publicado

Hola Abraham, Gracias por Responder.

Respecto a la segunda consulta, es es el primero cuadro de dialogo que arroja la macro, lo arroja 4 veces (con cuatro vinculos diferentes) y luego los vuelve a arrojar (los mismos 4 vinculos que en el primer caso). 

Respecto a tu primer consulta,  te comparto el codigo editado.  

 Application.ScreenUpdating = False 'Apagar el parpadeo de pantalla evitando  los movimientos de pantalla que se producen al seleccionar celdas, hojas y libros
    Application.Calculation = xlCalculationManual  'Apagar los cálculos automáticos evitando que se recalcule todo cada vez que se pegan o modifican datos
    Application.EnableEvents = False 'Apagar los eventos automáticos evitando que se disparen macros de evento si las hubiere
    ActiveSheet.DisplayPageBreaks = False 'Apagar visualización de saltos de página sirve para evitar algunos problemas de compatibilidad entre macros Excel 2003 vs. 2007/2010
    Application.DisplayAlerts = False 'Apaga las alertas
    Application.AskToUpdateLinks = False 'Desactiva la actualizacion automatica de los vinculos
    

    ubicacion = ActiveWorkbook.Path 'Traemos la ubicacion actual del archivo

    Dim wbTrg As Workbook
    Dim sLinkNew As String
    Dim aLinks As Variant, vLink As Variant

        Set wbTrg = ThisWorkbook   'resume la funcion ThisW.. en wbTrg ..> no se porque

        Rem Set array with all excel links
        aLinks = ActiveWorkbook.LinkSources(xlExcelLinks) ' define un array con los links del libro
     
        Rem Replace each excel Link
        If Not IsEmpty(aLinks) Then 'si el array anterior no esta vacio, entonces...
            For Each vLink In aLinks ' para cada link en el array de links, hacer...
                texto = Split(vLink, "\") 'obtiene un array de todas las cadenas de texto separadas por la barra invertida, esto es para luego traer la ultima palabra(nombre del archivo) con la funcion Ubound obtiene el mayor indice de un array

                
                If texto(UBound(texto)) = "AtData.xla" Then
                    
                Else
                wbTrg.ChangeLink Name:=vLink, NewName:=ubicacion & "\" & texto(UBound(texto)), Type:=xlExcelLinks

                End If



        Next: End If

    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
    ActiveSheet.DisplayPageBreaks = True
    Application.DisplayAlerts = True
    Application.AskToUpdateLinks = True

 

 

 

publicado
En 18/10/2023 at 15:04 , Israel Cassales dijo:

Recuerda, son ideas no soluciones. Si puedes prueba en una copia del libro por cualquier cosa. Y está al pendiente, en esta sección hay Maestros calificados que pueden aportar soluciones concretas.

Israel, tu solucion fue la correcta. Estaba actualizando una macro equivocada, tenia una macro ejecutandose en ThisWorkbook (con open) y otra en un modulo asociada a un boton (la original, no la habia borrado), estaba aplicando las ediciones a esa macro que nunca se ejectuaba

Archivado

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

×
×
  • 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.