Option Button

22/05/2007 - 23:49 por Luis | Informe spam
Qué tal??! Podrían ayudarme con lo siguiente??

En un formulario (UserForm1) tengo los siguientes controles: un
textbox1, un textbox2 y textbox3, y en otro formulario (UserForm2)
tengo dos option button opt1 y opt2.
Textbox1, textbox2 y textbox3 se cargan con valores (números con dos
decimales aunq es posible que alguno de ellos sea cero) deseo que al
escoger uno de los option button se sume inmediatamente cierto valor a
cada textbox (Si es opt1 se sume 15, si es opt2 se sume 21 a c/
textbox). He intentado hacerlo asociando un procedimiento al evento
click de cada optionbutton de la siguiente manera para cada option
button obviamente utilizando el valor correpondiente (15 o 21):

Sub opt1_Click()
If optX.value=true then
textbox1.text=val(textbox1.text)+15
textbox2.text=val(textbox2.text)+15
textbox3.text=val(textbox3.text)+15
Else
textbox1.text=val(textbox1.text)-15
textbox2.text=val(textbox2.text)-15
textbox3.text=val(textbox3.text)-15
End If
End Sub

Pero no funciona pues:
1. Al hacer click en uno de los option button SIEMPRE se tendrá un
valor TRUE por lo cual nunca entra a Else
2. Pensé en hacerlo de la siguiente manera (reitero dependiendo del
option button para opt2 sería -15+21):

Sub opt1_Click()
If optX.value=true then
textbox1.text=val(textbox1.text)-21+15
textbox2.text=val(textbox2.text)-21+15
textbox3.text=val(textbox3.text)-21+15
End If
End Sub

Pero qué sucede si he ingresado por 1era vez a UserForm2? No hay razón
para restar primero 21 y luego sumar los 15, se debería sólamente
sumar 15.

3. Imaginen que uno de los textbox tiene el valor cero al restar
-21+15 me quedaría -6!! y obviamente eso es incorrecto

Espero hayan comprendido mi inquietud y ojalá puedan ayudarme.


Saludos!!
 

Leer las respuestas

#1 Ivan
23/05/2007 - 01:27 | Informe spam
hola Luis,

a lo mejor estoy un poco espeso hoy, pero me he hecho un pequeño 'taco' con tu explicacion.

pero me imagino que lo que quieres en definitiva es que si eliges un optionButton te sume 15 a los textbox y si eliges
el otro te sume 21, pero solo una vez, osea que si cambias de opcion el valor del textbox sea el inicial mas 15 o 21
pero sin incrementarlo cada vez,

y si te medio entiendo, tampoco quieres que al iniciar el formulario, al estar un de los dos botones como predeterminado
no te incremente su respectiva cantidad hasta que tu hagas click real en uno de ellos.

para esto ultimo tienes la opcion de poner a false la prop. value de los dos opttion button en le mismo cuadro
propiedades, o via codigo, asi no dispararias el evento change ni click de los optionsB hasta que no hicieras click real
en ellos.

para el resto podrias usar la propiedad Tag del textbox (o una variable publica en un modulo normal) para almacenar el
valor del textbox antes de modificarlo con los optionbutton, actualizandola en el change del textbox pero
condicionandola con otra variable publica tipo boolean, para que no se actualice si los cambios se deben a los
optionbutton.

bueno, no se si se me entiende algo, pero si quieres prueba este ejemplo hecho con dos userform (pon su propiedad
showModal a false en el cuadro propiedades.)

1.- en el Userform1 pon un commandbutton (1) y un textbox (1) y en su modulo de codigo pega esto:

Private Sub CommandButton1_Click()
UserForm2.Show
End Sub

Private Sub TextBox1_Change()
If SumarVal Then Exit Sub
With TextBox1: .Tag = .Text: End With
End Sub

Private Sub UserForm_Initialize()
TextBox1.Tag = 0
End Sub

2.- en el userform2 pon los dos optionbutton(1 y 2) y en su modulo pega esto:


Private Sub UserForm_Initialize()
OptionButton1 = False
OptionButton2 = False
End Sub

Private Sub OptionButton1_Click()
SumarVal = True
With UserForm1.TextBox1
If OptionButton1 Then .Text = Val(.Tag) + 15
If OptionButton2 Then .Text = Val(.Tag) + 21
End With
SumarVal = False
End Sub

Private Sub OptionButton2_Click()
SumarVal = True
With UserForm1.TextBox1
If OptionButton1 Then .Text = Val(.Tag) + 15
If OptionButton2 Then .Text = Val(.Tag) + 21
End With
SumarVal = False
End Sub

3.- en el area de declaraciones de un modulo normal pon:

Public SumarVal As Boolean

espero te ayude, y si la consulta iba por otros derroteros, disculpa mi torpeza

un saludo
Ivan

Preguntas similares