SetFocus rebelde

07/09/2006 - 03:44 por Ivan | Informe spam
Hola de nuevo a todos

Me ha surgido un 'extraño' problema con el SetFocus de un/unos
combobox de un formulario, al que no consigo hallar explicación.

Se trata de ocho combos 'asociados', por decirlo de alguna manera, por
parejas.

A ver si se explicarme:

los combos se cargan con el contenido de determinadas columnas de una
hoja de excel, que estan asociadas asi:

combo5 = columnaA=>Clave1-> combo1 = columnaB=>lo referenciado por
la clave1
combo6 = columnaC=>Clave2-> combo2 = columnaD=>lo referenciado por
la clave2
combo7 = columnaE=>Clave3-> combo3 = columnaF=>lo referenciado por
la clave3
combo8 = columnaG=>Clave4-> combo4 = columnaH=>lo referenciado por
la clave4

la cuestion es que cuando se introduce una entrada nueva(no
coincidente) en los combos 5, 6, 7 u 8, quiero que me mande el foco al
combo de la clave correspondiente para que introduzca la nueva clave,
pero no se que estoy haciendo mal que no lo consigo.

por ej. en los codigos que expongo a continuación, intento mandar el
foco del combo4 al combo8, pero se va al combo6. Por mas que he
revisado todos los codigos no encuentro la causa. Estos son los
codigos:

dim YaEsta as boolean

Private Sub cmbBalda_AfterUpdate()
If YaEsta = False Then
cmbClave4.SetFocus
MsgBox ("Tienes que introducir una nueva clave")
Exit Sub
End If
End Sub

Private Sub cmbBalda_Change()
With cmbBalda
YaEsta = .MatchFound
If YaEsta = True Then
cmbClave4.ListIndex = .ListIndex
Else
cmbClave4.ListIndex = -1
End If
End With
End Sub

cmbBalda seria el combo4 y cmbClave4 seria el combo8. Tambien he
probado en el evnto exit, pero hacia lo mismo pero con doble msgbox.

quizas este(el problema) en otras partes del codigo, pero por mas que
le doy vueltas no veo nada.

Si podeis ayudarme os lo agradezco.

un saludo y hasta pronto
ivan
 

Leer las respuestas

#1 Ivan
07/09/2006 - 23:14 | Informe spam
Hola Hector Miguel, y de nuevo muchas gracias.

si no te importa, hay una cosa que no acabo de tener claro en los
codigos:

Dim Ajustando As Boolean
Private Sub ComboBox1_Change()
Ajustando = True
ComboBox2.Clear
ComboBox2.List = Range(ComboBox1).Value
Ajustando = False
End Sub
Private Sub ComboBox2_Change()
If Ajustando Then Exit Sub
If Not ComboBox2.MatchFound Then _
MsgBox "Selecciona la categoria apropiada !!!": _
ComboBox1.SetFocus
End Sub



o me equivoco o ajustando siempre seria falso al salir del change del
combo1, ¿las variables booleanas se inicializan en verdadero al
declararlas, o dicho de otra manera, mientras no se declare lo
contrario?¿si no es asi como le puede llegar el valor verdadero al
combo2?

En cualquier caso creo que me puede valer algo parecido, aunque (sin
probarlo) no es exactamente lo que deseo que hagan los combos.

Lo que me gustaria es algo parecido a lo siguiente:

supongamos dos combos: ComboClave y ComboDefinicion

en un rango de dos columnas de una hoja inaccesible al usuario, se van
almacenando las nuevas entradas en los combos.

La cuestion es que si se va escribiendo en el comboClave(pej) vayan
apareciendo en el comboDefinicion (y viceversa) la definicion
correspondiente a la clave visualizada en el comboClave.

Esto no parece complicado al tener el mismo indice de fila en el rango
de origen(listindex=listindex), el problema es cuando no existe
coincidencia (digamos que se crea una nueva entrada) de lo escrito con
lo contenido en ese mismo combo, entonces me interesa que al salir del
combo (para dar pie a acabar de escribir lo que se desee, debe ser al
salir y no al desaparecer la coincidencia <MatchFound>), el foco se
vaya al otro combo para rellenar la definicion/clave que le corresponde
a la nueva entrada, y que a su vez no se borre lo escrito en el primer
combo, y asi poder cargarlo en la hoja al aceptar.

Por cierto los combos se llenan (al menos inicialmente) al
inicializarse el formulario.

Bueno no se si me he explicado, en cualquier caso muchas gracias, y si
ves algo te lo agradezco.

Un saludo y hasta pronto
Ivan

Preguntas similares