Duda sobre filtrado utillizando Userform

14/11/2005 - 23:11 por Mk | Informe spam
Buen@s!!

Estoy haciendo una macro que en determinado momento "llama" a un
formulario que contiene 8 Textbox. En esos textbox se introducirán
valores que serán utilizados para realizar un filtrado avanzado, de modo
que solo se mostrarán las filas de la matriz que contengan los valores
introducidos.

Una de las muchas dudas que tengo es sobre el código para conseguir el
filtrado, ¿alguna pista o ejemplo del que pueda aprender a hacerlo?.

Muchas gracias.

Nota: En realidad he creado el código y me funciona pero de un modo
chapucero ya que lo hace correctamente solo si repito el último valor
que haya introducido en el ultimo textbox.

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
15/11/2005 - 06:55 | Informe spam
hola, Mk !

... un formulario que contiene 8 Textbox... para realizar un filtrado avanzado
... de las... dudas que tengo es sobre el codigo para conseguir el filtrado
... alguna pista o ejemplo del que pueda aprender a hacerlo?.
... el codigo... funciona pero de un modo chapucero ya que lo hace
... solo si repito el ultimo valor que haya introducido en el ultimo textbox.



1) [me parece que] hace falta que comentes si utilizas 'criterios' por formula... o por 'comparacion directa'
[y donde estan los rangos de la base de datos, los criterios, y si filtras 'en lugar' o copias a otro rango/hoja] -?-

2) con los datos que expones [me suena a que] probablemente algun textbox no esta siendo 'realmente' utilizado -?-
-> podrias empezar por revisar si todos los textboxes estan 'cumpliendo su cometido'...
[o si el codigo esta 'saltando' alguno/s, o quizas 'metiendo' el dato de uno... en el lugar 'del otro'] -?-

comentas [si hubiera] algun detalle 'en el tintero' ?
saludos,
hector.
Respuesta Responder a este mensaje
#2 Mk
15/11/2005 - 20:50 | Informe spam
Hola Hector Miguel!

Gracias por tiempo, te "pego" a continuación el código del formulario
para ver que te parece...(estoy seguro que hay una manera mas sencilla
de hacerlo pero ya te digo, soy novato en vb).


*********Copy&Paste**************

Private Sub CommandButton1_Click()
Rem Empty Limpia Los Textbox

TextBox1 = Empty
TextBox2 = Empty
TextBox3 = Empty
TextBox4 = Empty
TextBox5 = Empty
TextBox6 = Empty
TextBox7 = Empty
TextBox8 = Empty

Rem Textbox1.SetFocus Envía el cursor al Textbox1 para volver a capturar
los datos

TextBox1.SetFocus
End Sub


Private Sub CommandButton2_Click()

Dim k1 As String
Dim k2 As String
Dim k3 As String
Dim k4 As String
Dim k5 As String
Dim k6 As String
Dim k7 As String
Dim k8 As String

k1 = TextBox1.Value
k2 = TextBox2.Value
k3 = TextBox3.Value
k4 = TextBox4.Value
k5 = TextBox5.Value
k6 = TextBox6.Value
k7 = TextBox7.Value
k8 = TextBox8.Value


Range("H1:H9").Font.Color = RGB(255, 255, 255)
Range("H1").Select
ActiveCell.FormulaR1C1 = "VehicleNo"

If k1 <> "" Then
Range("H2").Value = k1
Range("H2").Font.Color = RGB(255, 255, 255)
End If


If k2 <> "" Then
Range("H3").Value = k2

Else
Range("A1:E599").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Range("H1:H2"), Unique:=True
End If



If k3 <> "" Then
Range("h4").Value = k3

Else

Range("H3").Select
ActiveCell.FormulaR1C1 = "SIN DATOS"
Range("A1:E599").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Range("H1:H3"), Unique:=True
End If



If k4 <> "" Then
Range("h5").Value = k4

Else

Range("H4").Select
ActiveCell.FormulaR1C1 = "SIN DATOS"
Range("A1:E599").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Range("H1:H4"), Unique:=True
End If



If k5 <> "" Then
Range("h6").Value = k5

Else

Range("H5").Select
ActiveCell.FormulaR1C1 = "SIN DATOS"
Range("A1:E599").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Range("H1:H5"), Unique:=True
End If



If k6 <> "" Then
Range("h7").Value = k6

Else

Range("H6").Select
ActiveCell.FormulaR1C1 = "SIN DATOS"
Range("A1:E599").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Range("H1:H6"), Unique:=True
End If



If k7 <> "" Then
Range("h8").Value = k7


Else

Range("H7").Select
ActiveCell.FormulaR1C1 = "SIN DATOS"
Range("A1:E599").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Range("H1:H7"), Unique:=True
End If



If k8 <> "" Then
Range("H9").Value = k8

Else

Range("H8").Select
ActiveCell.FormulaR1C1 = "SIN DATOS"
Range("A1:E599").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Range("H1:H8"), Unique:=True
End If



If k8 <> "" Then

Range("A1:E599").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Range("H1:H9"), Unique:=True
End If



End Sub

Private Sub CommandButton3_Click()
'Dim Cerrar As String
'Dim Cancel As String
'Cerrar = MsgBox("¿Estas seguro de que has introducido correctamente los
consignement?", 36, "SALIR")
'If msgvar <> 6 Then Cancel = True
'Unload.Formulario_Filtrado_AR1
'End If
End Sub

Private Sub TextBox1_Change()
Dim k1 As String
k1 = TextBox1.Value

End Sub

Private Sub TextBox2_Change()

Dim k2 As String
k2 = TextBox2.Value
End Sub

Private Sub TextBox3_Change()

Dim k3 As String
k3 = TextBox3.Value

End Sub

Private Sub TextBox4_Change()
Dim k4 As String
k4 = TextBox4.Value
End Sub

Private Sub TextBox5_Change()
Dim k5 As String
k5 = TextBox5.Value
End Sub

Private Sub TextBox6_Change()
Dim k6 As String
k6 = TextBox6.Value
End Sub

Private Sub TextBox7_Change()
Dim k7 As String
k7 = TextBox7.Value
End Sub

Private Sub TextBox8_Change()
Dim k8 As String
k8 = TextBox8.Value
End Sub


Private Sub UserForm_Click()

End Sub

****************************

Agradeceré cualquier sugerencia o incluso ejemplo de algo parecido que
alguien ya haya echo.

Gracias.
Respuesta Responder a este mensaje
#3 Héctor Miguel
16/11/2005 - 06:12 | Informe spam
hola, Mk !

... a continuacion el codigo del formulario
... (estoy seguro que hay una manera mas sencilla de hacerlo pero [...]
... cualquier sugerencia o incluso ejemplo de algo parecido que [...]



1) el poner en color de texto blanco [H1:H9] esta 'impidiendo' que 'veas' lo que -realmente- esta haciendo el codigo :))
2) observa que de las 8 variables [k1...k8] que asignas a cada textbox, y que se corresponden con las celdas H2...H9
-> en el evento '_click' del commandbutton1 les estas dando las siguientes 'ordenes'...
a) cada textbox contiene una instruccion if...then...else...end if [pero la diferencia a partir de k2 es que]...
b) si k2 no esta vacio... pegas su contenido en H3
si k2 SI esta vacio... ejecutas el filtro avanzado PERO considerando criterios SOLO en H1:H2 <= aqui es ok :))
c) si k3 no esta vacio... pegas su contenido en H4 PERO [y es aqui donde empiezan las 'discrepancias']...
si k3 SI esta vacio... REGRESAS a H3 y le pones 'SIN DATOS' => cuando le acababas de poner e valor de k2 <= OJO
'continuas' dentro del if.then.else y... ejecutas el filtro avanzado considerando criterios de H1:H3
... PERO 'recuerda' que a H3 le acabas de 'borrar' lo que contenia la variable k2 [o el textbox2]... :-((

haz pruebas SIN poner el color del texto en blanco y ve si el comportamiento REAL 'coincide' con tus intenciones :))

saludos,
hector.
Respuesta Responder a este mensaje
#4 Mk
16/11/2005 - 19:04 | Informe spam
Gracias de nuevo por tus observaciones Hector.

Tienes razón, pondré el color en negro por lo menos mientras desarrollo
la macro, cuando el funcionamiento sea satisfactorio casi seguro que
volveré a ponerlo en blanco u ocultar la columna que utilizo para pegar
los valores de los textbox.

Revisaré también con mas detenimiento el código, no había caido en la
discrepancia, como te decía soy novato y estoy dando mis primeros pasos
en vb, si tengo mas dudas volveré a postear.

Saludos

Mk
Respuesta Responder a este mensaje
#5 Mk
17/11/2005 - 18:15 | Informe spam
Ya lo he solucionado. Gracias por tus observaciones Hector.

Un saludo!!

Mk
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida