[Ayuda vb Excel] Proble con Textbox

17/12/2003 - 09:15 por Nilo | Informe spam
Hola,

tengo un pequeño problema,- que más parece un "bug" del excel que otra cosa
-, con los textbox de un formulario (de lo más sencillo); quizás alguien lo
haya visto...

El formulario se comporta perfectamente el 99% de las veces, pero de vez en
cuando, creo que siempre asociado a volver con el ratón a uno que has
dejado vacio, el cursor se "engancha" dentro de los textbox y se comporta
igual que si tuvieran un Cancel=True (aunque el textbox sólo tenga un
evento Exit que cambia el color de fondo)... El Intro no salta de campo y
el tabulador tabula dentro del textbox como si lo hubieras presionado
simultáneamente con el Control...

¿Alguien sabe por dónde van los "tiros" :?

Gracias.

Un saludo

Nilo

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
17/12/2003 - 09:53 | Informe spam
hola, Nilo !

... problema ... parece un "bug" ... con los textbox de un formulario [...]
... se comporta perfectamente el 99% de las veces, pero de vez en cuando
... creo que siempre asociado a volver con el raton a uno que has dejado vacio
... el cursor se "engancha" dentro de los textbox ... igual que si tuvieran un Cancel=True
... (aunque el textbox solo tenga un evento Exit que cambia el color de fondo)
... El Intro no salta de campo y el tabulador tabula dentro del textbox como ... con el Control [...]



'manejar' los eventos '_Enter' y '_Exit' tiene [en ocasiones] algunas implicaciones 'confusas' :((
¿podrias transcribir [todos] los codigos 'relacionados' con los textboxes?
[el menos, los de los textboxes que 'presentan fallas' ocasionales]

saludos,
hector.
Respuesta Responder a este mensaje
#2 Nilo
17/12/2003 - 10:49 | Informe spam
"Héctor Miguel" wrote in
news:e6nI#:

...
'manejar' los eventos '_Enter' y '_Exit' tiene [en ocasiones] algunas
implicaciones 'confusas' :(( ¿podrias transcribir [todos] los
codigos 'relacionados' con los textboxes? [el menos, los de los
textboxes que 'presentan fallas' ocasionales]


...

Hola Hector,

Gracias por contestar. Tú siempre ahí... :) Claro que puedo, pero que
sepas que pasa con los tres textbox que tiene el form accesibles al
usuario (textBox2, 3 y 5)... Aunque siempre es volviendo con el ratón
sobre el TextBox5... y lo peor... cuando me pasa, cierro el formulario,
lo vuelvo a poner en marcha y SOY INCAPAZ de reproducir el bug... :( Y
tampoco sé que código hay que emplear para conseguir que el tabulador
tabule dentro de un textbox y no salte al siguiente, como a mi me
pasa... por eso pensaba en alguna anomalia ajena a mi código...

Los textBox 7 y 8 tienen el Locked=true, así que lo único que hacen es
calcular algún resultado. Y el TextBox6 tiene el TabStop en False
(aunque el Locked sea False), así que no le creo implicado ya que nunca
había entrado en él cuando aparece el bug... Transcribo la
inicialización por si acaso...


Private Sub UserForm_Initialize()
ComboBox1.AddItem " "
ComboBox1.AddItem "Concepto1"
ComboBox1.AddItem "Concepto2"
ComboBox1.AddItem "Concepto3"
ComboBox1.AddItem "Concepto4"
ComboBox1.AddItem "Concepto5"
ComboBox1.AddItem "Concepto6"
ComboBox1.AddItem "Concepto7"
ComboBox1.AddItem "Concepto8"
ComboBox1.ListIndex = 0
TextBox8.BoundValue = Format((TextBox2 / ((TextBox6 + 100) / 100)),
"#,##0.00 €;[Red]-#,##0.00 €")
TextBox7.BoundValue = EnLetras((Round(Abs(TextBox8), 2)) & "")
Fecha = Range("Principal!C1")
TextBox3.BoundValue = Format(Fecha, "d mmm yyyy")
Dim NombreHojaInicial, NOMBREH As String
Dim Actualizo, Evaluar As Boolean
Evaluar = True
NombreHojaInicial = ActiveSheet.Name
Me.LabelNombre.BoundValue = NombreHojaInicial
If NombreHojaInicial = "Principal" Then Let Actualizo = False Else
Let Actualizo = True
Me.LabelActualizo.BoundValue = Actualizo

End Sub


Private Sub TextBox5_Exit(ByVal Cancel As MSForms.ReturnBoolean)
TextBox5.BackColor = &HFFFFC0
End Sub


Private Sub TextBox3_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii = Asc(".") Then
KeyAscii = Asc("/")
End If
End Sub


Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Not IsDate(TextBox3) Then
TextBox3.BackColor = &HC0C0FF
MsgBox ("La FECHA introducida no es correcta!!!"),
vbExclamation + vbOKOnly, "ERROR"
Cancel = True
Else
TextBox3.BoundValue = Format(TextBox3, "d mmm yyyy")
TextBox3.BackColor = &HFFFFC0
End If
End Sub


Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii = Asc(".") Then
KeyAscii = Asc(",")
End If
End Sub

Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
On Error GoTo FIN
TextBox2.BoundValue = Format(TextBox2, "#,##0.00 €;[Red]-#,##0.00
€")
TextBox2.BackStyle = fmBackStyleOpaque
TextBox7.BackStyle = fmBackStyleOpaque
TextBox8.BackStyle = fmBackStyleOpaque
If Sgn(TextBox2) <> -1 Then
TextBox2.BackColor = &HFF0000
TextBox2.ForeColor = &HFFFFFF
TextBox7.BackColor = &HFF0000
TextBox7.ForeColor = &HFFFFFF
TextBox8.BackColor = &HFF0000
TextBox8.ForeColor = &HFFFFFF
Else
TextBox2.BackColor = &HFF&
TextBox2.ForeColor = &H400040
TextBox7.BackColor = &HFF&
TextBox7.ForeColor = &H400040
TextBox8.BackColor = &HFF&
TextBox8.ForeColor = &H400040
End If
FIN:
If Not IsNumeric(TextBox2) Or TextBox2 = 0 Then
TextBox7.BoundValue = "¡ El importe TOTAL no es
correcto!!!"
TextBox7.BackColor = &HC0C0FF
TextBox7.ForeColor = &H80000012
MsgBox ("El importe TOTAL no es correcto!!!"),
vbExclamation + vbOKOnly, "ERROR"
TextBox2.BackColor = &HC0C0FF
Cancel = Evaluar
GoTo FIN2
Else
If Sgn(TextBox2) <> -1 Then
TextBox7.BackColor = &HFF0000
TextBox7.ForeColor = &HFFFFFF
Else
TextBox7.BackColor = &HFF&
TextBox7.ForeColor = &H400040
End If
End If
TextBox8.BoundValue = Format((TextBox2 / ((TextBox6 + 100) / 100)),
"#,##0.00 €;[Red]-#,##0.00 €")
If Sgn(TextBox2) = -1 Then signo = "(menos) -" Else signo = ""
TextBox7.BoundValue = signo & EnLetras((Round(Abs(TextBox8), 2)) &
"")

FIN2:
End Sub



Private Sub TextBox6_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Not IsNumeric(TextBox6) Then
TextBox6.BackColor = &HC0C0FF
MsgBox ("El porcentaje introducido no es correcto!!!"),
vbExclamation + vbOKOnly, "ERROR"
Cancel = Evaluar
Else
TextBox6.BackColor = &HFFFFC0
End If
FIN:
End Sub

Private Sub TextBox6_Change()
On Error GoTo FIN
TextBox8.BoundValue = Format((TextBox2 / ((TextBox6 + 100) / 100)),
"#,##0.00 €;[Red]-#,##0.00 €")
TextBox7.BoundValue = EnLetras((Round(Abs(TextBox8), 2)) & "")
FIN:
End Sub


Muchas gracias por las molestias que te tomas.

Un saludo cordial,
Nilo
Respuesta Responder a este mensaje
#3 Héctor Miguel
18/12/2003 - 07:45 | Informe spam
hola, Nilo !

... pasa con los tres textbox que tiene el form accesibles al usuario (textBox2, 3 y 5)...
... siempre es volviendo con el raton sobre el TextBox5... y lo peor...
... cuando me pasa, cierro el formulario, lo vuelvo a poner en marcha y SOY INCAPAZ de reproducir el bug... :(
... tampoco se que codigo ... emplear para ... que el tabulador tabule dentro de un textbox y no salte al siguiente
... como a mi me pasa... por eso pensaba en alguna anomalia ajena a mi codigo [...]



debo decirte [con mucha 'pena'] que... tampoco me fue posible reproducir el 'bug' [aunque dudo que se trate de un bug] :\
sin embargo... algunas observaciones que pudieran [posiblemente] 'darte pistas' para encontrar la falla o 'mejorar' el codigo:

1.- utilizas una variable booleana [Evaluar] para posteriormente 'cancelar' la 'salida' de TextBox2 y 6 en el evento '_Exit'
'pero'... la declaras en el evento '_Initialize' del formulario, con lo cual 'se muere' al finalizar el codigo del evento
:((
cuando la 'usas' en el evento [Exit] del TextBox-X, se ha 'convertido' en 'False' [NO 'True' como la habias 'establecido']
=> de todas maneras 'puedes moverte' al siguiente control... ¿no??? < 'como si' la declararas 'implicitamente' en el evento [Exit] del TextBox-X [en 'False' -por omision-] :((
para 'poder' usarla en distintos procedimientos, necesitas 'declararla' como 'Public' [de preferencia] en un modulo 'normal'

2.- utilizas la propiedad 'BoundValue' [en lugar del 'simple' Value] para 'establecer/modificar' el contenido de los TextBoxes
esa propiedad [si revisas la ayuda en vba] se refiere al valor que tiene el control 'justo al recibir' el enfoque
seria 'mejor' utilizarla [p.e.] para 'regresar' un control a su valor 'inicial' si el usuario 'se da cuenta' de algun error
=> [p.e. si el TextBox3 =>una fecha<= se 'edita' incorrectamente y el usuario quisiera 'cancelar' la edicion [con {Esc}] ... <Private Sub TextBox3_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii = 27 Then TextBox3 = TextBox3.BoundValue
End Sub

3.- me imagino que hay 'otros' TextBoxes en el formulario que [posiblemente] 'manipulan otros' TextBoxes [???]
si manejas [tambien] eventos en 'esos' otros TextBoxes... podria haber 'conflictos' entre 'entradas y salidas' de ellos :((

espero que lo poco que puedo 'aportar' en este momento te pueda servir [al menos] como base de 'discernimiento' :))
si cualquier duda [o 'nuevos' datos]... ¿comentas?

saludos,
hector.
Respuesta Responder a este mensaje
#4 Nilo
18/12/2003 - 08:43 | Informe spam
"Héctor Miguel" wrote in
news::
...
debo decirte [con mucha 'pena'] que... tampoco me fue posible
reproducir el 'bug' [aunque dudo que se trate de un bug] :\ sin
embargo... algunas observaciones que pudieran [posiblemente] 'darte
pistas' para encontrar la falla o 'mejorar' el codigo:




Hector, muchísimas gracias; se aprende más contigo (y con Fernando;) en un
sólo mail que con cualquier manual en 100 páginas :)

Creo que escribiré el código del formulario de nuevo siguiendo tus
consejos. Y es que lo poco que yo sé de vb lo he aprendido a base de
acudir a la ayuda y de cientos de pruebas/contrapruebas... De esta manera,
cuando algo te funciona, no te paras a mirar si sería mejor hacerlo de otro
modo...

Un saludo cordial,
Nilo
Respuesta Responder a este mensaje
#5 Héctor Miguel
18/12/2003 - 09:25 | Informe spam
hola, Nilo !

... gracias [...]



se agradece el comentario por todos los que participamos 'ampliando las dudas' :))

... lo ... que yo se de vb lo he aprendido a base de ... la ayuda y de cientos de pruebas/contrapruebas [...]



haciendo 'honor a la verdad'... [yo creo que...]
todos nos seguimos 'dando de topes' [inclusive con la ayuda], pero...
'seguimos en el camino' [y aprendiendo constantemente] :))

saludos,
hector.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida