es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

ScreenUpdating falso hasta que se habilite explícitamente nuevamente

Tengo una macro que llama a una función después de un segundo. Para evitar el parpadeo, quiero desactivar ScreenUpdating. Desafortunadamente, la propiedad se restablece a True después de salir de test. ¿Existe alguna forma de desactivar la propiedad hasta que se vuelva a activar explícitamente?

El código es aproximadamente:

public sub test
Application.ScreenUpdating = False
App.OnTime Now + TimeValue("00:00:01"), "EnableScreenUpdating"
end sub

public sub EnableScreenupdating
Application.ScreenUpdating = True
end sub
Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, hay una forma de desactivar la propiedad ScreenUpdating hasta que se active explícitamente nuevamente. Una forma de lograr esto es utilizar una variable global para almacenar el estado de la propiedad ScreenUpdating y luego usarla para activar y desactivar la propiedad según sea necesario.

    Aquí tienes un ejemplo:

    Option Explicit
    
    Dim gblEnableScreenUpdating As Boolean
    
    Public Sub test()
        ' Desactivar ScreenUpdating
        Application.ScreenUpdating = False
        gblEnableScreenUpdating = False
    
        ' Llamar a la función después de un segundo
        App.OnTime Now + TimeValue("00:00:01"), "EnableScreenUpdating"
    End Sub
    
    Public Sub EnableScreenUpdating()
        ' Comprobar la variable global para ver si se debe habilitar ScreenUpdating
        If gblEnableScreenUpdating = True Then
            Application.ScreenUpdating = True
        Else
            ' Almacenar el estado actual de ScreenUpdating en la variable global
            gblEnableScreenUpdating = True
        End If
    End Sub
    

    En este ejemplo, la función EnableScreenUpdating verifica el valor de la variable gblEnableScreenUpdating para determinar si se debe habilitar o no ScreenUpdating. Si la variable es True, se habilita ScreenUpdating, de lo contrario, la función simplemente establece la variable en True.

    De esta manera, de forma predeterminada, ScreenUpdating está desactivado cada vez que se llama a test y solo se volverá a habilitar si la función EnableScreenUpdating se llama explícitamente con gblEnableScreenUpdating establecido en True.

    Ten en cuenta que la declaración Option Explicit al principio del código obliga a declarar explícitamente todas las variables, lo cual es una buena práctica para evitar errores y garantizar claridad en tu código.

Comments are closed.