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

#6 Héctor Miguel
30/08/2006 - 05:45 | Informe spam
hola, Ivan !

1) [hasta donde se] los autofiltros SOLO pueden filtrar numeros por comparacion 'directa' [=, >, <, >=, <=]

2) si 'realmente' necesitas autofiltrar campos/columnas por numeros 'intermedios'...
es necesario 'crear' una columna 'espejo' con la funcion: [p.e.] =texto(a2,"0")
y hacer el filtrado -> sobre la nueva columna [que seran textos] ;)

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

Creo que en lo referido a los numeros me vale como esta, pero la
informacion me viene de perlas.

En cuanto al control DTPicker, ya lo he cargado en el cuadro de
herramientas, pero no se carga la ayuda. ¿Sabes si existe alguna forma
de cargarla?. O alguna forma de buscar informacion sobre sus
propiedades.

En cualquier caso muchas gracias.

Un saludo y hasta pronto.
Ivan
Respuesta Responder a este mensaje
#8 Héctor Miguel
30/08/2006 - 11:57 | Informe spam
hola, Ivan !

En cuanto al control DTPicker, ya lo he cargado en el cuadro de herramientas, pero no se carga la ayuda.
Sabes si existe alguna forma de cargarla?. O alguna forma de buscar informacion sobre sus propiedades.



[hasta donde se]... el control es parte de los activex 'licenciados' en VB [stand-alone] o...
disponibles en la libreria ComCtl[32].OCX [desde la version office/excel/2000 'developer'] :))
y el archivo de ayuda es en el 'viejo' formato html de las versiones anteriores [win-help]

[creo que] las propiedades 'necesarias' son -bastante- 'intuitivas' :)) [de cualquier modo]...
revisa si te sirve la informacion de las siguientes paginas:

How to use the DateTimePicker control in Visual FoxPro
http://support.microsoft.com/defaul...s%3B259646

http://www.devx.com/vb2themax/CodeDownload/19795

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#9 Ivan
30/08/2006 - 21:31 | Informe spam
Hola Hector Miguel, como siempre tu ayuda es impagable.

Voy a ver lo que saco del dtpicker.

Muchas gracias y hasta pronto
Ivan
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida