View Single Post
  #9   Report Post  
Posted to microsoft.public.excel.programming
Dave Peterson Dave Peterson is offline
external usenet poster
 
Posts: 35,218
Default How to check row is hidden when apply filter

Set Rng_hidden = nothing
on error resume next
Set Rng_hidden = yourlongexpression
on error goto 0

if rng_hidden is nothing then
'it's hidden
else
'it's not
end if



moonhk wrote:

On Feb 12, 9:53 pm, Dave Peterson wrote:
I don't see where you're checking the .hidden property of any single cell's row.



moonhk wrote:

On 2月11日, 下午9時24分, Dave Peterson wrote:
You could check the .hidden property of the cell or you could just loop through
the visible cells.


Here's a sample of the second:


Option Explicit
Sub testme()


Dim wks As Worksheet
Dim VisRng As Range
Dim myRng As Range
Dim myCell As Range


Set wks = ActiveSheet


With wks
'just a single column
Set myRng = .Range("a1", .Cells(.Rows.Count, "A").End(xlUp))


'remove any existing filter
.AutoFilterMode = False
myRng.AutoFilter Field:=1, Criteria1:="somevalue"


With .AutoFilter.Range.Columns(1)
If .Cells.SpecialCells(xlCellTypeVisible) = 1 Then
MsgBox "only header visible"
Else
'avoid the header
Set VisRng = .Resize(.Cells.Count - 1).Offset(1, 0) _
.Cells.SpecialCells(xlCellTypeVisible)
For Each myCell In VisRng.Cells
MsgBox myCell.Address 'or whatever you need to do
Next myCell
End If
End With
.AutoFilterMode = False 'remove the filter
End With
End Sub


moonhk wrote:


On 2月11æ¥, ä¸ å ˆ9æ17åˆ , Dave Peterson wrote:
You can count the visible cells in a column in the autofilter range:


With activesheet.autofilter.range.columns(1)
  if .cells.count = .cells.specialcells(xlcelltypevisible).cells.count then
   'all visible
  else
   'not all visible
  end if
end with


But that doesn't tell you if the data has been filtered--it could be that all
the cells in the filter meet the criteria, so that all rows are visible.


If that is important, you may want to check something like:


  With activesheet
    if .autofiltermode = true then
      'there are autofilter arrows on the worksheet
      if .filtermode then
       'some filter is applied
       'maybe show all the data
       .showalldata  '????
      end if
    end if
  end with


moonhk wrote:


Hi All


For Excel 2003
When Apply Filter , How to check the row have been filtered out ?


Below coding include filtered out row.


iRows = Application.Selection.Rows.Count
iCols = Application.Selection.Columns.Count


For ir = 1 To iRows
....
Next


--


Dave Peterson


Hi All


When Apply filter , some row have been hidden, When I select some row
to process. the hidden also selected. How to check the row is filter
out by filters ?


e.g.
line 1
line 2 <- Filter out
line 3


When select line1 to line3 , the filter out still selected within
blelow for loop


For ir = 1 To iRows
....
Next


moonhkt


--


Dave Peterson- 隱藏被引用文* -


- 顯示被引用文* -


FYI
I am using check The row is hidden or not.


On Error Resume Next


Set Rng_hidden = Application.Selection.Range(ir & ":" &
ir).SpecialCells(xlCellTypeVisible)
If Rng_hidden Is Nothing Then
'~~ MsgBox Application.Selection.Range(GPD.FM_Name &
ir).Value
CanProcess = False
End If
On Error GoTo 0


iNum = MsgBox("Update to ..." & wksName, vbYesNo + vbQuestion)
If iNum = vbNo Then Exit Sub


iRows = Application.Selection.Rows.Count
iCols = Application.Selection.Columns.Count


cnt_1 = 0
cnt_2 = 0
cnt_3 = 0
cnt_4 = 0
cnt_5 = 0
cnt_6 = 0


For ir = 1 To iRows
'Rows.SpecialCells.Activate
If Application.Selection.Range(GPD.MANU_SYS_ADD & ir).Value =
"PHOENIX" Then
Set Rng_hidden = Nothing
CanProcess = True
On Error Resume Next


Set Rng_hidden = Application.Selection.Range(ir & ":" &
ir).SpecialCells(xlCellTypeVisible)
If Rng_hidden Is Nothing Then
'~~ MsgBox Application.Selection.Range(GPD.FM_Name &
ir).Value
CanProcess = False
End If
On Error GoTo 0
'If Not
Application.Selection.Rows.SpecialCells(xlCellType Visible) = 1 Then
'MsgBox Application.Selection.Range(GPD.FM_Name & ir).Value


If CanProcess = True Then


GPD_ID_VAL = Trim(Application.Selection.Item(ir,
GPD.ID_COL).Value)
If Left(GPD_ID_VAL, 1) = "`" Then
GPD_ID_VAL = Trim(Mid(GPD_ID_VAL, 2, Len(GPD_ID_VAL)))
End If


--

Dave Peterson


Just using check Rng_hidden row, it set rng_hidden return error. The
selected row is not visual able

Set Rng_hidden = Application.Selection.Range(ir & ":" &
ir).SpecialC


--

Dave Peterson