Visual Basic - Crear un Filtro igual al que utiliza Excel utilizando un Listbox Multiselect

Life is soft - evento anual de software empresarial
   
Vista:

Crear un Filtro igual al que utiliza Excel utilizando un Listbox Multiselect

Publicado por Daniel Reinoso Danyreinoso@gmail.com (21 intervenciones) el 03/06/2015 13:30:40
Amigos quiero realizar un Filtrado de datos muy parecidos al Filtro de Excel donde Despliego en este caso en VB 6.0 un ListBox Multiselect, donde a medida que selecciono un dato ( Dato1 - Dato2 - Dato3) o los que quiera me va trayendo los datos a partir de la consulta abajo escrita, el tema es que me funciona y solo me muestra la ultima seleccion realizada, como hago para ver en la Grilla mas de un Dato seleccionado y que al deseleccionar el mismo se borre el dato obtenido? Muchas Gracias por la ayuda.-

con el For recorro el ListBox y obtengo el nombre del dato seleccionado y lo guardo en la Variable Nombre el cual utilizo como parametro de la consulta SQL abajo detallada. Espero que alguien me de una ayuda. Gracias
--------------------------------------------------------------------------------
ListBox - Multiselect

- Dato1
- Dato2
- Dato3
--------------------------------------------------------------------------------

Private Sub Lista_Click()
Dim i, xs, xx As Integer
Dim Nombre As String

On Error GoTo errores


For i = 0 To Lista.ListCount - 1
If Lista.Selected(i) = True Then
Nombre = Lista.List(i)
xs = Lista.SelCount
End If
Next i

rs.Open ("Select * From Proyectos where Ning= '" & Nombre & "' "), _
db, _
adOpenKeyset, _
adLockOptimistic, _
adCmdText
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Andres Leonardo

Crear un Filtro igual al que utiliza Excel utilizando un Listbox Multiselect

Publicado por Andres Leonardo (699 intervenciones) el 03/06/2015 19:09:32
Y si por cada elemento seleccionado mejor concatenas el SQL

For i = 0 To Lista.ListCount - 1
If Lista.Selected(i) = True Then
sqlstr = sqlstr & "Or campo = " Lista.List(i)
xs = Lista.SelCount
End If
Next i

Y asi solo que la primera vez no seria or... solo es una idea.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Crear un Filtro igual al que utiliza Excel utilizando un Listbox Multiselect

Publicado por Daniel Reinoso (21 intervenciones) el 03/06/2015 20:27:14
For i = 0 To Lista.ListCount - 1
If Lista.Selected(i) = True Then
sqlstr = sqlstr & "Or campo = " Lista.List(i)
xs = Lista.SelCount
End If
Next i

Amigo lo probe, el tema es que el For lee los datos elegidos en el Listbox de manera repetida y te muestra el ultimo elegido de la lista, en que fallara la sintaxis? Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Crear un Filtro igual al que utiliza Excel utilizando un Listbox Multiselect

Publicado por Daniel Reinoso danyreinoso@gmail.com (21 intervenciones) el 03/06/2015 20:25:06
For i = 0 To Lista.ListCount - 1
If Lista.Selected(i) = True Then
sqlstr = sqlstr & "Or campo = " Lista.List(i)
xs = Lista.SelCount
End If
Next i

Amigo lo probe, el tema es que el For lee los datos elegidos en el Listbox de manera repetida y te muestra el ultimo elegido de la lista, en que fallara la sintaxis? Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo

Crear un Filtro igual al que utiliza Excel utilizando un Listbox Multiselect

Publicado por Andres Leonardo (699 intervenciones) el 03/06/2015 21:20:05
PRUEBA CON ESTO
XAMBIA EL CODIGO A TU NECESIDAD RESPECTO AL COMANDO EL MIO ERA LIST1 EL TUYO LISTA Y ASI


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
'AQUI CORRES EL LIST Y GENERAS EL
Dim i, xs, xx As Integer
Dim Nombre, STRSQL As String
Dim PV As Boolean
PV = True
STRSQL = "Select * From Proyectos where Ning= '"
For i = 0 To List1.ListCount - 1
If Me.List1.Selected(i) = True Then
If PV Then
STRSQL = STRSQL & List1.List(i) & "'"
PV = False
Else
STRSQL = STRSQL & " OR '" & List1.List(i) & "'"
End If
xs = List1.SelCount
End If
Next i
 
MsgBox STRSQL
rs.Open (STRSQL), _
db, _
adOpenKeyset, _
adLockOptimistic, _
adCmdText
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Crear un Filtro igual al que utiliza Excel utilizando un Listbox Multiselect

Publicado por Daniel Reinoso danyreinoso@gmail.com (21 intervenciones) el 04/06/2015 19:32:51
El ultimo codigo me funciona bien, ahora quiero que solo me muestre los datos de solo los items seleccionados en el listbox si elijo3 solo quiero que me muestre los tres datos, copio a continuacion el codigo donde me muestra los datos en una grilla

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
Dim i, xs, xx As Integer
Dim Nombre, strSQL As String
Dim PV As Boolean
PV = True
 
    On Error GoTo errores
 
  strSQL = "Select * From Proyectos where Ning='"
 
  For i = 0 To Lista.ListCount - 1
      If Me.Lista.Selected(i) = True Then
            If PV Then
                strSQL = strSQL & Lista.List(i) & "'"
                PV = False
               Else
                strSQL = strSQL & " and '" & Lista.List(i) & "'"
            End If
            xs = Lista.SelCount
      End If
Next i
 
 
    rs.Open (strSQL), _
               db, _
               adOpenKeyset, _
               adLockOptimistic, _
               adCmdText
 
 
 
 
    '*********************************************************************************************
            If rs.RecordCount Then
                        MfOp.Rows = 0
                            i = rs.RecordCount
                            rs.MoveFirst
                               With MfOp
                                   MfOp.Visible = False
                                    .Cols = 19
                                    .Rows = i + 1
                                    .FixedRows = 1
                                    .ColWidth(0) = 0
                                    .ColWidth(1) = 1500
                                    .ColWidth(2) = 1000
                                    .ColWidth(3) = 1000
                                    .ColWidth(4) = 1000
                                    .ColWidth(5) = 1000
                                    .ColWidth(6) = 1000
                                    .ColWidth(7) = 1000
                                    .ColWidth(8) = 1000
                                    .ColWidth(9) = 1000
                                    .ColWidth(10) = 1000
                                    .ColWidth(11) = 1000
                                    .ColWidth(12) = 1000
                                    .ColWidth(13) = 1000
                                    .ColWidth(14) = 1000
                                    .ColWidth(15) = 1000
                                    .ColWidth(16) = 1000
                                    .ColWidth(17) = 1000
                                    .ColWidth(18) = 1000
 
                                    .Row = 0
                                    .Col = 0: .Text = "Numero"
                                    .Col = 1: .Text = "Nombre"
                                    .Col = 2: .Text = "Alimento Apr B"
                                    .Col = 3: .Text = "Costo Apr B"
                                    .Col = 4: .Text = "SNP B"
                                    .Col = 5: .Text = "Originales B"
                                    .Col = 6: .Text = "Copia Color B"
                                    .Col = 7: .Text = "Cromalin Apr B"
                                    .Col = 8: .Text = "ME en Pta B"
                                    .Col = 9: .Text = "1º Produccion B"
                                    .Col = 10: .Text = "Alimento Apr R"
                                    .Col = 11: .Text = "Costo Apr R"
                                    .Col = 12: .Text = "SNP R"
                                    .Col = 13: .Text = "Originales R"
                                    .Col = 14: .Text = "Copia Color R"
                                    .Col = 15: .Text = "Cromalin Apr R"
                                    .Col = 16: .Text = "ME en Pta R"
                                    .Col = 17: .Text = "1º Produccion R"
                                    .Col = 18: .Text = ""
 
 
                                End With
                For xs = 1 To i
 
                MfOp.Visible = False
                    With MfOp
                        .Rows = xs + 1
                        .Row = xs
                        .Col = 0: .Text = rs!NP
                        .Col = 1: .Text = "" & rs!nproyecto
                        .Col = 2: .Text = "" & rs!AliAprFB
                        .Col = 3: .Text = "" & rs!AliAprFR
                        .Col = 4: .Text = "" & rs!CosAprFB
                        .Col = 5: .Text = "" & rs!CosAprFR
                        .Col = 6: .Text = "" & rs!snpfb
                        .Col = 7: .Text = "" & rs!snpFR
                        .Col = 8: .Text = "" & rs!Orifb
                        .Col = 9: .Text = "" & rs!Orifr
                        .Col = 10: .Text = "" & rs!CCFB
                        .Col = 11: .Text = "" & rs!CCFR
                        .Col = 12: .Text = "" & rs!CrFB
                        .Col = 13: .Text = "" & rs!CrFr
                        .Col = 14: .Text = "" & rs!MEPlantaFB
                        .Col = 15: .Text = "" & rs!MEPlantaFR
                        .Col = 16: .Text = "" & rs!Pro1Fb
                        .Col = 17: .Text = "" & rs!Pro1Fr
 
 
                    End With
                    rs.MoveNext
 
                Next xs
 
                MfOp.Visible = True
             End If
 
             Nombre = ""
 
      rs.Close
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo

Crear un Filtro igual al que utiliza Excel utilizando un Listbox Multiselect

Publicado por Andres Leonardo (699 intervenciones) el 04/06/2015 20:56:02
Por que Usas AND no deberia ser OR
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Crear un Filtro igual al que utiliza Excel utilizando un Listbox Multiselect

Publicado por Daniel Reinoso danyreinoso@gmail.com (21 intervenciones) el 04/06/2015 20:59:49
Probe con ambos con OR me trae el total de registros que hay en la tabla...y usar el AND solo me trae uno
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo

Crear un Filtro igual al que utiliza Excel utilizando un Listbox Multiselect

Publicado por Andres Leonardo (699 intervenciones) el 04/06/2015 22:13:23
al terminar el for coloca un msgbox strSQL

Y mira si te esta sacando todos los items o solos los marcados ya que se supone solo deberia sacarte los marcados

ejemplo si seleccionaas 3 items deberia ser dos or adicionales o te saca todos los items??

1
2
3
4
5
6
7
8
9
10
11
For i = 0 To Lista.ListCount - 1
      If Me.Lista.Selected(i) = True Then
            If PV Then
                strSQL = strSQL & Lista.List(i) & "'"
                PV = False
               Else
                strSQL = strSQL & " and '" & Lista.List(i) & "'"
            End If
            xs = Lista.SelCount
      End If
Next i

msgbox strSQL ' aqui te debe decir el sql correcto como tu quieres, es mas deberias poderlo ejecutar sin problema directo si lo ejecuta desde la base de datos y mostrarte el codigo qeu deseas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Crear un Filtro igual al que utiliza Excel utilizando un Listbox Multiselect

Publicado por Daniel Reinoso danyreinoso@gmail.com (21 intervenciones) el 05/06/2015 21:18:08
Amigo lo utilice de varias maneras y me sigue trayendo todos los datos de la tabla utilizando el Or, la verdad que no se que estoy haciendo mal.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo

Crear un Filtro igual al que utiliza Excel utilizando un Listbox Multiselect

Publicado por Andres Leonardo (699 intervenciones) el 05/06/2015 21:42:26
pon el srtsql aqui lo otro seria por skype si tienes y no importa que te ayuden asi.

silver_axe007
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Crear un Filtro igual al que utiliza Excel utilizando un Listbox Multiselect

Publicado por Daniel Reinoso danyreinoso@gmail.com (21 intervenciones) el 05/06/2015 21:48:23
No tengo Skype amigo! voy a seguir probando y el lunes cualquier cosa te sigo molestando... Gracias desde Argentina Vos de donde sos??????
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo

Crear un Filtro igual al que utiliza Excel utilizando un Listbox Multiselect

Publicado por Andres Leonardo (699 intervenciones) el 05/06/2015 22:16:51
De Ecuador.

Pero insisto pega la sentencia SQL que se te genera a fin de ver si esta correcta
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Crear un Filtro igual al que utiliza Excel utilizando un Listbox Multiselect

Publicado por Daniel Reinoso danyreinoso@gmail.com (21 intervenciones) el 08/06/2015 15:40:42
Amigo sigo con problemas con este filtro y te sigo molestando a ti... probe con el Msgbox despues del For y me da lo siguiente:

Select * From Proyectos Where Ning='Nombre' or 'Nombre1' or 'Nombre2'

En este caso cuando elijo el primer or me muestra perfectamente el registro elegido, pero cuando elijo el segundo dato me muestra Todos los registros de la tabla, creo que el error esta en el Select y la sintaxis de busqueda, la cual no encuentro...!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo

Crear un Filtro igual al que utiliza Excel utilizando un Listbox Multiselect

Publicado por Andres Leonardo (699 intervenciones) el 08/06/2015 15:45:12
Es correcto es Error en la Sintaxis ....

prueba con la sentecia que concatena asi

strSQL = strSQL & " or ning = '" & Lista.List(i) & "'"
igual no quites el msgbox por que deberia quitar asi


Select * From Proyectos Where Ning='Nombre' or Ning= 'Nombre1' or Ning= 'Nombre2'


Adjunto codigo:

1
2
3
4
5
6
7
8
9
10
11
For i = 0 To Lista.ListCount - 1
      If Me.Lista.Selected(i) = True Then
            If PV Then
                strSQL = strSQL & Lista.List(i) & "'"
                PV = False
               Else
                strSQL = strSQL & " or ning = '" & Lista.List(i) & "'"            ' aqui ademas del or puse Ning =  era lo que faltaba
            End If
            xs = Lista.SelCount
      End If
Next i
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Crear un Filtro igual al que utiliza Excel utilizando un Listbox Multiselect

Publicado por Daniel Reinoso danyreinoso@gmail.com (21 intervenciones) el 09/06/2015 16:23:26
Amigo, funciona perfecto los detalles agregados me suma todo los items agregados a la grilla y tambien a medida que deselecciono los items se van borrando de la grilla, menos el ultimo (que me deberia dejar sin datos en la grilla) me da este error y no se como controlarlo el msgbox dice lo siguiente:

-2147217900 Error de sintaxis en la cadena en la expresion de consulta 'Ning=".

Aclaro este mensaje me aparece cuando deselecciono el ultimo items y el cual me deberia dejar sin datos en la grilla. Muchas Gracias Hermano Ecuatoriano y suerte en la Copa America.-
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo

Crear un Filtro igual al que utiliza Excel utilizando un Listbox Multiselect

Publicado por Andres Leonardo (699 intervenciones) el 09/06/2015 16:33:21
Q gusto que te haya servido .. quizas no es la mejor manera pero es funcional y eso es lo que vale .. cada dia aprendes diferentes maneras de hacer las cosas.. y bueno ahi esta la evolucion de esto... De nada estamos para ayudar cuando se puede y gracias y suerte para Uds.. aunque uds ya tienen a Messi jejejeje

Voviendo a la pregunta...

Leyendo lo que necesitas me parece que si nungun Item esta seleccionado en la lista se deberia es limpiar el grid .. siendo asi ... es por que la sentencia es erronea (ya que no concatenas nada ).... Entonces hay que validar ... que se validaria que Lista.selcount < 0

intenta con algo asi ....

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
For i = 0 To Lista.ListCount - 1
      If Me.Lista.Selected(i) = True Then
            If PV Then
                strSQL = strSQL & Lista.List(i) & "'"
                PV = False
               Else
                strSQL = strSQL & " or ning = '" & Lista.List(i) & "'"            ' aqui ademas del or puse Ning =  era lo que faltaba
            End If
 
            xs = Lista.SelCount
End If
Next i
 
'Esto es lo nuevo  debe estar justo antes de la 
If xs < 0 then  ' si no hay nada seleccionado en el list
 MfOp.Clear   ' Deberia tener un .clear  o algo que la limpie depende del control  
 Exit Sub        'salgo del procedimiento ya que si no hay nada .. no debo consultar nada solo limpiar
End if
'Aqui termina lo Nuevo
 
 
'Esto ya estaba 
    rs.Open (strSQL), _
               db, _
               adOpenKeyset, _
               adLockOptimistic, _
               adCmdText
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Crear un Filtro igual al que utiliza Excel utilizando un Listbox Multiselect

Publicado por Daniel Reinoso danyreinoso@gmail.com (21 intervenciones) el 11/06/2015 15:08:25
Amigo Ecuatoriano, Hoy gana el equipo Boricua contra Chile... y me va alegrar mucho...!!!
Vos sabes que estoy probando algo con el Filtro que me ayudaste a crear, lo que ahora pretendo hacer es que al abrir la pantalla donde tengo la grilla que muestra los datos me aparezcan todos los registros de la tabla pero a partir de que cada ListBox aparezca con Chek seleccionado por defecto y eso me permita ver TODOS los datos, Aqui va la pregunta como hago para que los items de listBox aparezcan por defecto seleccionados? Por ejemplo si en un listbox tengo 5 items los mismos aparezcan ya seleccionado y esto permita a partir del filtro mostrarme los datos, cosa que al deseleccionar algunos de los items o todos se borren de la grilla de manera automatica. que evento puedo usar para colocar el codigo que al cargar en memoria me permita que funcione todos los filtros. abajo detallo el codigo donde cree una matriz de Listbox y funciona individualmente al utilizar el evento Click de cada uno. Se entiende ?? Muchas Gracias

Private Sub Lista_Click(Index As Integer)
Dim i, xs, xx As Integer
Dim Nombre, strSQL As String
Dim PV As Boolean
PV = True

On Error GoTo errores

Select Case Index

Case 0 'Brief
strSQL = "Select * From Proyectos where Brief='"

For i = 0 To Lista(0).ListCount - 1
If Me.Lista(0).Selected(i) = True Then
If PV Then
strSQL = strSQL & Lista(0).List(i) & "'"
PV = False
Else
strSQL = strSQL & " or Brief='" & Lista(0).List(i) & "'"
End If
xs = Lista(0).SelCount
End If
Next i
If xs = "" Then
MfOp.Clear
MfOp.Rows = 2
Exit Sub
End If

Case 1 'Estado
strSQL = "Select * From Proyectos where Estado='"

For i = 0 To Lista(1).ListCount - 1
If Me.Lista(1).Selected(i) = True Then
If PV Then
strSQL = strSQL & Lista(1).List(i) & "'"
PV = False
Else
strSQL = strSQL & " or Estado='" & Lista(1).List(i) & "'"
End If
xs = Lista(1).SelCount
End If
Next i
If xs = "" Then
MfOp.Clear
MfOp.Rows = 2
Exit Sub
End If

Case 2 'Planta
strSQL = "Select * From Proyectos where Planta='"

For i = 0 To Lista(2).ListCount - 1
If Me.Lista(2).Selected(i) = True Then
If PV Then
strSQL = strSQL & Lista(2).List(i) & "'"
PV = False
Else
strSQL = strSQL & " or Planta='" & Lista(2).List(i) & "'"
End If
xs = Lista(2).SelCount
End If
Next i
If xs = "" Then
MfOp.Clear
MfOp.Rows = 2
Exit Sub
End If

Case 3 'Mercado
strSQL = "Select * From Proyectos where Mercado='"

For i = 0 To Lista(3).ListCount - 1
If Me.Lista(3).Selected(i) = True Then
If PV Then
strSQL = strSQL & Lista(3).List(i) & "'"
PV = False
Else
strSQL = strSQL & " or Mercado='" & Lista(3).List(i) & "'"
End If
xs = Lista(3).SelCount
End If
Next i
If xs = "" Then
MfOp.Clear
MfOp.Rows = 2
Exit Sub
End If
Case 4 'Lider
strSQL = "Select * From Proyectos where Ning='"

For i = 0 To Lista(4).ListCount - 1
If Me.Lista(4).Selected(i) = True Then
If PV Then
strSQL = strSQL & Lista(4).List(i) & "'"
PV = False
Else
strSQL = strSQL & " or Ning='" & Lista(4).List(i) & "'"
End If
xs = Lista(4).SelCount
End If
Next i

If xs = "" Then
MfOp.Clear
MfOp.Rows = 2
Exit Sub
End If

' strSQL = ""
Case 5 'Mkt
strSQL = "Select * From Proyectos where Mkt='"

For i = 0 To Lista(5).ListCount - 1
If Me.Lista(5).Selected(i) = True Then
If PV Then
strSQL = strSQL & Lista(5).List(i) & "'"
PV = False
Else
strSQL = strSQL & " or Mkt='" & Lista(5).List(i) & "'"
End If
xs = Lista(5).SelCount
End If
Next i

If xs = "" Then
MfOp.Clear
MfOp.Rows = 2
Exit Sub
End If
End Select

' MsgBox strSQL

rs.Open (strSQL), _
db, _
adOpenKeyset, _
adLockOptimistic, _
adCmdText

'*********************************************************************************************
If rs.RecordCount Then
MfOp.Rows = 0
i = rs.RecordCount
rs.MoveFirst
With MfOp
MfOp.Visible = False
.Cols = 19
.Rows = i + 1
.FixedRows = 1
.ColWidth(0) = 0
.ColWidth(1) = 2500
.ColWidth(2) = 2000
.ColWidth(3) = 2000
.ColWidth(4) = 2000
.ColWidth(5) = 2000
.ColWidth(6) = 2000
.ColWidth(7) = 2000
.ColWidth(8) = 2000
.ColWidth(9) = 2000
.ColWidth(10) = 2000
.ColWidth(11) = 2000
.ColWidth(12) = 2000
.ColWidth(13) = 2000
.ColWidth(14) = 2000
.ColWidth(15) = 2000
.ColWidth(16) = 2000
.ColWidth(17) = 2000
.ColWidth(18) = 2000

.Row = 0
.Col = 0: .Text = "Numero"
.Col = 1: .Text = "Nombre"
.Col = 2: .Text = "Alimento Apr B"
.Col = 3: .Text = "Costo Apr B"
.Col = 4: .Text = "SNP B"
.Col = 5: .Text = "Originales B"
.Col = 6: .Text = "Copia Color B"
.Col = 7: .Text = "Cromalin Apr B"
.Col = 8: .Text = "ME en Pta B"
.Col = 9: .Text = "1º Produccion B"
.Col = 10: .Text = "Alimento Apr R"
.Col = 11: .Text = "Costo Apr R"
.Col = 12: .Text = "SNP R"
.Col = 13: .Text = "Originales R"
.Col = 14: .Text = "Copia Color R"
.Col = 15: .Text = "Cromalin Apr R"
.Col = 16: .Text = "ME en Pta R"
.Col = 17: .Text = "1º Produccion R"
.Col = 18: .Text = ""


End With
For xs = 1 To i

MfOp.Visible = False
With MfOp
.Rows = xs + 1
.Row = xs
.Col = 0: .Text = rs!NP
.Col = 1: .Text = "" & rs!nproyecto
.Col = 2: .Text = "" & rs!AliAprFB
.Col = 3: .Text = "" & rs!AliAprFR
.Col = 4: .Text = "" & rs!CosAprFB
.Col = 5: .Text = "" & rs!CosAprFR
.Col = 6: .Text = "" & rs!snpfb
.Col = 7: .Text = "" & rs!snpFR
.Col = 8: .Text = "" & rs!Orifb
.Col = 9: .Text = "" & rs!Orifr
.Col = 10: .Text = "" & rs!CCFB
.Col = 11: .Text = "" & rs!CCFR
.Col = 12: .Text = "" & rs!CrFB
.Col = 13: .Text = "" & rs!CrFr
.Col = 14: .Text = "" & rs!MEPlantaFB
.Col = 15: .Text = "" & rs!MEPlantaFR
.Col = 16: .Text = "" & rs!Pro1Fb
.Col = 17: .Text = "" & rs!Pro1Fr


End With
rs.MoveNext

Next xs

MfOp.Visible = True
End If

Nombre = ""

rs.Close

errores:

If Err.Number <> 0 Then

MsgBox Err.Number & " " & Err.Description
Else
'MsgBox "Ordenes Servicio Pendientes", vbOKOnly + vbExclamation, ""
End If

End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Crear un Filtro igual al que utiliza Excel utilizando un Listbox Multiselect

Publicado por Daniel danyreinoso@gmail.com (21 intervenciones) el 11/06/2015 18:57:33
Amigo Como hago para unificar en una sola consulta los 6 bucles For donde cada uno contiene una consulta individual, esto a partir de cada Listbox (6) donde me aparecen todos los items seleccionados lo que me lleva a ver en la grilla todos los registros de la tabla Proyectos
los listbox se componen de:
- Brief
- Estado
- Planta
- Mercado
- Lider
- MKT
Todos los items de cada uno de los listbox aparecen con todos sus items ya seleccionados, y me muestra todos los registros de la tabla proyectos y al deseleccionar algun item de cualquier Listbox va borrando el/los registros correspondientes y permitiendo volver a visualizarlo si lo selecciono nuevamente. Todo esto a partir de UNIFICAR en una consulta las 6 abajo detalladas. Gracias

Private Sub Lista_Click(Index As Integer)
Dim i, xs, xx As Integer
Dim Nombre, strSQL As String
Dim PV As Boolean
PV = True

On Error GoTo errores

Select Case Index

Case 0 'Brief
strSQL = "Select * From Proyectos where Brief='"

For i = 0 To Lista(0).ListCount - 1
If Me.Lista(0).Selected(i) = True Then
If PV Then
strSQL = strSQL & Lista(0).List(i) & "'"
PV = False
Else
strSQL = strSQL & " or Brief='" & Lista(0).List(i) & "'"
End If
xs = Lista(0).SelCount
End If
Next i
If xs = "" Then
MfOp.Clear
MfOp.Rows = 2
Exit Sub
End If

Case 1 'Estado
strSQL = "Select * From Proyectos where Estado='"

For i = 0 To Lista(1).ListCount - 1
If Me.Lista(1).Selected(i) = True Then
If PV Then
strSQL = strSQL & Lista(1).List(i) & "'"
PV = False
Else
strSQL = strSQL & " or Estado='" & Lista(1).List(i) & "'"
End If
xs = Lista(1).SelCount
End If
Next i
If xs = "" Then
MfOp.Clear
MfOp.Rows = 2
Exit Sub
End If

Case 2 'Planta
strSQL = "Select * From Proyectos where Planta='"

For i = 0 To Lista(2).ListCount - 1
If Me.Lista(2).Selected(i) = True Then
If PV Then
strSQL = strSQL & Lista(2).List(i) & "'"
PV = False
Else
strSQL = strSQL & " or Planta='" & Lista(2).List(i) & "'"
End If
xs = Lista(2).SelCount
End If
Next i
If xs = "" Then
MfOp.Clear
MfOp.Rows = 2
Exit Sub
End If

Case 3 'Mercado
strSQL = "Select * From Proyectos where Mercado='"

For i = 0 To Lista(3).ListCount - 1
If Me.Lista(3).Selected(i) = True Then
If PV Then
strSQL = strSQL & Lista(3).List(i) & "'"
PV = False
Else
strSQL = strSQL & " or Mercado='" & Lista(3).List(i) & "'"
End If
xs = Lista(3).SelCount
End If
Next i
If xs = "" Then
MfOp.Clear
MfOp.Rows = 2
Exit Sub
End If
Case 4 'Lider
strSQL = "Select * From Proyectos where Ning='"

For i = 0 To Lista(4).ListCount - 1
If Me.Lista(4).Selected(i) = True Then
If PV Then
strSQL = strSQL & Lista(4).List(i) & "'"
PV = False
Else
strSQL = strSQL & " or Ning='" & Lista(4).List(i) & "'"
End If
xs = Lista(4).SelCount
End If
Next i

If xs = "" Then
MfOp.Clear
MfOp.Rows = 2
Exit Sub
End If

' strSQL = ""
Case 5 'Mkt
strSQL = "Select * From Proyectos where Mkt='"

For i = 0 To Lista(5).ListCount - 1
If Me.Lista(5).Selected(i) = True Then
If PV Then
strSQL = strSQL & Lista(5).List(i) & "'"
PV = False
Else
strSQL = strSQL & " or Mkt='" & Lista(5).List(i) & "'"
End If
xs = Lista(5).SelCount
End If
Next i

If xs = "" Then
MfOp.Clear
MfOp.Rows = 2
Exit Sub
End If
End Select

' MsgBox strSQL

rs.Open (strSQL), _
db, _
adOpenKeyset, _
adLockOptimistic, _
adCmdText
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo

Crear un Filtro igual al que utiliza Excel utilizando un Listbox Multiselect

Publicado por Andres Leonardo (699 intervenciones) el 11/06/2015 21:13:45
Haber ... para unificar....

comenta tu codigo e intenta con este ...No te olvides dejar el Msgbox para ver que la sintaxis sea correcta luego lo comentas....

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Private Sub Lista_Click(Index As Integer)
Dim i, xs, xx As Integer
Dim Nombre, strSQL As String
Dim PV As Boolean
PV = True
 
On Error GoTo errores
 
Select Case Index
 
Case 0 'Brief
strSQL = "Select * From Proyectos where Brief='"
Call crearQuery("Brief", Index)
 
Case 1 'Estado
strSQL = "Select * From Proyectos where Estado='"
Call crearQuery("Estado", Index)
Case 2 'Planta
strSQL = "Select * From Proyectos where Planta='"
Call crearQuery("Planta", Index)
Case 3 'Mercado
strSQL = "Select * From Proyectos where Mercado='"
Call crearQuery("Mercado", Index)
Case 4 'Lider
strSQL = "Select * From Proyectos where Ning='"
Call crearQuery("Ning", Index)
Case 5 'Mkt
strSQL = "Select * From Proyectos where Mkt='"
Call crearQuery("Mkt", Index)
 
If xs = "" Then
MfOp.Clear
MfOp.Rows = 2
Exit Sub
End If
End Select
 
 MsgBox strSQL
 
rs.Open (strSQL), _
db, _
adOpenKeyset, _
adLockOptimistic, _
adCmdText
 
 
 
Sub crearQuery(campo As String, nl As Integer)
 
For i = 0 To Lista(nl).ListCount - 1
If Me.Lista(nl).Selected(i) = True Then
If PV Then
strSQL = strSQL & Lista(nl).List(i) & "'"
PV = False
Else
strSQL = strSQL & " or " & campo & "='" & Lista(nl).List(i) & "'"
End If
xs = Lista(nl).SelCount
End If
Next i
 
 
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Crear un Filtro igual al que utiliza Excel utilizando un Listbox Multiselect

Publicado por Daniel Reinoso danyreinoso@gmail.com (21 intervenciones) el 12/06/2015 15:57:31
Amigo mala suerte anoche... pero tienen un buen equipo...!!!
Con respecto a la rutina que me pasaste logicamente esta bien el problema creo es que cuando lee el strSQL y entra al Query todavia la casilla CheckBox del Listbox todavia NO esta tildado por eso no me llega con valor.

Como los Check del listbox se tildan en tiempo de ejecucion, los coloque en Load del Form y Activate y no me funciona Hay otro Evento mas efectivo para poner los siguiente:

'**************************
Lista(0).Selected(0) = True
Lista(0).Selected(1) = True
Lista(0).Selected(2) = True
Lista(0).Selected(3) = True
Lista(0).Selected(4) = True
'**************************
Lista(1).Selected(0) = True
Lista(1).Selected(1) = True
Lista(1).Selected(2) = True
Lista(1).Selected(3) = True
Lista(1).Selected(4) = True
Lista(1).Selected(5) = True
'**************************
Lista(2).Selected(0) = True
Lista(2).Selected(1) = True
Lista(2).Selected(2) = True
Lista(2).Selected(3) = True
'**************************
Lista(3).Selected(0) = True
Lista(3).Selected(1) = True
'**************************
Lista(4).Selected(0) = True
Lista(4).Selected(1) = True
Lista(4).Selected(2) = True
Lista(4).Selected(3) = True
Lista(4).Selected(4) = True
Lista(4).Selected(5) = True
Lista(4).Selected(6) = True
Lista(4).Selected(7) = True
Lista(4).Selected(8) = True
'**************************
Lista(5).Selected(0) = True
Lista(5).Selected(1) = True
Lista(5).Selected(2) = True
Lista(5).Selected(3) = True
Lista(5).Selected(4) = True
Lista(5).Selected(5) = True
Lista(5).Selected(6) = True
'**************************
Frame1.Visible = True
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo

Crear un Filtro igual al que utiliza Excel utilizando un Listbox Multiselect

Publicado por Andres Leonardo (699 intervenciones) el 12/06/2015 16:41:30
Pues .. que te dire .. nos falto mucho juego ... a mi parecer... en todo caso seguimos con la esperanza de pasar.

Como invocas al formulario??? o esto es cuando arranca la aplicacion

En el load deberia funcionar pero indicame como llamas al formulario
Private Sub Form_Load()
' Aqui tu codigo
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Crear un Filtro igual al que utiliza Excel utilizando un Listbox Multiselect

Publicado por Daniel Reinoso danyreinoso@gmail.com (21 intervenciones) el 12/06/2015 17:16:12
al formulario llamado frmMaterial lo llamo desde un Boton

Private sub Command1_click ()
frmMaterial.show 1
End sub

en el load del formulario cargo la lista de listbox para que se seleccionen por medio del codigo
Private Sub Form_Load()

Frame1.Visible = False
Lista(0).Selected(0) = True
Lista(0).Selected(1) = True
Lista(0).Selected(2) = True
Lista(0).Selected(3) = True
Lista(0).Selected(4) = True
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo

Crear un Filtro igual al que utiliza Excel utilizando un Listbox Multiselect

Publicado por Andres Leonardo (699 intervenciones) el 12/06/2015 22:25:06
prueba asi...


Private sub Command1_click ()
frmMaterial.Lista(0).Selected(0) = True
frmMaterial.Lista(0).Selected(1) = True
frmMaterial.Lista(0).Selected(2) = True
frmMaterial.Lista(0).Selected(3) = True
frmMaterial.Lista(0).Selected(4) = True
frmMaterial.show 1
End sub

en el load del formulario cargo la lista de listbox para que se seleccionen por medio del codigo
Private Sub Form_Load()

Frame1.Visible = False

End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Crear un Filtro igual al que utiliza Excel utilizando un Listbox Multiselect

Publicado por Daniel Reinoso danyreinoso@gmail.com (21 intervenciones) el 15/06/2015 18:54:41
amigo! Como estas? Animo Ecuador le gana a Bolivia y siguen en carrera... Nosotros vamos con el duro Uruguay...!!! Estamos muy parejos todos-......!!!

Con respecto a lo indicado en el:
Private Sub Command:click()

frmMaterial.Lista(0).Selected(0)= True
...
...
...
...
frmmaterial.show 1

end sub

En esta parte yo ya estoy seleccionado los listbox con codigo, creo que no hace falta colocar ese mismo codigo en el Load del frmMaterial...

en lo que respecta a la consulta agrupada me da los sig errores:

Mensaje 1
Select * from Proyectos Where Brief='


Mensaje 2
-2147217900 Error de Sintaxis en la cadena en la expresion de consulta 'Brief=".


Eso se esta dando en la Query y no le puedo encontrar la vuelta.- Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo

Crear un Filtro igual al que utiliza Excel utilizando un Listbox Multiselect

Publicado por Andres Leonardo (699 intervenciones) el 15/06/2015 19:23:16
Esperemos que eso pase y seguir encarrera .. su grupo se ve jodido ahhh...

bueno te puse en el boton por que dijistes que en load no te cargaba .. .era por eso .. en todo caso si te funciona esta bien


En lo que respecta a la consulta agrupada

Mensaje 1
Select * from Proyectos Where Brief=' ' me imagino por que no hay nada seleccionado.... entonces habria que validar que si lo llamas y no tiene marcado te busque todo ...


Mensaje 2
-2147217900 Error de Sintaxis en la cadena en la expresion de consulta 'Brief=".
En este de aca me parece que es la consecuencia de lo indicado en el primer parrafo .... intentalo
*Otra cosa es muy grande la aplicacion si te sirve podria revisarla claro si no te importa...


Eso se esta dando en la Query y no le puedo encontrar la vuelta.- Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Crear un Filtro igual al que utiliza Excel utilizando un Listbox Multiselect

Publicado por Daniel Reinoso danyreinoso@gmail.com (21 intervenciones) el 15/06/2015 20:15:50
Andres, te explico algo el Select Case Index abajo detallado esta dentro del evento Click de la Matriz de listbox(son 5)
1 - El proceso viene de frmMaterial.Lista(0).Selected(0) = True o sea ya viene el check seleccionado.-
2 - Cuando entra al Select Case siguiente la linea strSQL = "Select * From Proyectos where Brief='" no tiene resultado recien cuando hace ingreso al Call CrearQuery("Brief", Index) y va ala procedure (Seguimos mas abajo) *****


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Select Case Index
 
Case 0 'Brief
strSQL = "Select * From Proyectos where Brief='"
Call crearQuery("Brief", Index)
 
Case 1 'Estado
strSQL = "Select * From Proyectos where Estado='"
Call crearQuery("Estado", Index)
Case 2 'Planta
strSQL = "Select * From Proyectos where Planta='"
Call crearQuery("Planta", Index)
Case 3 'Mercado
strSQL = "Select * From Proyectos where Mercado='"
Call crearQuery("Mercado", Index)
Case 4 'Lider
strSQL = "Select * From Proyectos where Ning='"
Call crearQuery("Ning", Index)
Case 5 'Mkt
strSQL = "Select * From Proyectos where Mkt='"
Call crearQuery("Mkt", Index)
 
If xs = "" Then
MfOp.Clear
MfOp.Rows = 2
Exit Sub
End If
End Select
 
 MsgBox strSQL
 
rs.Open (strSQL), _
db, _
adOpenKeyset, _
adLockOptimistic, _
adCmdText


***** Aca cuando entra al For encuentra en el primer ciclo del For el valor "SI" dentro del Listbox, pero ese valor encontrado NO lo devuelve a strSQL = "Select * From Proyectos where Brief='" de arriba y por eso me sale el primer

Mensaje 1
Select * from Proyectos Where Brief=' '
EN CONCRETO LA PROCEDURE NO DEVUELVE EL VALOR "SI" ENCONTRADO....!!!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub crearQuery(campo As String, nl As Integer)
 
For i = 0 To Lista(nl).ListCount - 1
If Me.Lista(nl).Selected(i) = True Then
If PV Then
strSQL = strSQL & Lista(nl).List(i) & "'"
PV = False
Else
strSQL = strSQL & " or " & campo & "='" & Lista(nl).List(i) & "'"
End If
xs = Lista(nl).SelCount
End If
Next i
 
 
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Crear un Filtro igual al que utiliza Excel utilizando un Listbox Multiselect

Publicado por Daniel Reinoso danyreinoso@gmail.com (21 intervenciones) el 16/06/2015 18:44:13
Andres viste la ultima consulta que te realize?? Espero no molestarte...!!! te la pase Ayer. Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo

Crear un Filtro igual al que utiliza Excel utilizando un Listbox Multiselect

Publicado por Andres Leonardo (699 intervenciones) el 16/06/2015 20:58:33
Que dice pues .. disculpa ayer andaba complicado lo lei pero no habia revisado el tema ... otra cosa que podriamos hacer es poner en el procedure OTRO campo (V o F) y dependeiedo de esta bandera si esta prendida entendemos que lo llamo desde el otro form y asi validar que se debe realizar y que no ... la verdad me gustaria poder ver la aplicacion pero no entiendo a punto lo que necesitas

'Dberas cambiar las llamadas de los form enviando otro parametro verdadero , solo enviaras el valor true si lo llama desde el mismo formulario o false si lo llama desde otro ..

la logica que te permitirra usar la bandera MismoFormulario te permitir crear un query que te filtr todo los NING o el campo ..sea diferente a un ' ' . ojo deberias ver que la data no tenga que el campo sea = ' ' si no la falla espero haberte ayudad.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Sub crearQuery(campo As String, nl As Integer, MismoFormulario as Boolean)
 
if MismoFormulario  =true  then
 
For i = 0 To Lista(nl).ListCount - 1
If Me.Lista(nl).Selected(i) = True Then
If PV Then
strSQL = strSQL & Lista(nl).List(i) & "'"
PV = False
Else
strSQL = strSQL & " or " & campo & "='" & Lista(nl).List(i) & "'"
End If
xs = Lista(nl).SelCount
End If
Next i
 
else
       strSQL = "Select * from Proyectos where " &Campo & " <> ' '  "
 
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo

Crear un Filtro igual al que utiliza Excel utilizando un Listbox Multiselect

Publicado por Andres Leonardo (699 intervenciones) el 24/06/2015 00:27:00
Que fue como te fui con el proyecto?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Crear un Filtro igual al que utiliza Excel utilizando un Listbox Multiselect

Publicado por Daniel Reinoso danyreinoso@gmail.com (21 intervenciones) el 24/06/2015 13:33:45
Amigo Andres, la ultima ayuda que me enviaste todavia no la aplique, andaba con otras tareas en mi trabajo pero hoy retomo de nuevo con el proyecto... y te aviso Muy amable Amigo y Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Crear un Filtro igual al que utiliza Excel utilizando un Listbox Multiselect

Publicado por Daniel Reinoso danyreinoso@gmail.com (21 intervenciones) el 24/06/2015 18:15:40
Amigo Andres, tenes una direccion de mail que me pases y te voy a mandar unas imagenes de la aplicacion para ver si me puedes ayudar a terminar.- El mio es danyreinoso@gmail.com Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo

Crear un Filtro igual al que utiliza Excel utilizando un Listbox Multiselect

Publicado por Andres Leonardo (699 intervenciones) el 24/06/2015 18:54:03
Si claro

silver.axe007@gmail.com
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar