Hola a todos queria preguntar si es posible crear una especie de alerta (un texto que parpadee o cambie de color) cuando seleciono una opcion de checkbox en un formulario, un salu2.
Por ejemplo, en este codigo, al activar el checkbox, el texto de la celda D16 se pone de color rojo.
Private Sub CheckBox1_Click()
If CheckBox1. Value = True Then
Range("D16"). Select
Selection.Font.ColorIndex = 3
End If
End Sub
Abraham
Otra opcion es la siguiente y la puedes descargar en el siguiente link:
De todas formas pongo el código a tu disposición:
1. - Si consideras una hoja de Excel con un CheckBox y quieres modificar la celda "B7", haciendo parpadearla diciendo: "CheckBox Activado" el siguiente código puede servirte (Recuerda que puedes modificar "B7" -la ubicación de la celda- o "CheckBox Activado" - El texto que quieres que parpadee):
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Const Rango As String = "B7"
Private Const Mensaje As String = "CheckBox Activado"
Private Sub CheckBox1_Click()
' Autor: César Raúl U.R.
Dim Celda As Range
Set Celda = Range(Rango)
With Celda
. Font. Color = &HFF00&
Do While CheckBox1. Value
DoEvents
. Value = IIf(. Value = Mensaje, "", Mensaje)
Sleep 80
Loop
. Value = ""
End With
End Sub
2. - Si consideras un formulacio con un checkbox y una etiqueta llamada Label1 esto puede servirte:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub CheckBox1_Click()
' Autor: César Raúl U.R.
With Label1
Do While UserForm1.CheckBox1.Value
DoEvents
. Visible = Not. Visible
Sleep 80
Loop
. Visible = False
End With
End Sub
Pues dale doble click a tu checkbox y se abrira el editor de VBA ahi pega el codigo. Otor ejm:
Private Sub CheckBox1_Click()
If CheckBox1. Value = True Then
For parpadeo = 1 To 200
Range("i28"). Select
Selection.Font.ColorIndex = 3
For parpa = 1 To 50
Next parpa
Selection.Font.ColorIndex = 37
For parpa2 = 1 To 50
Next parpa2
Next parpadeo
End If
End Sub
Abraham
PD: Si hay texto en la celda i28 este "parpadea" al darle check al box
Sigo sin conseguirlo, os pongo el error que me da_:
SE HA PRODUCIDO EL ERROR 424 EN TIEMPO DE EJECUCION
SE REQUIERE UN OBJETO
Luego en modo depuracion me pone en amarillo la linea que señalo
Sub Casilladeverificación89_AlHacerClic()
-->If CheckBox89. Value Then
For Parpadeo = 1 To 200
Range("i28"). Font. ColorIndex = 3
For parpa = 1 To 50
Next parpa
Range("i28"). Font. ColorIndex = 37
For parpa2 = 1 To 50
Next parpa2
Next Parpadeo
End If
End Sub
¿Que es lo que hago mal?
Gracias por la ayuda.
Para Pedro: tu objeto es Casilladeverificación89 no CheckBox89, solo cambialo y funcionara.
Para Cesar: Gracias por los consejos. Te Cuento que sobre las variables y el poner por separado el "select" y la "propiedad" de una celda, es una mala costumbre que se me quedo de antaño, ya que mis primeras macros fueron hechas solo y casi sin lectura. Ya con el tiempo le di mas fuerte al leer y me meti a un curso de "Excel Expertos". Pero me quedo la mala costumbre.
Abraham
Que ondaaaaaa!
Sobre el sleep es una funcion API que puedes usarla en Excel, pero la documentación esta adaptada para C++, y es el siguiente link:
Http://msdn.microsoft.com/library/default. Asp? Url=/library/en-us/wcesdkr/html/wcesdkrSleep. Asp
He supuesto que conoces como implementar las funciones API, ya que como programador sabes usar Visual Basic y seguramente toda la suite de Visual Studio (considerando, además, que tomaste un curso de "Excel Expertos"), por eso no hago una mención innecesaria de su implementación. Puedes probar mi código y analizarlo si gustas.
Saludos!
He logrado que una celda cambie de color al pinchar un cuadro de verificacion, no obstante, cuando vuelvo a pinchar el cuadro (para desmarcarlo) la celda se queda del mismo color y no cambia al original.
Pregunta ¿Como puedo hacer que mi checkbox deje de la forma original a la modificada despues de desmarcarlo?
GRACIAS ¡
Lo que debes hacer es capturar el valor de la propiedad ColorIndex antes de que se ejecute el ciclo que le agrega el efecto de parpadeo.
Dim ColorInicial as Integer
ColorInicial =Range("i28"). Font. ColorIndex
Luego pones el código del ciclo que aparece en los "posts" anteriores.
Al final puedes poner una comprobación sobre si el checkbox no está marcado para reestablecer el color original.
If not CheckBox89. Value Then Range("i28"). Font. ColorIndex = ColorInicial
Listo, espero le funcione.
Alguien me puede ayudar co exportar una sola hoja de excel aotro libro de excel aunque en libro de origen tenga varias hojas
Es un código muy sencillo:
1. Primero seleccionas la hoja
Sheets("Exportar"). Select
2. Después le dices que la copie indicándole el nombre del libro de destino y la ubicación.
Sheets("Exportar"). Copy After:=Workbooks("Libro2"). Sheets("Hoja3")
3. Digamos que lo quieres para exportar la hoja activa
ActiveSheet. Copy After:=Workbooks("Libro2"). Sheets("Hoja3")
Espero le funcione.
Dos soluciones: 1 sencilla y una compleja
1. Sencilla: Formato condicional
Selecciona A3 y luego en la barra de menú Formato - Formato condicional, elijes la condición "valor de la celda menor o igual que 0" (cero) y defines un formato personalizado. Ahora bien, cambia el valor en A2 y observa el resultado
2. Compleja: VBA
Copia el sgte código en un módulo de VBA
Public datHora As Date
Public Const conIntervalo = 1 "un segundo
Public Const conRunMacro = "Tu_Sub" "tu proced.
Public acum As Integer "Acumulador
Sub StartTemporizador()
datHora = Now + TimeSerial(0, 0, conIntervalo)
"iniciar el temporizador
Application. OnTime _
Earliesttime:=datHora, _
Procedure:=conRunMacro, _
Schedule:=True
End Sub
Sub Tu_Sub()
Dim resultado As Integer
resultado = Range("a3"). Value
acum = acum + 1
If resultado <= 0 Then
If acum Mod 2 = 0 Then
Range("A3"). Font. ColorIndex = 3
Else
Range("A3"). Font. ColorIndex = 1
End If
If acum >= 32000 Then
acum = 0
End If
Else
Range("A3"). Font. ColorIndex = 1
End If
"reiniciar el temporizador
StartTemporizador
End Sub
Sub StopTemporizador()
On Error Resume Next
"desactivar el temporizador
Application. OnTime _
Earliesttime:=datHora, _
Procedure:=conRunMacro, _
Schedule:=False
End Sub
Ejecuta el procedimiento Tu_sub para ver cómo parapeda y luego cambia el valor en A2.
Para detenerlo, debes ejecutar Stop_temporizador.
Espero te sirva, saludos.
OK, ubícate en la celda A3.
En la barra de menú escoje Formato - Formato condicional.
Aparece una ventana, selecciona del primer cuadrito de izq a derecha "valor de la celda", en el segundo "menor o igual que" y por último en el tercero escribe el número cero.
Luego, localiza el botón con el nombre de formato y presiónalo en una ocasión. Ahora accedes a una ventana para el cambio de formato, ahí puedes cambiarle el color al texto por ejemplo.
Una vez que lo tienes listo, presionas el botón Aceptar.
Ahora cambia el valor de A2 por un valor más alto que A1 y observa lo que sucede.
Espero te sirva, saludos.
2. Compleja: VBA
Copia el sgte código en un módulo de VBA
Public datHora As Date
Public Const conIntervalo = 1 "un segundo
Public Const conRunMacro = "Tu_Sub" "tu proced.
Public acum As Integer "Acumulador
Sub StartTemporizador()
datHora = Now + TimeSerial(0, 0, conIntervalo)
"iniciar el temporizador
Application. OnTime _
Earliesttime:=datHora, _
Procedure:=conRunMacro, _
Schedule:=True
End Sub
Sub Tu_Sub()
Dim resultado As Integer
resultado = Range("a3"). Value
acum = acum + 1
If resultado <= 0 Then
If acum Mod 2 = 0 Then
Range("A3"). Font. ColorIndex = 3
Else
Range("A3"). Font. ColorIndex = 1
End If
If acum >= 32000 Then
acum = 0
End If
Else
Range("A3"). Font. ColorIndex = 1
End If
"reiniciar el temporizador
StartTemporizador
End Sub
Sub StopTemporizador()
On Error Resume Next
"desactivar el temporizador
Application. OnTime _
Earliesttime:=datHora, _
Procedure:=conRunMacro, _
Schedule:=False
End Sub
Ejecuta el procedimiento Tu_sub para ver cómo parapeda y luego cambia el valor en A2.
Para detenerlo, debes ejecutar Stop_temporizador.
Espero te sirva, saludos.
Ficheros adjuntos:
