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
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.
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
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.
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
¿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.
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