Criterio alfanumerico para filtro

28/08/2006 - 18:36 por Ivan | Informe spam
Hola a todos de nuevo.

Tengo un formulario con dos combobox y un listbox que funcionan de la
siguiente manera:

1.- en el 1er combo (cmbElegir) se cargan, al abrirse el formulario,
los titulos de campo (26 en total) de una hoja de excel.

2.-en el 2º combo (cmbCriterio) se cargan las entradas del campo
seleccionado en el 1ª.

3.- en el listbox (lstSeleccionar-> multiselect de 4 columnas) se
cargan, segun se va tecleando en el 2º combo, las columnas A, B, C y D
de todas las coincidencias de lo tecleado. Se utiliza Autofiltro y como
criterio1 lo introducido en el 2º combo y un comodin (*).

Pej: si elijo el campo "Nombre" en el 1er combo y en el hay estas
entradas:

Pepe
Juan
Pablo

-> al teclear "p" en el 2º combo aparecera en el listbox lo que haya
en las columnas A,B,C y D de los registros Pepe y Pablo -> si a
continuacion tecleo la "a" ( o sea "pa" en total) apareceran solo las
correspondientes a Pablo.

Todo funciona perfectamente excepto cuando los valores del campo
elegido como criterio comienzan por un digito. He hecho numerosas
pruebas intentando convertir los 'valores' a 'valor' y a la inversa,
pero no logro que me reconozca? los numeros como criterio de filtro y
me cargue las columnas correspondientes en el listbox. En el 2º combo
si se carga el campo correspondiente. La mayoria de los campos son de
texto, pero hay varios de fecha, y fundamentalmente el 1ª (columnaA)
es un nº unico que se corresponde con el nº de ficha y que actua como
campo clave .(por cierto, la propiedad matchentry esta establecida a
none.)

No se si me he explicado, pero en cualquier caso aqui va el codigo del
2º combo, en el que creo que esta el problema. En el , como
comentario, esta uno de los intentos de conversion a valor del criterio
de filtrado.

Private Sub cmbCriterio_Change()
Dim Patron As String
If cmbCriterio = "" Then
lstSeleccionar.Clear: txtNroLibros = 0
Exit Sub: End If
Application.ScreenUpdating = False
' If IsNumeric(Val(cmbCriterio)) Then
' Patron = Val(cmbCriterio)
' Else
Patron = cmbCriterio
' End If
tiempo = Timer * 1000
With lstSeleccionar
.Clear
With Worksheets("Oculta")
.UsedRange.EntireRow.Delete
With Worksheets(HojaBusqueda)
If .AutoFilterMode Then .AutoFilterMode = False
.UsedRange.AutoFilter
If .AutoFilterMode Then _
.Range("a1").CurrentRegion.AutoFilter _
Field:=cmbElegir.ListIndex + 1, _
Criteria1:=Patron & "*"
With .AutoFilter.Range
If .Rows.Count > 1 Then
On Error Resume Next
.SpecialCells(xlCellTypeVisible) _
.Copy Worksheets("Oculta").Range("a1")
On Error GoTo 0
Else
On Error Resume Next
.AutoFilterMode = False
On Error GoTo 0
Application.ScreenUpdating = True
Exit Sub
End If
End With
.AutoFilterMode = False
End With
If .Range("a2") <> "" Then
lstSeleccionar.List = .Range("a2:d" & _
.[a1].End(xlDown).Row).Value
Else
txtNroLibros = 0
End If
End With
lblTiempoCriterio.Caption = "Tarda " & Timer * 1000 - tiempo & "
m/s"
txtNroLibros = .ListCount
End With
Application.ScreenUpdating = True
End Sub

Si me podis echar una mano os lo agradezco.

Un saludo y hasta pronto
Ivan

PD: el codigo esta logrado gracias a la ayuda de este foro, y ya he
realizado varias consultas sobre el referentes a otros puntos, pero
siempre acaba por surgir un nuevo contratiempo. En cualquier caso mucha
gracias por lo conseguido hasta la fecha.

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
29/08/2006 - 06:14 | Informe spam
hola, Ivan !

... un formulario con dos combobox y un listbox que funcionan...
... en el 1er combo (cmbElegir)... los titulos de campo...
... en el 2do combo (cmbCriterio)... las entradas del campo seleccionado en el 1ero...
... en el listbox (lstSeleccionar-> multiselect de 4 columnas) se cargan, segun se va tecleando en el 2do combo
... columnas A, B, C y D de todas las coincidencias de lo tecleado utiliza Autofiltro...
... funciona... excepto cuando los valores del campo elegido como criterio comienzan por un digito...
... no logro que me reconozca los numeros como criterio de filtro y me cargue las columnas correspondientes en el listbox...
... La mayoria de los campos son de texto, pero hay varios de fecha, y fundamentalmente el 1ero (columnaA) es un no. unico
... se corresponde con el no. de ficha y que actua como campo clave...



1) si suponemos que los problemas llegan cuando quieres 'filtrar' FECHAS... -?-
los datos de la columna donde se encuentren dichas 'fechas'... deberan ser datos 'netamente' TEXTUALES... NO 'valores'
[supongo que 'los datos' son fechas 'reales'... independientemente del formato que les apliques para 'verlos'] -?-

2) si lo anterior es 'correcto'... [probablemente] necesitaras modificar los 'dato-fecha' [quizas] 'convertidos' a TEXTOS...
o... utilizar un tipo de control distinto de un combo-editable [que funciona igual que un textbox]
[p.e.] prueba con un control DTPicker -al menos- cuando se vaya tratar de filtrar por datos-fecha 'reales' ;)

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#2 Ivan
30/08/2006 - 03:02 | Informe spam
Hola Hector Miguel, muchas gacias de nuevo.

Lo cierto es que, aunque tengo varios campos de fecha y tampoco
conseguia usarlos como criterio, de momento todavia no habia llegado a
ese punto -que ya intuia complicado, y te agradezco me hayas puesto en
la ruta apropiada-, hasta ahora estaba centrado en el campo de la
columna "a" que consiste en un numero de serie que se corresponde con
el nº del libro (del proyecto que supongo recordaras, y que espero
poder enviarte en "breve", si no tienes inconveniente).

El problema es que no consigo entender por que, a pesar de convertir el
contenido del combo en numero no conseguia que me reconociera el
criterio. Lo curioso es que haciendolo a la inversa, o sea convirtiendo
todo el rango 'a' en texto tampoco me lo reconoce. En otros mucho
codigos del mismo proyecto no tengo ningun problema con cosas
similares, aunque no usandolo como criterio.

Ahora parece que con el operador xlor si lo reconoce como valor, pero
solo me devuelve el registro correspondiente a la entrada unica
coincidente.

Supongo que la culpa no esta en el uso del criterio, sino en algun
error del codigo que no consigo hallar. Por que me imagino que , igual
que con el texto, y ayudado por comodines, debe ser posible filtrar los
numeros que vayan coincidiendo con una entrada determinada. De todas
formas el filtrar por el nº de libro no me preocupa demasiado, pues si
sabes el nº lo suyo es ir directamente a el.

Ahora lo que me estoy temiendo es el tema de las fechas.

Respecto a estas, ¿como puedo cargar en el cuadro de aherramientas el
control DTPicker (la verdad es que las veces que he ido a cargar algun
control extra he acabado por no hacerlo al no tener nada claro cual es
cual), y se carga tambien la ayuda sobre el?

Bueno, disculpa por la tardanza en la respuesta, pero estoy un poco
liado y he tenido todo esto un poco abandonado. De aqui, junto con mi
continuo hacer y deshacer, y mi perenne inseguridad, la eternización
del proyecto de la biblioteca.

Muchas gracias de nuevo

Un saludo y hasta pronto
Ivan


Héctor Miguel ha escrito:

hola, Ivan !

> ... un formulario con dos combobox y un listbox que funcionan...
> ... en el 1er combo (cmbElegir)... los titulos de campo...
> ... en el 2do combo (cmbCriterio)... las entradas del campo seleccionado en el 1ero...
> ... en el listbox (lstSeleccionar-> multiselect de 4 columnas) se cargan, segun se va tecleando en el 2do combo
> ... columnas A, B, C y D de todas las coincidencias de lo tecleado utiliza Autofiltro...
> ... funciona... excepto cuando los valores del campo elegido como criterio comienzan por un digito...
> ... no logro que me reconozca los numeros como criterio de filtro y me cargue las columnas correspondientes en el listbox...
> ... La mayoria de los campos son de texto, pero hay varios de fecha, y fundamentalmente el 1ero (columnaA) es un no. unico
> ... se corresponde con el no. de ficha y que actua como campo clave...

1) si suponemos que los problemas llegan cuando quieres 'filtrar' FECHAS... -?-
los datos de la columna donde se encuentren dichas 'fechas'... deberan ser datos 'netamente' TEXTUALES... NO 'valores'
[supongo que 'los datos' son fechas 'reales'... independientemente del formato que les apliques para 'verlos'] -?-

2) si lo anterior es 'correcto'... [probablemente] necesitaras modificar los 'dato-fecha' [quizas] 'convertidos' a TEXTOS...
o... utilizar un tipo de control distinto de un combo-editable [que funciona igual que un textbox]
[p.e.] prueba con un control DTPicker -al menos- cuando se vaya tratar de filtrar por datos-fecha 'reales' ;)

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#3 Ivan
30/08/2006 - 03:02 | Informe spam
Hola Hector Miguel, muchas gacias de nuevo.

Lo cierto es que, aunque tengo varios campos de fecha y tampoco
conseguia usarlos como criterio, de momento todavia no habia llegado a
ese punto -que ya intuia complicado, y te agradezco me hayas puesto en
la ruta apropiada-, hasta ahora estaba centrado en el campo de la
columna "a" que consiste en un numero de serie que se corresponde con
el nº del libro (del proyecto que supongo recordaras, y que espero
poder enviarte en "breve", si no tienes inconveniente).

El problema es que no consigo entender por que, a pesar de convertir el
contenido del combo en numero no conseguia que me reconociera el
criterio. Lo curioso es que haciendolo a la inversa, o sea convirtiendo
todo el rango 'a' en texto tampoco me lo reconoce. En otros mucho
codigos del mismo proyecto no tengo ningun problema con cosas
similares, aunque no usandolo como criterio.

Ahora parece que con el operador xlor si lo reconoce como valor, pero
solo me devuelve el registro correspondiente a la entrada unica
coincidente.

Supongo que la culpa no esta en el uso del criterio, sino en algun
error del codigo que no consigo hallar. Por que me imagino que , igual
que con el texto, y ayudado por comodines, debe ser posible filtrar los
numeros que vayan coincidiendo con una entrada determinada. De todas
formas el filtrar por el nº de libro no me preocupa demasiado, pues si
sabes el nº lo suyo es ir directamente a el.

Ahora lo que me estoy temiendo es el tema de las fechas.

Respecto a estas, ¿como puedo cargar en el cuadro de aherramientas el
control DTPicker (la verdad es que las veces que he ido a cargar algun
control extra he acabado por no hacerlo al no tener nada claro cual es
cual), y se carga tambien la ayuda sobre el?

Bueno, disculpa por la tardanza en la respuesta, pero estoy un poco
liado y he tenido todo esto un poco abandonado. De aqui, junto con mi
continuo hacer y deshacer, y mi perenne inseguridad, la eternización
del proyecto de la biblioteca.

Muchas gracias de nuevo

Un saludo y hasta pronto
Ivan


Héctor Miguel ha escrito:

hola, Ivan !

> ... un formulario con dos combobox y un listbox que funcionan...
> ... en el 1er combo (cmbElegir)... los titulos de campo...
> ... en el 2do combo (cmbCriterio)... las entradas del campo seleccionado en el 1ero...
> ... en el listbox (lstSeleccionar-> multiselect de 4 columnas) se cargan, segun se va tecleando en el 2do combo
> ... columnas A, B, C y D de todas las coincidencias de lo tecleado utiliza Autofiltro...
> ... funciona... excepto cuando los valores del campo elegido como criterio comienzan por un digito...
> ... no logro que me reconozca los numeros como criterio de filtro y me cargue las columnas correspondientes en el listbox...
> ... La mayoria de los campos son de texto, pero hay varios de fecha, y fundamentalmente el 1ero (columnaA) es un no. unico
> ... se corresponde con el no. de ficha y que actua como campo clave...

1) si suponemos que los problemas llegan cuando quieres 'filtrar' FECHAS... -?-
los datos de la columna donde se encuentren dichas 'fechas'... deberan ser datos 'netamente' TEXTUALES... NO 'valores'
[supongo que 'los datos' son fechas 'reales'... independientemente del formato que les apliques para 'verlos'] -?-

2) si lo anterior es 'correcto'... [probablemente] necesitaras modificar los 'dato-fecha' [quizas] 'convertidos' a TEXTOS...
o... utilizar un tipo de control distinto de un combo-editable [que funciona igual que un textbox]
[p.e.] prueba con un control DTPicker -al menos- cuando se vaya tratar de filtrar por datos-fecha 'reales' ;)

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#4 Ivan
30/08/2006 - 03:02 | Informe spam
Hola Hector Miguel, muchas gacias de nuevo.

Lo cierto es que, aunque tengo varios campos de fecha y tampoco
conseguia usarlos como criterio, de momento todavia no habia llegado a
ese punto -que ya intuia complicado, y te agradezco me hayas puesto en
la ruta apropiada-, hasta ahora estaba centrado en el campo de la
columna "a" que consiste en un numero de serie que se corresponde con
el nº del libro (del proyecto que supongo recordaras, y que espero
poder enviarte en "breve", si no tienes inconveniente).

El problema es que no consigo entender por que, a pesar de convertir el
contenido del combo en numero no conseguia que me reconociera el
criterio. Lo curioso es que haciendolo a la inversa, o sea convirtiendo
todo el rango 'a' en texto tampoco me lo reconoce. En otros mucho
codigos del mismo proyecto no tengo ningun problema con cosas
similares, aunque no usandolo como criterio.

Ahora parece que con el operador xlor si lo reconoce como valor, pero
solo me devuelve el registro correspondiente a la entrada unica
coincidente.

Supongo que la culpa no esta en el uso del criterio, sino en algun
error del codigo que no consigo hallar. Por que me imagino que , igual
que con el texto, y ayudado por comodines, debe ser posible filtrar los
numeros que vayan coincidiendo con una entrada determinada. De todas
formas el filtrar por el nº de libro no me preocupa demasiado, pues si
sabes el nº lo suyo es ir directamente a el.

Ahora lo que me estoy temiendo es el tema de las fechas.

Respecto a estas, ¿como puedo cargar en el cuadro de aherramientas el
control DTPicker (la verdad es que las veces que he ido a cargar algun
control extra he acabado por no hacerlo al no tener nada claro cual es
cual), y se carga tambien la ayuda sobre el?

Bueno, disculpa por la tardanza en la respuesta, pero estoy un poco
liado y he tenido todo esto un poco abandonado. De aqui, junto con mi
continuo hacer y deshacer, y mi perenne inseguridad, la eternización
del proyecto de la biblioteca.

Muchas gracias de nuevo

Un saludo y hasta pronto
Ivan


Héctor Miguel ha escrito:

hola, Ivan !

> ... un formulario con dos combobox y un listbox que funcionan...
> ... en el 1er combo (cmbElegir)... los titulos de campo...
> ... en el 2do combo (cmbCriterio)... las entradas del campo seleccionado en el 1ero...
> ... en el listbox (lstSeleccionar-> multiselect de 4 columnas) se cargan, segun se va tecleando en el 2do combo
> ... columnas A, B, C y D de todas las coincidencias de lo tecleado utiliza Autofiltro...
> ... funciona... excepto cuando los valores del campo elegido como criterio comienzan por un digito...
> ... no logro que me reconozca los numeros como criterio de filtro y me cargue las columnas correspondientes en el listbox...
> ... La mayoria de los campos son de texto, pero hay varios de fecha, y fundamentalmente el 1ero (columnaA) es un no. unico
> ... se corresponde con el no. de ficha y que actua como campo clave...

1) si suponemos que los problemas llegan cuando quieres 'filtrar' FECHAS... -?-
los datos de la columna donde se encuentren dichas 'fechas'... deberan ser datos 'netamente' TEXTUALES... NO 'valores'
[supongo que 'los datos' son fechas 'reales'... independientemente del formato que les apliques para 'verlos'] -?-

2) si lo anterior es 'correcto'... [probablemente] necesitaras modificar los 'dato-fecha' [quizas] 'convertidos' a TEXTOS...
o... utilizar un tipo de control distinto de un combo-editable [que funciona igual que un textbox]
[p.e.] prueba con un control DTPicker -al menos- cuando se vaya tratar de filtrar por datos-fecha 'reales' ;)

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#5 Ivan
30/08/2006 - 03:06 | Informe spam
Esta vez me he superado, no se que ha pasado pero se han disparado 3
msjs. Lo siento.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida