#1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 1
Default activecell

After filtering in VBA, how do you make the first
filtered cell active?
  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5,302
Default activecell

Hi Slikity,

Try

Sub Tester03()
Dim rng As Range

Set rng = ActiveSheet.AutoFilter.Range
Set rng = Range(rng.Offset(1, 0), rng(rng.Count))
On Error Resume Next
Set rng = rng.SpecialCells(xlVisible)
On Error GoTo 0
If Not rng Is Nothing Then
rng(1).Select
End If
End Sub

---
Regards,
Norman



"slikity" wrote in message
...
After filtering in VBA, how do you make the first
filtered cell active?



  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 2,824
Default activecell

This worked ok for me:

Option Explicit

Sub Tester03()
Dim rng As Range

With ActiveSheet.AutoFilter.Range
If .Columns(1).Cells.SpecialCells(xlCellTypeVisible). Count = 1 Then
MsgBox "no visible cells"
Else
.Resize(.Rows.Count - 1, 1).Offset(1, 0) _
.Cells.SpecialCells(xlCellTypeVisible).Cells(1).Se lect
End If
End With
End Sub


slikity wrote:

After filtering in VBA, how do you make the first
filtered cell active?


--

Dave Peterson

  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 2,824
Default activecell

If no rows were visible after the filter, then this selected the cell in the row
below the autofilter range.

This line:
Set rng = Range(rng.Offset(1, 0), rng(rng.Count))
actually just offset the range by one row. I bet you wanted something like:

Set rng = rng.Resize(rng.Rows.Count - 1).Offset(1, 0)

But using a single variable causes some trouble too.

Set rng = ActiveSheet.AutoFilter.Range
Set rng = rng.Resize(rng.Rows.Count - 1).Offset(1, 0)
On Error Resume Next
Set rng = rng.SpecialCells(xlVisible)
On Error GoTo 0

If the rng.specialcells(xlvisible) causes an error, rng isn't set to Nothing.
It doesn't change from what it was before.

It might be easier to use another variable, kind of:

Sub Tester03b()

Dim rng As Range
Dim rngF As Range

Set rng = ActiveSheet.AutoFilter.Range
Set rng = rng.Resize(rng.Rows.Count - 1).Offset(1, 0)

Set rngF = Nothing
On Error Resume Next
Set rngF = rng.SpecialCells(xlVisible)
On Error GoTo 0

If Not rngF Is Nothing Then
rngF(1).Select
End If

End Sub

Norman Jones wrote:

Hi Slikity,

Try

Sub Tester03()
Dim rng As Range

Set rng = ActiveSheet.AutoFilter.Range
Set rng = Range(rng.Offset(1, 0), rng(rng.Count))
On Error Resume Next
Set rng = rng.SpecialCells(xlVisible)
On Error GoTo 0
If Not rng Is Nothing Then
rng(1).Select
End If
End Sub

---
Regards,
Norman

"slikity" wrote in message
...
After filtering in VBA, how do you make the first
filtered cell active?


--

Dave Peterson

  #5   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5,302
Default activecell

Hi Dave,

Thank you and :yes, yes and yes.

As you may have suspected, lazily adopting the path of least
resistance,rather than writing from scratch, I adapted a macro that I
frequently use for autofilter navigation. With my brain in neutral, I
merged my Rng and Rng1 variables and failed to adjust the offset. Of course
limited testing produced no discrepancies. On balance a shoddy effort!


---
Regards,
Norman



"Dave Peterson" wrote in message
...
If no rows were visible after the filter, then this selected the cell in
the row
below the autofilter range.

This line:
Set rng = Range(rng.Offset(1, 0), rng(rng.Count))
actually just offset the range by one row. I bet you wanted something
like:

Set rng = rng.Resize(rng.Rows.Count - 1).Offset(1, 0)

But using a single variable causes some trouble too.

Set rng = ActiveSheet.AutoFilter.Range
Set rng = rng.Resize(rng.Rows.Count - 1).Offset(1, 0)
On Error Resume Next
Set rng = rng.SpecialCells(xlVisible)
On Error GoTo 0

If the rng.specialcells(xlvisible) causes an error, rng isn't set to
Nothing.
It doesn't change from what it was before.

It might be easier to use another variable, kind of:

Sub Tester03b()

Dim rng As Range
Dim rngF As Range

Set rng = ActiveSheet.AutoFilter.Range
Set rng = rng.Resize(rng.Rows.Count - 1).Offset(1, 0)

Set rngF = Nothing
On Error Resume Next
Set rngF = rng.SpecialCells(xlVisible)
On Error GoTo 0

If Not rngF Is Nothing Then
rngF(1).Select
End If

End Sub

Norman Jones wrote:

Hi Slikity,

Try

Sub Tester03()
Dim rng As Range

Set rng = ActiveSheet.AutoFilter.Range
Set rng = Range(rng.Offset(1, 0), rng(rng.Count))
On Error Resume Next
Set rng = rng.SpecialCells(xlVisible)
On Error GoTo 0
If Not rng Is Nothing Then
rng(1).Select
End If
End Sub

---
Regards,
Norman

"slikity" wrote in message
...
After filtering in VBA, how do you make the first
filtered cell active?


--

Dave Peterson





  #6   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 2,824
Default activecell

I just try to slough(?) it off to typos <vbg.



"Norman Jones" wrote in message ...
Hi Dave,

Thank you and :yes, yes and yes.

As you may have suspected, lazily adopting the path of least
resistance,rather than writing from scratch, I adapted a macro that I
frequently use for autofilter navigation. With my brain in neutral, I
merged my Rng and Rng1 variables and failed to adjust the offset. Of course
limited testing produced no discrepancies. On balance a shoddy effort!


---
Regards,
Norman



"Dave Peterson" wrote in message
...
If no rows were visible after the filter, then this selected the cell in
the row
below the autofilter range.

This line:
Set rng = Range(rng.Offset(1, 0), rng(rng.Count))
actually just offset the range by one row. I bet you wanted something
like:

Set rng = rng.Resize(rng.Rows.Count - 1).Offset(1, 0)

But using a single variable causes some trouble too.

Set rng = ActiveSheet.AutoFilter.Range
Set rng = rng.Resize(rng.Rows.Count - 1).Offset(1, 0)
On Error Resume Next
Set rng = rng.SpecialCells(xlVisible)
On Error GoTo 0

If the rng.specialcells(xlvisible) causes an error, rng isn't set to
Nothing.
It doesn't change from what it was before.

It might be easier to use another variable, kind of:

Sub Tester03b()

Dim rng As Range
Dim rngF As Range

Set rng = ActiveSheet.AutoFilter.Range
Set rng = rng.Resize(rng.Rows.Count - 1).Offset(1, 0)

Set rngF = Nothing
On Error Resume Next
Set rngF = rng.SpecialCells(xlVisible)
On Error GoTo 0

If Not rngF Is Nothing Then
rngF(1).Select
End If

End Sub

Norman Jones wrote:

Hi Slikity,

Try

Sub Tester03()
Dim rng As Range

Set rng = ActiveSheet.AutoFilter.Range
Set rng = Range(rng.Offset(1, 0), rng(rng.Count))
On Error Resume Next
Set rng = rng.SpecialCells(xlVisible)
On Error GoTo 0
If Not rng Is Nothing Then
rng(1).Select
End If
End Sub

---
Regards,
Norman

"slikity" wrote in message
...
After filtering in VBA, how do you make the first
filtered cell active?


--

Dave Peterson

  #7   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 25
Default activecell

WHat change do I have to do to the code in order for it to select each row
visible til the end of the shown rows?
thanks
Pedro

"Dave Peterson" wrote:

This worked ok for me:

Option Explicit

Sub Tester03()
Dim rng As Range

With ActiveSheet.AutoFilter.Range
If .Columns(1).Cells.SpecialCells(xlCellTypeVisible). Count = 1 Then
MsgBox "no visible cells"
Else
.Resize(.Rows.Count - 1, 1).Offset(1, 0) _
.Cells.SpecialCells(xlCellTypeVisible).Cells(1).Se lect
End If
End With
End Sub


slikity wrote:

After filtering in VBA, how do you make the first
filtered cell active?


--

Dave Peterson


  #8   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 18
Default activecell

Pedro,

I am not sure I completely understood your question, but maybe this is what
you are looking for:

With ActiveSheet.AutoFilter.Range
If .Columns(1).Cells.SpecialCells(xlCellTypeVisible). Count = 1 Then
MsgBox "no visible cells"
Else
.Cells.SpecialCells(xlCellTypeVisible).Select
End If
End With

Regards,
KL

"Pedro" wrote in message
...
WHat change do I have to do to the code in order for it to select each row
visible til the end of the shown rows?
thanks
Pedro

"Dave Peterson" wrote:

This worked ok for me:

Option Explicit

Sub Tester03()
Dim rng As Range

With ActiveSheet.AutoFilter.Range
If .Columns(1).Cells.SpecialCells(xlCellTypeVisible). Count = 1
Then
MsgBox "no visible cells"
Else
.Resize(.Rows.Count - 1, 1).Offset(1, 0) _
.Cells.SpecialCells(xlCellTypeVisible).Cells(1).Se lect
End If
End With
End Sub


slikity wrote:

After filtering in VBA, how do you make the first
filtered cell active?


--

Dave Peterson




Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
ACTIVECELL LOCATION kt(uk) Excel Discussion (Misc queries) 2 September 12th 08 01:03 PM
If activecell.column = variable then activecell,offset (0,1) Battykoda via OfficeKB.com Excel Discussion (Misc queries) 1 October 2nd 07 08:05 PM
use of activecell inquirer Excel Programming 8 May 16th 04 06:39 AM
Activecell value Shamsul Islam Excel Programming 5 April 30th 04 10:10 PM
how to set activecell? ljb[_2_] Excel Programming 2 November 18th 03 04:49 PM


All times are GMT +1. The time now is 09:39 AM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright ©2004-2025 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"