Discussion:
Seleccionar dato de una lista
(demasiado antiguo para responder)
Carlos Gonzalez
2006-04-08 00:31:01 UTC
Permalink
Saludos.

Necesito restringir los datos de entrada de una celda a exclusivamente los
valores de una determinada lista (solo texto). He usado el comando validación
de datos en dicha celda y funciona correctamente.
El problema es que el mecanismo de busqueda dentro de la lista desplegable
es por medio de la barra de dezplazamiento y esto es dispendioso porque la
lista es muy larga. La cosa funcionaria mucho mejor si solo se mostraran en
la lista desplegable los valores que empiezen con el texto que uno le fuera
introduciendo.
Es esto posible y de serlo como podria hacerse??

Gracias de antemano
Héctor Miguel
2006-04-09 00:00:50 UTC
Permalink
hola, Carlos !

revisa si te es de utilidad algo de lo comentado en las siguientes conversaciones: -> http://tinyurl.com/z3euj

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Necesito restringir los datos de entrada de una celda a exclusivamente los valores de una determinada lista (solo texto).
He usado el comando validacion de datos en dicha celda y funciona correctamente.
El problema es que el mecanismo de busqueda dentro de la lista desplegable es por medio de la barra de dezplazamiento
y esto es dispendioso porque la lista es muy larga.
La cosa funcionaria mucho mejor si solo se mostraran en la lista desplegable los valores que empiezen con el texto que uno le fuera introduciendo.
Es esto posible y de serlo como podria hacerse?
Carlos Gonzalez
2006-04-09 02:34:01 UTC
Permalink
Hola, Hector !

Muchas gracias por la información. me ha sido de mucha utilidad.
Una vez revisada, encuentro ajustado completamente a mis necesidades lo
comentado en las conversaciones del 15 y 16 de septiembre de 2003 con José.
El problema es que no se codigo VBA suficiente como para escribir la solución.
Podrias darme otra mano?

Muchas Gracias.

Saludos

Carlos Gonzalez
Post by Héctor Miguel
hola, Carlos !
revisa si te es de utilidad algo de lo comentado en las siguientes conversaciones: -> http://tinyurl.com/z3euj
si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Héctor Miguel
2006-04-09 07:06:45 UTC
Permalink
hola, Carlos !
... encuentro ajustado... a mis necesidades lo comentado en... 15 y 16 de septiembre de 2003 con Jose.
... problema... no se codigo VBA suficiente como para escribir la solucion...
la propuesta del dia 15 contiene los pasos y los supuestos +/- 'claros y sencillos' [segun yo] para adaptar a otras necesidades -?-

los supuestos son:
- un listado de nombres en la hoja2
- una hoja1, donde se requiere 'validar' las celdas de la columna 1 ['A']

los pasos son:
- al listado en la hoja2 definirle [o asignarle] un nombre con referencia a un rngo 'dinamico' [sigue los pasos del ejemplo]
- incrustar en la hoja1 un control combo [lista desplegable] de la barra de herramientas 'cuadro de controles' [NO la de 'formularios']
- copiar/pegar los ejemplos [procedimientos vba] EN el modulo de codigo de la hoja1
puedes 'activar' dicho modulo de codigo [p.e.] con un click-secundario sobre la etiqueta con el nombre de la hoja1 -> ver codigo...

si lo anterior no te resultara +/- 'claro y sencillo' [segun yo] :))
comentas 'que parte' es la que no se entiende ? o... que diferencias existen entre los supuestos del ejemplo y la situacion 'real' ?
saludos,
hector.
Carlos Gonzalez
2006-04-09 13:39:02 UTC
Permalink
hola, Hector !

Gracias por tu ayuda.

Segui los pasos descritos y al principio no me funcionaba. Por prueba y
error funciona bien cambiando ListadoDeNombres de "=DesRef(Hoja2!a1..." a
"=DesRef(Hoja2!a$1..."
Este cambio es correcto?

De otra parte, abusando de tu colaboracion, ¿como haria para que cuando
escriba en el combo nombres
que no estan en el listado, ademas de "plantarlos" en la celda, lo anexe al
listado (de la hoja2)?

Nuevamente, gracias

Saludos

Carlos Gonzalez
Héctor Miguel
2006-04-10 00:14:29 UTC
Permalink
hola, Carlos !
... al principio no me funcionaba. Por prueba y error funciona bien cambiando ListadoDeNombres
de "=DesRef(Hoja2!a1..." a "=DesRef(Hoja2!a$1..." Este cambio es correcto?
al definir este tipo de nombres con referencia a rangos 'dinamicos' [o de/crecientes], se debe tomar en cuenta:
-> cual es la celda activa [por si necesitas usar multi-rangos dinamicos segun dicha celda activa]
en este caso [de hecho] seria mejor si cambias todas las referencias a rangos a referencias 'absolutas' [p.e.]
=dsesref(hoja2!$a$1,,,contara(hoja2!$a:$a))
... como haria para que cuando escriba en el combo nombres que no estan en el listado
ademas de "plantarlos" en la celda, lo anexe al listado (de la hoja2)?
agrega unas lineas en el evento '_lostfocus' del combobox en el modulo de codigo de la hoja1 [p.e.]
' el combo 'se vacia' [invariablemente] al 'terminar' la operacion '
Private Sub ComboBox1_LostFocus()
ComboBox1.ListFillRange = ""
ComboBox1.LinkedCell = ""
ComboBox1 = ""
' si el usuario introduce un dato 'nuevo'... lo agregamos al ListadoDeNombres '
If IsEmpty(ActiveCell) Then Exit Sub
With Worksheets("Hoja2").Range("ListadoDeNombres")
If Application.CountIf(.Offset, ActiveCell) = 0 Then _
.Offset(.Rows.Count).Resize(1, 1) = ActiveCell
End With
End Sub

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Carlos Gonzalez
2006-04-10 16:22:03 UTC
Permalink
Hola, Héctor !

Agregue las lineas que me indicaste y solo queda un detalle para alcanzar la
perfeccion:

Resulta que si el rango de datos de hoja 2 es por ejemplo a1:a100; la
primera vez que inserta un valor "via combo" lo hace en a102, la siguiente en
a103 y así sucesivamente. Pero si se elimina la fila del espacio (a101) y se
vuelve a insertar valores via combo, vuelve a dejar una fila vacia despues
del último valor. (por ejemplo insertando via combo 4 valores, el cuarto
quedaria en a105, al eliminar la fila (101) entonces el ultimo valor queda en
a104 y al volver a insertar via combo el nuevo dato queda en a106 y vacio
a105)

Como se puede mejorar?

Gracias,

Carlos Gonzalez
Héctor Miguel
2006-04-11 01:14:34 UTC
Permalink
hola, Carlos !
... queda un detalle
... si el rango... de hoja 2 es... a1:a100; la primera vez que inserta un valor "via combo" lo hace en a102
... si se elimina la fila del espacio (a101) y se vuelve a insertar... via combo, vuelve a dejar una fila vacia despues del ultimo valor...
1) el codigo 'toma la decision' de cual sera la fila donde se inserta el dato 'nuevo'... 'basado' en la formula del nombre:
=dessref(hoja2!$a$1,,,contara(hoja2!$a:$a)) [y que 'asume' lo siguiente]...
a) el primr nombre se encuentra en la celda 'A1' de la 'hoja2'
b) el rango 'se extiende' [o amplia] tantas filas como celdas 'NO-vacias' haya en la columna 'A' de la 'hoja2'

2) si el caso es que el codigo esta 'aumentando' una fila 'fantasma'... -> la primera vez que se agrega un dato 'via combo'...
[probablemente] existe una celda NO-vacia 'mas alla' del rango que 'ves' con el listado de los nombres -?-

comentas [si hubiera] algun detalle adicional ?
saludos,
hector.
Carlos Gonzalez
2006-04-11 13:14:02 UTC
Permalink
Hola, Héctor !

Tenias razón.

Como en la fila 1 de hoja2 coloque un titulo, y la fila 2 la deje en
blanco pra separarlo de los datos, modifique la formula del nombre así:

=desref(hoja2!$a$3,,,contara(hoja2!$a:$a)) .

Lo solucione así:
=desref(hoja2!$a$3,,,contara(hoja2!$a:$a)-1)

Ahora funciona perfecto!!

Muchas Gracias

Carlos Gonzalez

Loading...