parpadeos de pantalla

7 envíos / 0 nuevos
Último envío
BRUNO
Imagen de BRUNO
Offline
última acción: Hace 13 años 1 mes
alta: 29/03/2010 - 16:01
Puntos: 131
parpadeos de pantalla

estoy trabajando con excel vba y tengo varios formularios que que voy cargando (load userform) y descargando (unloaduserform)             a medida que los voy necesitando,quisiera saber como hago para evitar el parpadeo de pantallas cada vez que se descarga un userform y se carga el otro.

gracias

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 2 semanas 11 horas
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
Re: parpadeos de pantalla

Excel tiene una propiedad llamada ScreenUpdating que controla que se actualice o no la pantalla mientras se ejecuta una macro.

prueba a poner al principio del código

Application.ScreenUpdating = False

para deshabilitar la actualización de pantalla.

(En este otro tema del foro comentaban algo parecido http://www.necesitomas.com/node/582)

------
Ya sé Excel, pero necesito más ahora en pdf

 

------
Ya sé Excel, pero necesito más.

visitante (no verificado)
Imagen de visitante
Re: parpadeos de pantalla

Hola Paco

ya habia probado con screenupdating y no me da resultados, sigue haciendo el parpadeo de pantalla y se ve en el fondo parte del formulario que estoy descargando. agradeceria si tienes otra solucion

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 2 semanas 11 horas
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
Re: parpadeos de pantalla

adjunta un ejemplo (tienes que haber iniciado sesión para poder hacerlo) para que le eche un vistazo.

------
Ya sé Excel, pero necesito más ahora en pdf

 

------
Ya sé Excel, pero necesito más.

BRUNO
Imagen de BRUNO
Offline
última acción: Hace 13 años 1 mes
alta: 29/03/2010 - 16:01
Puntos: 131
Re: parpadeos de pantalla

ESTE EL MenuPrincipal

Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Unload MenuPrincipal
Load MenuActualizacion
MenuActualizacion.Show
Application.ScreenUpdating = True
End Sub
Private Sub CommandButton2_Click()
Application.ScreenUpdating = False
Unload MenuPrincipal
Load MenuEstadisticas
MenuEstadisticas.Show
Application.ScreenUpdating = True
End Sub
Private Sub CommandButton3_Click()
Application.ScreenUpdating = False
Sheets("REPORTE").Visible = False
Load Userform1
Userform1.Show
Unload CarCar
Unload CarVal
Unload CarZul
Unload EstCar
Unload EstVal
Unload EstZul
Unload ActDatos
Unload MenuPrograma
Unload MenuEstadisticas
Unload MenuActualizacion
    Application.DisplayAlerts = False
    ActiveWorkbook.Save
    Application.Quit
    ActiveWorkbook.Close
    End Sub
Private Sub CommandButton4_Click()
Application.ScreenUpdating = False
Unload MenuPrincipal
Load MenuPrograma
MenuPrograma.Show
Application.ScreenUpdating = True
End Sub
Private Sub CommandButton5_Click()
Application.ScreenUpdating = False
Sheets("REPORTE").Visible = True
Sheets("REPORTE").Select
Application.ScreenUpdating = True
End Sub
Private Sub UserForm_Activate()
    With Application
    lAppWindowState = .WindowState
    .WindowState = xlMaximized
    Me.Move 0, 0, .Width, .Height
    End With
End Sub
Private Sub UserForm_Initialize()
Application.ScreenUpdating = False
    Dim hWnd As Long
    Dim lngWstyle As Long
    hWnd = FindWindow(vbNullString, Me.Caption)
    lngWstyle = GetWindowLong(hWnd, GWL_STYLE)
    SetWindowLong hWnd, GWL_STYLE, lngWstyle And (Not WS_SYSMENU)
    DrawMenuBar hWnd
Application.ScreenUpdating = True
End Sub
 
 

ESTE ES EL MenuActualizacion

Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Sheets("VALENCIA").Visible = False
Sheets("CARACAS").Visible = False
Sheets("ZULIA").Visible = True
Sheets("ZULIA").Activate
Unload MenuActualizacion
Load ActDatos
ActDatos.Show
Application.ScreenUpdating = True
End Sub
Private Sub CommandButton2_Click()
Application.ScreenUpdating = False
Sheets("ZULIA").Visible = False
Sheets("CARACAS").Visible = False
Sheets("VALENCIA").Visible = True
Sheets("VALENCIA").Activate
Unload MenuActualizacion
Load ActDatos
ActDatos.Show
Application.ScreenUpdating = True
End Sub
Private Sub CommandButton3_Click()
Application.ScreenUpdating = False
Sheets("ZULIA").Visible = False
Sheets("VALENCIA").Visible = False
Sheets("CARACAS").Visible = True
Sheets("CARACAS").Activate
Unload MenuActualizacion
Load ActDatos
ActDatos.Show
Application.ScreenUpdating = True
End Sub
Private Sub CommandButton4_Click()
Application.ScreenUpdating = False
Sheets("ZULIA").Visible = False
Sheets("VALENCIA").Visible = False
Sheets("CARACAS").Visible = False
Unload MenuActualizacion
Unload ActDatos
Load MenuPrincipal
MenuPrincipal.Show
Application.ScreenUpdating = True
End Sub
Private Sub UserForm_Activate()
Application.ScreenUpdating = False
With Application
    lAppWindowState = .WindowState
    .WindowState = xlMaximized
    Me.Move 0, 0, .Width, .Height
    End With
Application.ScreenUpdating = True
End Sub
Private Sub UserForm_Deactivate()
 Application.WindowState = lAppWindowState
End Sub
Private Sub UserForm_Layout()
  With Me
    .Top = 0
    .Left = 0
  End With
End Sub
Private Sub UserForm_Initialize()
Application.ScreenUpdating = False
    Dim hWnd As Long
    Dim lngWstyle As Long
    hWnd = FindWindow(vbNullString, Me.Caption)
    lngWstyle = GetWindowLong(hWnd, GWL_STYLE)
    SetWindowLong hWnd, GWL_STYLE, lngWstyle And (Not WS_SYSMENU)
    DrawMenuBar hWnd
 Application.ScreenUpdating = True
End Sub
  
 

y esto lo tengo en un modulo

Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function DrawMenuBar Lib "user32" (ByVal hWnd As Long) As Long
Public Const GWL_STYLE As Long = -16&
Public Const WS_SYSMENU As Long = &H80000
 

 

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 2 semanas 11 horas
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
¿cuándo parpadea?

¿cuándo parpadea la aplicación?¿al hacer cualquier cosa (pulsar un botón) con cualquier formulario? ¿sólo con algún formulario?

Me llama la atención el código del UserForm_Activate del menú principal, que mueve el formulario y toca la ventana de la aplicación (este no tiene screenupdating)

no sé si cargar y descargar los formularios con load y unload, en vez de simplemente mostrarlos y ocultarlos con show y .hide  puede estar relacionado

Lo otro que puede ocasionar parpadeos es que se ejecuten varios procedimientos, y cada vez que tienes un screenupdating=true se actualiza la pantalla. Debería ponerse a verdadero sólo al final de todo el proceso, en vez de alternar varias veces en puntos intermedios (sí, ya sé, a veces no es posible). Por defecto, si en el código lo estableces a falso, al terminar la ejecución se vuelve a cambiar a verdadero automáticamente.

voy a hacer unas pruebas con ocultar y mostrar hojas, no sea que esto fuerce una actualización de pantalla.

a simple vista no se me ocurre nada más.

------
Ya sé Excel, pero necesito más ahora en pdf

 

------
Ya sé Excel, pero necesito más.

visitante (no verificado)
Imagen de visitante
Re: ¿cuándo parpadea?

HOLA PACO

EN REALIDAD TENGO UN TOTAL DE 12 FORMULARIOS LO QUE TE ENVIE FUE SOLO UNA MUESTRA COMO PEDISTES Y SI CUANDO PRESIONO UN COMMANDBUTTON EN CUALQUIERA DE LOS USERFORM ME SALE EL PARPADEO.

GRACIAS DE ANTEMANO POR LA ATENCION QUE ESTAS PRESTANDO