Filtros de excel y desplazamiento con VB

21/09/2005 - 00:49 por jjppnett | Informe spam
Al trabajar con autofiltros de excel algunas filas se ocultan, mi pregunta
es se puede desplazarse, por las celdas mostradas en pantalla, con un
codigo en VB para el Excel, por que si te pones a grabar una macro la
macro te da directamente el lugar donde estas (range("A5").select si fuera
el caso que la celda visible fuera la A5) mi pregunta es saber si existe
una forma como desplazarse sobre las celdas visibles por que si pones la
dirección de una celda que no es visible el excel lo desplaza ahi pero eso
no te sirve de nada, muchas gracias

Preguntas similare

Leer las respuestas

#1 jjppnett
22/09/2005 - 06:06 | Informe spam
este codigo de abajo es bueno me da la ubicación pero solo de la ultima
celda con caracteres yo deseo, de la celda posterior a esa seria
simplemente si hubiera un codigo para desplazarse solamente por celdas
visibles, el resto yo lo haria, o si existe un comando, comprenden la idea

KL wrote:

Hola chicos,

Como alternativa, si se necesita un codigo mas rapido (aunque un poco mas
largo) y la posibilidad de manejar todo el rango a la vez o de forma
recurrente se puede usar un macro como el que sigue:

Sub Macro1()
Dim rng As Range
If ActiveSheet.AutoFilterMode Then
On Error Resume Next
With ActiveSheet.AutoFilter.Range.Offset(1)
Set rng = Intersect(ActiveSheet.Columns("C:C"), _
.Resize(.Rows.Count - 1)).SpecialCells(xlCellTypeVisible)
End With
On Error GoTo 0
If Not rng Is Nothing Then MsgBox rng.Address
End If
End Sub

Saludos,
KL


"David" <sdgm04(mapstonod)@hotmail.com> wrote in message
news:
> Cuando aplicas un filtro, es como si las filas que no coincidan con tu
> criterio tomaran un alto cero. Entonces, lo que tienes que hacer, es un
> ciclo para pasar por las filas con ancho cero utilizando la propiedad
> Offset,
> no Range. Seria algo como esto:
>
> Do
> ActiveCell.Offset(1, 0).Select
> Loop Until ActiveCell.EntireRow.RowHeight > 0
>
> Espero que te sirva.
>
> Saludos...
>
>
> "Jpdel@" escribio:
>
>> Al trabajar con autofiltros de excel algunas filas se ocultan, mi
>> pregunta
>> es se puede desplazarse, por las celdas mostradas en pantalla, con un
>> codigo en VB para el Excel, por que si te pones a grabar una macro la
>> macro te da directamente el lugar donde estas (range("A5").select si
>> fuera
>> el caso que la celda visible fuera la A5) mi pregunta es saber si existe
>> una forma como desplazarse sobre las celdas visibles por que si pones la
>> direccion de una celda que no es visible el excel lo desplaza ahi pero
>> eso
>> no te sirve de nada, muchas gracias
>>
>>
Respuesta Responder a este mensaje
#2 KL
22/09/2005 - 08:14 | Informe spam
Hola Jpdel,

Este codigo lo que te da es el rango entero de las celdas filtradas
(visibles) de la columna [C]. La instruccion "MsgBox rng.Address" esta solo
como un ejemplo. Depende de ti como vas a utilizar la variable "rng" una vez
creada. Podrias hacer algo como:

Sub Macro1()
Dim rng As Range
If ActiveSheet.AutoFilterMode Then
On Error Resume Next
With ActiveSheet.AutoFilter.Range.Offset(1)
Set rng = Intersect(ActiveSheet.Columns("C:C"), _
.Resize(.Rows.Count - 1)).SpecialCells(xlCellTypeVisible)
End With
On Error GoTo 0
If Not rng Is Nothing Then
For Each c In rng
MsgBox c
Next c
End If
End If
End Sub

Saludos,
KL


"Jpdel@" wrote in message
news:%
este codigo de abajo es bueno me da la ubicación pero solo de la ultima
celda con caracteres yo deseo, de la celda posterior a esa seria
simplemente si hubiera un codigo para desplazarse solamente por celdas
visibles, el resto yo lo haria, o si existe un comando, comprenden la idea

KL wrote:

Hola chicos,



Como alternativa, si se necesita un codigo mas rapido (aunque un poco mas
largo) y la posibilidad de manejar todo el rango a la vez o de forma
recurrente se puede usar un macro como el que sigue:



Sub Macro1()
Dim rng As Range
If ActiveSheet.AutoFilterMode Then
On Error Resume Next
With ActiveSheet.AutoFilter.Range.Offset(1)
Set rng = Intersect(ActiveSheet.Columns("C:C"), _
.Resize(.Rows.Count - 1)).SpecialCells(xlCellTypeVisible)
End With
On Error GoTo 0
If Not rng Is Nothing Then MsgBox rng.Address
End If
End Sub



Saludos,
KL




"David" <sdgm04(mapstonod)@hotmail.com> wrote in message
news:
> Cuando aplicas un filtro, es como si las filas que no coincidan con tu
> criterio tomaran un alto cero. Entonces, lo que tienes que hacer, es
> un
> ciclo para pasar por las filas con ancho cero utilizando la propiedad
> Offset,
> no Range. Seria algo como esto:
>
> Do
> ActiveCell.Offset(1, 0).Select
> Loop Until ActiveCell.EntireRow.RowHeight > 0
>
> Espero que te sirva.
>
> Saludos...
>
>
> "Jpdel@" escribio:
>
>> Al trabajar con autofiltros de excel algunas filas se ocultan, mi
>> pregunta
>> es se puede desplazarse, por las celdas mostradas en pantalla, con un
>> codigo en VB para el Excel, por que si te pones a grabar una macro la
>> macro te da directamente el lugar donde estas (range("A5").select si
>> fuera
>> el caso que la celda visible fuera la A5) mi pregunta es saber si
>> existe
>> una forma como desplazarse sobre las celdas visibles por que si pones
>> la
>> direccion de una celda que no es visible el excel lo desplaza ahi pero
>> eso
>> no te sirve de nada, muchas gracias
>>
>>




Respuesta Responder a este mensaje
#3 jjppnett
24/09/2005 - 18:02 | Informe spam
Hola KL muy interesante tu codigo, pero me disculpo pregunte mal sorry
ahora si voy a formular bien la pregunta haber si entiendes o haber si me
dejo entender, mira tienes una columna digamos q tambien sea la C, y
tienes una cabezera cuando filtras por un condición con tu autofiltro,las
filas q no cumplen el filtraje de condición se ocultan cierto!!!... mi
pregunta es cuando filtras con autofiltros especificamente y te das con la
sorpresa q no tienes datos como hacer q un codigo de visual basic para q
se detenga ahi o para q te arroje un msgbox o que pase a otra condición
ahora si creo q lo explique bien, haber

sub filtrajecondicion()
if filtraje es vacio then
poner condición o q avise
else
filtrar o cualquier cosa aqui
end if
end sub

espero q ahora si me haya dejado entender la custion es saber si despues
del filtraje si no cumple la condición la fila despues del filtraje o no
ahi datos q es lo me sale a mi me diga pero la cuestión es como saber el
numero de esa fila por si no cumple la condición o esta vacia recuerda q
salen bastantes filas osea seria la fila inmediatamente despues del filtro
PD KL me gustaria enviarte un pantallazo para q me entendieras por k dicen
q una imagen dice mas de mil palabras si me das tu correo por k aqui no se
puede pegar imagenes por fis.

Gracias de antemano por tu tiempo y por la respuesta



KL wrote:

Hola Jpdel,

Este codigo lo que te da es el rango entero de las celdas filtradas
(visibles) de la columna [C]. La instruccion "MsgBox rng.Address" esta solo
como un ejemplo. Depende de ti como vas a utilizar la variable "rng" una vez
creada. Podrias hacer algo como:

Sub Macro1()
Dim rng As Range
If ActiveSheet.AutoFilterMode Then
On Error Resume Next
With ActiveSheet.AutoFilter.Range.Offset(1)
Set rng = Intersect(ActiveSheet.Columns("C:C"), _
.Resize(.Rows.Count - 1)).SpecialCells(xlCellTypeVisible)
End With
On Error GoTo 0
If Not rng Is Nothing Then
For Each c In rng
MsgBox c
Next c
End If
End If
End Sub

Saludos,
KL


"Jpdel@" wrote in message
news:%
> este codigo de abajo es bueno me da la ubicación pero solo de la ultima
> celda con caracteres yo deseo, de la celda posterior a esa seria
> simplemente si hubiera un codigo para desplazarse solamente por celdas
> visibles, el resto yo lo haria, o si existe un comando, comprenden la idea
>
> KL wrote:
>
>> Hola chicos,
>
>> Como alternativa, si se necesita un codigo mas rapido (aunque un poco mas
>> largo) y la posibilidad de manejar todo el rango a la vez o de forma
>> recurrente se puede usar un macro como el que sigue:
>
>> Sub Macro1()
>> Dim rng As Range
>> If ActiveSheet.AutoFilterMode Then
>> On Error Resume Next
>> With ActiveSheet.AutoFilter.Range.Offset(1)
>> Set rng = Intersect(ActiveSheet.Columns("C:C"), _
>> .Resize(.Rows.Count - 1)).SpecialCells(xlCellTypeVisible)
>> End With
>> On Error GoTo 0
>> If Not rng Is Nothing Then MsgBox rng.Address
>> End If
>> End Sub
>
>> Saludos,
>> KL
>
>
>> "David" <sdgm04(mapstonod)@hotmail.com> wrote in message
>> news:
>> > Cuando aplicas un filtro, es como si las filas que no coincidan con tu
>> > criterio tomaran un alto cero. Entonces, lo que tienes que hacer, es
>> > un
>> > ciclo para pasar por las filas con ancho cero utilizando la propiedad
>> > Offset,
>> > no Range. Seria algo como esto:
>> >
>> > Do
>> > ActiveCell.Offset(1, 0).Select
>> > Loop Until ActiveCell.EntireRow.RowHeight > 0
>> >
>> > Espero que te sirva.
>> >
>> > Saludos...
>> >
>> >
>> > "Jpdel@" escribio:
>> >
>> >> Al trabajar con autofiltros de excel algunas filas se ocultan, mi
>> >> pregunta
>> >> es se puede desplazarse, por las celdas mostradas en pantalla, con un
>> >> codigo en VB para el Excel, por que si te pones a grabar una macro la
>> >> macro te da directamente el lugar donde estas (range("A5").select si
>> >> fuera
>> >> el caso que la celda visible fuera la A5) mi pregunta es saber si
>> >> existe
>> >> una forma como desplazarse sobre las celdas visibles por que si pones
>> >> la
>> >> direccion de una celda que no es visible el excel lo desplaza ahi pero
>> >> eso
>> >> no te sirve de nada, muchas gracias
>> >>
>> >>
>
>
Respuesta Responder a este mensaje
#4 KL
24/09/2005 - 20:07 | Informe spam
Hola Jpdel,

Si te he entendido bien lo que buscas es esto:

Sub Macro2()
Dim Cont As Long
Cont = ActiveSheet.AutoFilter.Range. _
Columns(1).SpecialCells(xlVisible).Count
If Cont < 2 Then
MsgBox "No se ha encontrado ningun dato."
Else
MsgBox "Se han filtrado " & Cont - 1 & " registros."
End If
End Sub

Si no es lo que buscas y si quieres me puedes enviar el archivo o un
pantallazo a mi correo quitando NOSPAM y
PLEASE.

Saludos,
KL


"Jpdel@" wrote in message
news:
Hola KL muy interesante tu codigo, pero me disculpo pregunte mal sorry
ahora si voy a formular bien la pregunta haber si entiendes o haber si me
dejo entender, mira tienes una columna digamos q tambien sea la C, y
tienes una cabezera cuando filtras por un condición con tu autofiltro,las
filas q no cumplen el filtraje de condición se ocultan cierto!!!... mi
pregunta es cuando filtras con autofiltros especificamente y te das con la
sorpresa q no tienes datos como hacer q un codigo de visual basic para q
se detenga ahi o para q te arroje un msgbox o que pase a otra condición
ahora si creo q lo explique bien, haber

sub filtrajecondicion()
if filtraje es vacio then
poner condición o q avise
else
filtrar o cualquier cosa aqui
end if
end sub

espero q ahora si me haya dejado entender la custion es saber si despues
del filtraje si no cumple la condición la fila despues del filtraje o no
ahi datos q es lo me sale a mi me diga pero la cuestión es como saber el
numero de esa fila por si no cumple la condición o esta vacia recuerda q
salen bastantes filas osea seria la fila inmediatamente despues del filtro
PD KL me gustaria enviarte un pantallazo para q me entendieras por k dicen
q una imagen dice mas de mil palabras si me das tu correo por k aqui no se
puede pegar imagenes por fis.

Gracias de antemano por tu tiempo y por la respuesta



KL wrote:

Hola Jpdel,



Este codigo lo que te da es el rango entero de las celdas filtradas
(visibles) de la columna [C]. La instruccion "MsgBox rng.Address" esta
solo
como un ejemplo. Depende de ti como vas a utilizar la variable "rng" una
vez
creada. Podrias hacer algo como:



Sub Macro1()
Dim rng As Range
If ActiveSheet.AutoFilterMode Then
On Error Resume Next
With ActiveSheet.AutoFilter.Range.Offset(1)
Set rng = Intersect(ActiveSheet.Columns("C:C"), _
.Resize(.Rows.Count - 1)).SpecialCells(xlCellTypeVisible)
End With
On Error GoTo 0
If Not rng Is Nothing Then
For Each c In rng
MsgBox c
Next c
End If
End If
End Sub



Saludos,
KL




"Jpdel@" wrote in message
news:%
> este codigo de abajo es bueno me da la ubicación pero solo de la ultima
> celda con caracteres yo deseo, de la celda posterior a esa seria
> simplemente si hubiera un codigo para desplazarse solamente por celdas
> visibles, el resto yo lo haria, o si existe un comando, comprenden la
> idea
>
> KL wrote:
>
>> Hola chicos,
>
>> Como alternativa, si se necesita un codigo mas rapido (aunque un poco
>> mas
>> largo) y la posibilidad de manejar todo el rango a la vez o de forma
>> recurrente se puede usar un macro como el que sigue:
>
>> Sub Macro1()
>> Dim rng As Range
>> If ActiveSheet.AutoFilterMode Then
>> On Error Resume Next
>> With ActiveSheet.AutoFilter.Range.Offset(1)
>> Set rng = Intersect(ActiveSheet.Columns("C:C"), _
>> .Resize(.Rows.Count -
>> 1)).SpecialCells(xlCellTypeVisible)
>> End With
>> On Error GoTo 0
>> If Not rng Is Nothing Then MsgBox rng.Address
>> End If
>> End Sub
>
>> Saludos,
>> KL
>
>
>> "David" <sdgm04(mapstonod)@hotmail.com> wrote in message
>> news:
>> > Cuando aplicas un filtro, es como si las filas que no coincidan con
>> > tu
>> > criterio tomaran un alto cero. Entonces, lo que tienes que hacer,
>> > es
>> > un
>> > ciclo para pasar por las filas con ancho cero utilizando la
>> > propiedad
>> > Offset,
>> > no Range. Seria algo como esto:
>> >
>> > Do
>> > ActiveCell.Offset(1, 0).Select
>> > Loop Until ActiveCell.EntireRow.RowHeight > 0
>> >
>> > Espero que te sirva.
>> >
>> > Saludos...
>> >
>> >
>> > "Jpdel@" escribio:
>> >
>> >> Al trabajar con autofiltros de excel algunas filas se ocultan, mi
>> >> pregunta
>> >> es se puede desplazarse, por las celdas mostradas en pantalla, con
>> >> un
>> >> codigo en VB para el Excel, por que si te pones a grabar una macro
>> >> la
>> >> macro te da directamente el lugar donde estas (range("A5").select
>> >> si
>> >> fuera
>> >> el caso que la celda visible fuera la A5) mi pregunta es saber si
>> >> existe
>> >> una forma como desplazarse sobre las celdas visibles por que si
>> >> pones
>> >> la
>> >> direccion de una celda que no es visible el excel lo desplaza ahi
>> >> pero
>> >> eso
>> >> no te sirve de nada, muchas gracias
>> >>
>> >>
>
>




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