change en CommandBarComboBox

02/10/2006 - 03:43 por Ivan | Informe spam
Hola a todos

tengo unas dudas con unos combox de barra de menus, a ver si podeis
echarme una mano:

tengo dos CommandBarComboBox, uno se carga con los titulos de columna
de una hoja y el otro con los registros de la columna seleccionada en
el 1º. Hasta aqui todo mas o menos bien, pero:

¿como consigo que se despliegue la lista al entrar en el combo, o al
menos al teclear algo? no consigo hallar algo parecido al dropdown de
los combos normales

¿como hago para borrar el contenido (al menos el visible) del 2º si
la entrada del 1º no coincide con ningun titulo o es =""? por lo que
me da la impresion la prop. onaction solo se dispara cuando se sale del
combo, o al menos a eso achaco mis fracasos por ese lado. He visto que
tienen el evento change, pero por la ayuda creo entender que implica el
uso de modulos de clase, y no tengo ni idea de como hacerlo.

¿hay alguna forma de 'atrapar el change' sin usar el change? la verdad
es que suena tonto, pero creo que se me entiende, lo mismo hay alguna
manera. Y, de no ser asi, ¿como pudo hacerlo via modulo de clase, si
no es excesivamente complicado?

Si podeis ayudarme os lo agradezco

Un saluo y hasta pronto
Ivan

Dim opCmbFiltrar As CommandBarComboBox
Dim opCmbFiltrado As CommandBarComboBox

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
02/10/2006 - 04:10 | Informe spam
hola, Ivan !

tengo unas dudas con unos combox de barra de menus...
... uno se carga con los titulos de columna de una hoja y el otro con los registros de la columna seleccionada..
como consigo que se despliegue la lista al entrar en el combo, o al menos al teclear algo?



-> cuando el usuario 'accione' el CommandBarComboBox, 'la lista'... ya debera estar 'ahi' :))

como hago para borrar el contenido (al menos el visible) del 2 si la entrada del 1 no coincide con ningun titulo o es =""?
me da la impresion la prop. onaction solo se dispara cuando se sale del combo, o al menos a eso achaco mis fracasos por ese lado.
He visto que tienen el evento change, pero por la ayuda creo entender que implica el uso de modulos de clase, y no tengo ni idea...



-> a) la propiedad [.onaction] lo que 'determina' es [simplemente] cual es la macro asociada a la accion del CommandBar<button>
b) para borrar/re/poner/... el contenido de un CommandBarComboBox necesitaras de procedimientos 'auxiliares/intermedios/...'

hay alguna forma de 'atrapar el change' sin usar el change? la verdad es que suena tonto, pero creo que se me entiende...



-> si te refieres a 'evitar' que se dispare el evento '_change' de un control [mientras se esta 'actualizando' por 'otros' codigos]...
a) prueba estbleciendo una variable 'publica' de tipo Boolean [en un modulo de codigo 'general']
b) establecela como True -> en los procedimientos que pudieran 'disparar' el evento '_change' de cualquier control
c) 'devuelvela' como False -> al finalizar el procedimiento que modifica el contenido del CommandBarComboBox
d) 'atrapa' el estado de la variable -> como primera linea en el procedimiento '_change' del control [p.e.]
If Mi_Variable = True Then Exit Sub

... de no ser asi, como pudo hacerlo via modulo de clase, si no es excesivamente complicado?



-> [hasta donde se]... los modulos 'de clase', [ya de por si] no son lo 'suficientemente'... sencillos ?
[creo que calificarlos de... 'excesivamente'... complicados ? va a depender de otro tipo de 'factores' y circunstancias] :D

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#2 Ivan
02/10/2006 - 21:10 | Informe spam
hola Héctor Miguel , como siempre muchas gracias (disculpas
anticipadas por la extension)

creo que no me he explicado demasiado bien en mi consulta. los dos
combos, que son unicos en un submenu, parecen llenarse sin problemas y
funcionan (parece) bien. El fin de esto es que la hoja se vaya
filtrando con las coincidecias que se vayan escribiendo en el 2º
combo, y a ser posible sobre la marcha, osea, que se vayan viendo los
cambios en la hoja (de momento estoy probando sin los filtros)

Te comento:

-> cuando el usuario 'accione' el CommandBarComboBox, 'la lista'... ya debera estar 'ahi' :))





el tema es que al entrar al combo creo que al principio se
desplegaba sola la lista desplegable (tampoco lo puedo asegurar, pues
en ese momento andaba en derroteros previos y no preste mucha atencion)
cosa que ya no ocurre y no se como conseguirlo sin tener que recurrir a
la flechita.

¿quizas para este 1er combo iria mejor un control dropdown ( lo he
intentado, pero cometo algun fallo y me da diversos errores,y en la
ayuda no consigo encontrar la causa), dado que las opciones seran
siempre las mismas?

el combo1 lo relleno al crear la barra de menus (por cierto, ¿no se
pueden usar matrices o rangos como en los combos de form.?) de esta
forma:

With opFiltrar
.Clear
For in1 = 1 To 26
lt = Chr(64 + in1)
.AddItem Worksheets("Hoja1").Range(lt & 1).Value
Next
End With

-> b) para borrar/re/poner/... el contenido de un CommandBarComboBox necesitaras de





procedimientos 'auxiliares/intermedios/...'

luego en .OnAction del combo1 tengo el procedimiento
"LlenarCmbFiltrado":

Sub LlenarCmbFiltrado()
Dim lt As String, in1 As Single
Dim Celda As Range, ul As Integer
With Worksheets("Hoja1")
For in1 = 1 To 26
lt = Chr(64 + in1)
If .Range(lt & 1).Value = opFiltrar.Text Then Exit For
Next
opCmbFiltrado.Clear
ul = .[a65536].End(xlUp).row
For Each Celda In .Range(lt & "2:" & lt & ul)
opCmbFiltrado.AddItem Celda.Value
Next
End With
Set Celda = Nothing
End Sub

que rellena el 2º combo con los registros del campo elegido en el
1º, pero el procedimiento solo parece ejecutarse al salir del combo, y
no al ir cambiando la propiedad ¿text? como yo pensaba.

De ahi el intentar recurrir al evento change, para que si por lo que
fuera se volviese al combo1 desde el combo2, se 'borrase' lo que haya
en este en cuanto empiece a cambiar el contenido del combo1, y no al
volver a salir de el.

ademas me temo que para ir 'actualizando' el filtro sobre la marcha y
que este se refleje en la hoja segun se vaya escribiendo en el combo2
tambien me va a hacer falta algo parecido al change.

-> si te refieres a 'evitar' que se dispare el evento '_change' de un control [mientras se esta 'actualizando' por 'otros' codigos]...



aunque tras leer tu respuesta 'creo' que quizas no me halla enterado
muy bien, en realidad me referia a algun truco que hiciera la funcion
del change del propio combo, pues por la ayuda, y tras varios intentos
infuctuosos con procedimientos tipo " Sub opCmbFiltrar_Change" en un
modulo normal, me habia parecido entender que para crear procedimientos
de eventos de barra de comandos, habia que recurrir a los modulos de
clase.. ¿no es asi?

-> [hasta donde se]... los modulos 'de clase', [ya de por si] no son
lo 'suficientemente'... sencillos ?
[creo que calificarlos de... 'excesivamente'... complicados ? va a depender de otro tipo de 'factores' y circunstancias] :D



y aqui esta el problema, que para que no se me siga eternizando el
proyecto que tengo entre manos, he decidido aparcar el posible intento
de comprension de los modulos de clase ( junto al de las APIs -gracias
por los enlaces, me han servido para una primera toma de contacto-)
hasta tenerlo terminado, y ya de paso, hasta estar un poco menos verde
en estas lides.

bueno, disculpa este rollo, pero si puedes decirme como aplicar los
cambios en un comando combobox en 'tiempo real', te lo volvere a
agadecer una vez mas

muchas garcias en cualquier caso

un saludo y hasta pronto
Ivan
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida