No funcionan las las siguientes aplicaciones en VBA: Application.ScreenUpdating = FalseActiveSheet.DisplayPageBreaks = False
Estoy usando el siguiente código
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
ActiveSheet.DisplayPageBreaks = False
If TextBox1 = Empty Then
MsgBox "Para Iniciar, ingrese la fecha solicitada"
Else
Sheets("hoja2").Select
Range("B2").Value = TextBox1
Range("B2") = CDate(TextBox1)
If TextBox2 = Empty Then
Range("F3").Value = ""
Range("F4").Value = ""
Range("F5").Value = ""
Sheets("hoja1").Select
Else
Range("F3").Value = TextBox2
Range("F3") = CDate(TextBox2)
If TextBox3 = Empty Then
Range("F4").Value = ""
Range("F5").Value = ""
Sheets("hoja1").Select
Else
Range("F4").Value = TextBox3
Range("F4") = CDate(TextBox3)
If TextBox4 = Empty Then
Range("F5").Value = ""
Sheets("hoja1").Select
End
Else
Range("F5").Value = TextBox4
Range("F5") = CDate(TextBox4)
End If
End If
End If
Sheets("hoja1").Select
End
End If
Application.ScreenUpdating = False
ActiveSheet.DisplayPageBreaks = False
End Sub
Pero las aplicaciones mencionadas en el título del tema no funcionan, ¿qué debo corregir?
2 respuestas
Pero qué funcionamiento esperas.
Si quieres ver los cambios en la pantalla entonces debes poner primero True y al final del código False
Private Sub CommandButton1_Click() Application.ScreenUpdating = True ActiveSheet.DisplayPageBreaks = True ' 'el código ' Application.ScreenUpdating = False ActiveSheet.DisplayPageBreaks = False End Sub
Pero si quieres desactivar la actualización en pantalla, primero debes apagar con False y después prender con True
Private Sub CommandButton1_Click() Application.ScreenUpdating = False ActiveSheet.DisplayPageBreaks = False ' 'el código ' Application.ScreenUpdating = True ActiveSheet.DisplayPageBreaks = True End Sub
'S aludos. Dante Amor. Si es lo que necesitas, r ecuerda valorar la respuesta. G racias
Gracias nuevamente
Lo que espero es que al ejecutar la macro no se vea la actualización, simplemente que me arroje el resultado sin mostrar el procedimiento que ejecuta, ahora, he usado las opciones que ustedes me están aportando pero no funcionan.
Será que por tener éste código en un userfrom, es que no funcionan estas dos lineas?
Prueba con lo siguiente. No importa si estás en el userform. No verás la actualización en pantalla. Es decir, si estás en la hoja1, no verás que se selecciona la hoja2 y que luego regresa a la hoja1.
Private Sub CommandButton1_Click() Application.ScreenUpdating = False 'ActiveSheet.DisplayPageBreaks = False If TextBox1 = Empty Then MsgBox "Para Iniciar, ingrese la fecha solicitada" Else Sheets("hoja2").Select Range("B2").Value = TextBox1 Range("B2") = CDate(TextBox1) If TextBox2 = Empty Then Range("F3").Value = "" Range("F4").Value = "" Range("F5").Value = "" Sheets("hoja1").Select Else Range("F3").Value = TextBox2 Range("F3") = CDate(TextBox2) If TextBox3 = Empty Then Range("F4").Value = "" Range("F5").Value = "" Sheets("hoja1").Select Else Range("F4").Value = TextBox3 Range("F4") = CDate(TextBox3) If TextBox4 = Empty Then Range("F5").Value = "" Sheets("hoja1").Select 'End Else Range("F5").Value = TextBox4 Range("F5") = CDate(TextBox4) End If End If End If Sheets("hoja1").Select 'End End If MsgBox "Se actualizaron los datos" Application.ScreenUpdating = True 'ActiveSheet.DisplayPageBreaks = True End Sub
Por otra parte, las condiciones que tienes en tu código no se cumplen todas, por ejemplo, si el textbox3 está vacío, pero el textbox4 tiene dato, la macro nunca reflejará el valor del textbox4 en la hoja. Si lo anterior es correcto, entonces no dije nada.
Prueba nuevamente y me comentas.
Efectivamente, el procedimiento que describe es el que estoy esperando.
Estoy copiando y pegando los nuevos valores que ustedes me aportan pero sigo con la misma novedad
ok, perfecto
El código lo tengo en un userfrom desde donde se solicitan máximo 4 fechas, una fecha inicial donde el usuario la elige a partir de un calendario (textbox1) y otras fechas correspondientes al mismo mes de la fecha inicial que equivaldrían a días festivos de ese mes si los tuviere (textbox2, 3 y 4)
Luego al aceptar, estas fechas pasan a una hoja 2 donde se asignan a las celdas que se nombran en el código con el fin de identificar los días que son domingos y festivos para posteriormente calcular (con otros códigos que están en un módulo como funciones) un número de horas a laborar en ese mes y programar unos turnos.
El formulario del userform está en un botón ubicado en la hoja1 y lo que espero es no ver el procedimiento de asignación de fechas a los rangos que se hace en la hoja 2 para luego pasar a la hoja uno. Resumidamente lo que espero es no ver ese salto de hoja entre la 1 y la 2 y hasta ahora las lineas que venimos discutiendo no me han funcionado
Prueba con la siguiente opción
De la manera en que está programado, no es necesario cambiarse de hoja, como puedes ver he eliminado los Select a las hojas.
Private Sub CommandButton1_Click() Application.ScreenUpdating = False If TextBox1 = Empty Then MsgBox "Para Iniciar, ingrese la fecha solicitada" Else Set h2 = Sheets("hoja2") h2.Range("B2").Value = TextBox1 h2.Range("B2") = CDate(TextBox1) If TextBox2 = Empty Then h2.Range("F3").Value = "" h2.Range("F4").Value = "" h2.Range("F5").Value = "" Else h2.Range("F3").Value = TextBox2 h2.Range("F3") = CDate(TextBox2) If TextBox3 = Empty Then h2.Range("F4").Value = "" h2.Range("F5").Value = "" Else h2.Range("F4").Value = TextBox3 h2.Range("F4") = CDate(TextBox3) If TextBox4 = Empty Then h2.Range("F5").Value = "" Else h2.Range("F5").Value = TextBox4 h2.Range("F5") = CDate(TextBox4) End If End If End If End If MsgBox "Se actualizaron los datos" Application.ScreenUpdating = True End Sub
Si tienes problemas, envíame tu archivo parra revisarlo.
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias
Gracias, el código ha servido pues ya no veo ese salto de hoja entre la 1 y la 2, tienes toda la razón, eliminado los Select a funcionado
Ahora,que no hay salto entre las hojas lo que si se logra a observar es un leve parpadeo, este sería otro tema a discutir?
Muchas gracias, donde lo puedo calificar?
Quita las líneas
Application.ScreenUpdating = False Application.ScreenUpdating = True
El parpadeo debe desaparecer.
Para valorar, al final de mi respuesta hay unos botones: "Votar" y "Excelente" presiona el botón que consideres.
Sal u dos
Dante, tengo que ser honesto al decirte que la necesidad que tenía se resolvió pero las líneas que nuevamente me pides que use no funcionan dentro del código,
Lo que dije es que las quitaras.
Te pongo el código completo:
Private Sub CommandButton1_Click() If TextBox1 = Empty Then MsgBox "Para Iniciar, ingrese la fecha solicitada" Else Set h2 = Sheets("hoja2") h2.Range("B2").Value = TextBox1 h2.Range("B2") = CDate(TextBox1) If TextBox2 = Empty Then h2.Range("F3").Value = "" h2.Range("F4").Value = "" h2.Range("F5").Value = "" Else h2.Range("F3").Value = TextBox2 h2.Range("F3") = CDate(TextBox2) If TextBox3 = Empty Then h2.Range("F4").Value = "" h2.Range("F5").Value = "" Else h2.Range("F4").Value = TextBox3 h2.Range("F4") = CDate(TextBox3) If TextBox4 = Empty Then h2.Range("F5").Value = "" Else h2.Range("F5").Value = TextBox4 h2.Range("F5") = CDate(TextBox4) End If End If End If End If MsgBox "Se actualizaron los datos" End Sub
Revisa que no las tengas en otra parte del código del userform
Ya las he quitado, no están en ninguna parte del userform y se sigue observando un leve parpadeo luego de aceptar la operación
Quiero destacar que el último mensaje MsgBox lo he puesto entre los últimos end if, debido a un efecto que no era correcto (Al dar aceptar con todos los textbox vacíos se activan los dos mensajes del código)
End If MsgBox "Se actualizaron los datos" End If End Sub
Lo del msgbox, solamente era un plus para mostrar que ya había terminado la operación, quita el mensaje si no es necesario
Yo probé el código y no tengo ningún parpadeo, tal vez sea la versión de office, o el procesador, o la memoria.
Lo importante es que ya no ves los cambios de hoja. R ecuerda valorar la respuesta, para que sigas contando con nuestro apoyo para futuras preguntas. Sal u dos
Lo del mensaje es un buen plus y aplica perfectamente para este procesos, simplemente es hacer ese pequeño cambio para que tenga un buen funcionamiento
Voy a ensayar el código en otro equipo y claramente la necesidad fue resuelta pero no el tema que inscribí en este foro, aún seguimos sin saber porqué no funcionan éstas aplicaciones. Mañana les estaré contando como funcionó en otro pc
Las aplicaciones funcionan correctamente, esa es su funcionalidad, apagar y prender la actualización de la pantalla.
Tendría que revisar tu archivo completo.
Envíame tu archivo para revisarlo.
También dime la versión de office que manejas, la versión de excel y si tienes actualizadas todos los componentes.
Si las aplicaciones no funciona puede ser por las versiones o por el procesador de tu equipo o por otros factores que no podemos revisar, porque no podemos recrear el ambiente completo con el que estás trabajando. Pero más allá de si resolvimos el tema que pusiste, buscamos alternativas para resolver tu problema; y si eso no merece tu valoración, no te preocupes, me quedo con la satisfacción de seguir ayudando.
Sal u dos y que tengas buen día.
- Compartir respuesta
.16.01.17
Buenas tardes,
Me parece que al programar que muestre un msgbox, las instruciones para que no refresque pantalla y no muestre los saltos de página deberían ser posteriores.
Esa son las dos instrucciones por las que estás consultando. A menos que lo que buscas sea otra cosa.
Prueba con esta variante de tu rutina:
Private Sub CommandButton1_Click() If TextBox1 = Empty Then MsgBox "Para Iniciar, ingrese la fecha solicitada" Else Application.ScreenUpdating = False ActiveSheet.DisplayPageBreaks = False Sheets("hoja2").Select Range("B2").Value = TextBox1 Range("B2") = CDate(TextBox1) If TextBox2 = Empty Then Range("F3").Value = "" Range("F4").Value = "" Range("F5").Value = "" Sheets("hoja1").Select Else Range("F3").Value = TextBox2 Range("F3") = CDate(TextBox2) If TextBox3 = Empty Then Range("F4").Value = "" Range("F5").Value = "" Sheets("hoja1").Select Else Range("F4").Value = TextBox3 Range("F4") = CDate(TextBox3) If TextBox4 = Empty Then Range("F5").Value = "" Sheets("hoja1").Select End Else Range("F5").Value = TextBox4 Range("F5") = CDate(TextBox4) End If End If End If Sheets("hoja1").Select End End If Application.ScreenUpdating = True ActiveSheet.DisplayPageBreaks = True End Sub
También la indenté para ver la lógica de los IFs.
Espero que sea lo que buscabas.
Saludos
Fernando
.
Gracias por su pronta respuesta
Esas son las dos lineas por las que estoy consultando y he usado ya la opción que me aporta e incluso he ubicado estas dos lineas en diferentes lugares pero aún así no se ejecutan, pues el salto de hoja se sigue viendo al correr la macro.
Conclusión, aún no me funcionan las siguientes lineas:
Application.ScreenUpdating = False ActiveSheet.DisplayPageBreaks = False
que debo corregir o por cual código las puedo reemplazar
.
Buenas, Stevenson
Al final de la rutina que te pasé, puse
ActiveSheet.DisplayPageBreaks = True
Deberías cambiarlo a
ActiveSheet.DisplayPageBreaks = False
para que no muestre los saltos de página.
Mientras que la otra instrucción
Application.ScreenUpdating = True
es redundante, porque la actualización de pantalla se activa automáticamente al final cada rutina. Sólo sirve para que no se vea qué hace la rutina mientras se está ejecutando.
¿Son esos los efectos que buscabas?
Abrazo
Fer
.
Fer, muchas gracias por tus aportes los comparto 100% estando de acuerdo contigo, he ensayado este código en otro pc y sigue pasando lo mismo, hay varios parpadeos en milisegundos, aún usando todo lo que hasta ahora hemos mencionado pero pareciera que no sirve o no se ejecuta
sigo atento a sus recomendaciones
.
Efectivamente, es muy curioso el comportamiento, porque ScreenUpdating impide que se refresque la pantalla.
Me quedé pensando en tu caso y noté que no veo que descargues el formulario (Unload Me) antes de iniciar los comandos.
Tal vez necesites que sea así pero puede ser la causa del parpadeo.
Puedes intentarlo y ver si aún así persiste.
Un abrazo
Fer
.
Fer, el formulario lo estaba descargando con la propiedad end pero igualmente hice el ejercicio de cambiarlo por el unload me y persiste la novedad
.
Sí, pero END está al final del segundo if (por eso fue útil la indentación del código para que entendiéramos mejor su estructura).
Si no va a ser utilizado nuevamente, descargaría el formulario apenas comienza el 1º "else":
Private Sub CommandButton1_Click() If TextBox1 = Empty Then MsgBox "Para Iniciar, ingrese la fecha solicitada" Else End ' o Unload Me -- AQUI, ANTES DE CONGELAR LA PANTALLA Application.ScreenUpdating = False ActiveSheet.DisplayPageBreaks = False Sheets("hoja2").Select Range("B2").Value = TextBox1
Tal vez valgala pena intentarlo.
Saludos
Fer
.
- Compartir respuesta