AutoFilter mediante VBA

22/03/2005 - 20:05 por SG Web Design - Sergio Gattelet | Informe spam
Hola Grupo,

Quisiera saber si es posible el empleo de AutoFilter o AutoFilter Avanzado
para ejecutarlo por medio de vba y filtrar de esta manera una lista de
articulos.

Viendo todas las posibilidades creo que el uso de autofilter es lo mas
apropiado para mostrar las coincidencias de un campo determinado.

Sergio.

Preguntas similare

Leer las respuestas

#6 KL
23/03/2005 - 22:42 | Informe spam
Hola Sergio,

1. hay alguna manera de conocer la cantidad de registros filtrados por
medio
de alguna propiedad de AutoFilter.



Sub CountVisRows()
'by Tom Ogilvy
Dim rng As Range
Set rng = ActiveSheet.AutoFilter.Range

MsgBox rng.Columns(1). _
SpecialCells(xlVisible).Count - 1 _
& " of " & rng _
.Rows.Count - 1 & " Records"
End Sub


2. con respecto a los controles en vba, se permite que los mismos estes en
array, es decir compartan el mismo nombre pero lo que cambia es el indice,
como por ejemplo VB.



Puedes explicar un poco mas que es lo q buscas?

Saludos,
KL
Respuesta Responder a este mensaje
#7 SG Web Design - Sergio Gattelet
23/03/2005 - 23:41 | Informe spam
Respecto al punto 2.

En VB se puede crear un control cualquiera, ejemplo OptionButton con un
mismo nombre.
En un caso concreto se crea 3 OptionButton con el nombre optCampos y como
los 3 tienen el mismo nombre cada uno de ellos tiene un indice con el cual
se le puede referenciar. optCampos(0), optCampos(1), optCampos(2).
De esta manera realizando un bucle se puede cononcer las propiedades de cada
uno de ellos y no por separado como pasa con VBA.

es asi, que les vamos a hacer...

Saludos.

"KL" escribió en el mensaje
news:OxWsoE$
Hola Sergio,

> 1. hay alguna manera de conocer la cantidad de registros filtrados por
> medio
> de alguna propiedad de AutoFilter.

Sub CountVisRows()
'by Tom Ogilvy
Dim rng As Range
Set rng = ActiveSheet.AutoFilter.Range

MsgBox rng.Columns(1). _
SpecialCells(xlVisible).Count - 1 _
& " of " & rng _
.Rows.Count - 1 & " Records"
End Sub


> 2. con respecto a los controles en vba, se permite que los mismos estes


en
> array, es decir compartan el mismo nombre pero lo que cambia es el


indice,
> como por ejemplo VB.

Puedes explicar un poco mas que es lo q buscas?

Saludos,
KL


Respuesta Responder a este mensaje
#8 SG Web Design - Sergio Gattelet
23/03/2005 - 23:42 | Informe spam
KL

Gracias por el dato para conocer la cantidad de registros en el AutoFilter.
Saludos,

"SG Web Design - Sergio Gattelet" escribió en el mensaje
news:
Amigos,
bueno lo que dice KL, esta en lo correcto ya que lo he comprobado.
El codigo que empleo para filtrarlos esta excelente y lo muestro a
continuacion:

Range("A1").AutoFilter Field:=icampo, Criteria1:="*" &


TextBoxBusqueda.Text
& "*"

con esta unica linea de codigo puedo filtrar por cualquier campo y de


manera
agil.
el valor de icampo lo obtengo recorriendo la propiedad Value de varios
OptinonButton y guarda un valor numerico que concuerda con la ubicacion de
la columna a filtrar.
TextBoxBusqueda.Text es el criterio a buscar por el campo seleccionado.

Quisiera realizar un par de preguntas para mejorar la aplicacion:
1. hay alguna manera de conocer la cantidad de registros filtrados por


medio
de alguna propiedad de AutoFilter.
2. con respecto a los controles en vba, se permite que los mismos estes en
array, es decir compartan el mismo nombre pero lo que cambia es el indice,
como por ejemplo VB.

Aguardo su respuesta,
Saludos



"SG Web Design - Sergio Gattelet" escribió en el


mensaje
news:
> Hola Grupo,
>
> Quisiera saber si es posible el empleo de AutoFilter o AutoFilter


Avanzado
> para ejecutarlo por medio de vba y filtrar de esta manera una lista de
> articulos.
>
> Viendo todas las posibilidades creo que el uso de autofilter es lo mas
> apropiado para mostrar las coincidencias de un campo determinado.
>
> Sergio.
>
>


Respuesta Responder a este mensaje
#9 KL
24/03/2005 - 00:26 | Informe spam
Hola Sergio,

...De esta manera realizando un bucle se puede cononcer las propiedades de
cada
uno de ellos y no por separado como pasa con VBA.
es asi, que les vamos a hacer...



Creo que te equivocas respecto a las posibilidades de VBA en este area.
Aunque no se hace exactamente de la misma manera que en VB, el principio (el
uso de la coleccion de objetos con su respectivo indice) es el mismo y la
sintaxis es bastante parecida, y si no, revisa los siguientes macros.

Saludos,
KL

Sub Test1()
Dim ctrl As Control
For Each ctrl In UserForm1.Controls
Debug.Print ctrl.Name
Next ctrl
End Sub

Sub Test2()
Dim n As Integer
For n = 0 To UserForm1.Controls.Count - 1
Debug.Print UserForm1.Controls.Item(n).Name
Next n
End Sub

Sub Test3()
Dim n As Integer
For n = 0 To UserForm1.Controls.Count - 1
If TypeOf UserForm1.Controls.Item(n) _
Is msforms.CommandButton Then
Debug.Print UserForm1.Controls.Item(n).Name
End If
Next n
End Sub
Respuesta Responder a este mensaje
#10 SG Web Design - Sergio Gattelet
24/03/2005 - 03:03 | Informe spam
ok, entiendo lo que decis de los indices en vba y te dire que en vb tambien
existe la misma posibilidad de realizarlos. Lo que ademas vb ofrece es la
posibilidad de crear matrices de controles para que se puedan trabajar de
manera de grupos por la explicacion que te detallaba anteriormente.

Saludos
Sergio


"KL" escribió en el mensaje
news:OeloL$$
Hola Sergio,

> ...De esta manera realizando un bucle se puede cononcer las propiedades


de
> cada
> uno de ellos y no por separado como pasa con VBA.
> es asi, que les vamos a hacer...

Creo que te equivocas respecto a las posibilidades de VBA en este area.
Aunque no se hace exactamente de la misma manera que en VB, el principio


(el
uso de la coleccion de objetos con su respectivo indice) es el mismo y la
sintaxis es bastante parecida, y si no, revisa los siguientes macros.

Saludos,
KL

Sub Test1()
Dim ctrl As Control
For Each ctrl In UserForm1.Controls
Debug.Print ctrl.Name
Next ctrl
End Sub

Sub Test2()
Dim n As Integer
For n = 0 To UserForm1.Controls.Count - 1
Debug.Print UserForm1.Controls.Item(n).Name
Next n
End Sub

Sub Test3()
Dim n As Integer
For n = 0 To UserForm1.Controls.Count - 1
If TypeOf UserForm1.Controls.Item(n) _
Is msforms.CommandButton Then
Debug.Print UserForm1.Controls.Item(n).Name
End If
Next n
End Sub



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida