ich habe des öfteren probleme, bei dateien mit gesetzem autofilter,
mit vba die nächste nicht gefilterte zeile zu finden. gibt es hier
irgendwelche tricks? (activecell.offset(1,0) klappt ja nicht, da die
nächste zeile ja ausgefiltert sein könnte und ich die gar nicht
bearbeiten muss.)
bspw. sowas wie if activecell.entirerow. is filtered der sowas.
oder kann ich den tastendruck nach unten simulieren? (send keys oder
sowas.)
Andreas.
Sub Test()
Dim R As Range
'Durchlaufe Spalte A, benutzter Bereich, sichtbare Zellen
For Each R In Intersect( _
Columns(1), _
ActiveSheet.UsedRange, _
Cells.SpecialCells(xlCellTypeVisible))
Debug.Print R
Next
End Sub
Function GetAutoFilterRange( _
Optional WithoutHeader As Boolean = True, _
Optional ByVal W As Worksheet = Nothing) As Range
'Gibt den sichbaren Datenbereich eines Autofilters zurück
Dim R As Range
If W Is Nothing Then Set W = ActiveSheet
If W.AutoFilterMode Then
'Aktiven Filterbereich holen
Set R = W.AutoFilter.Range
'Überschrift aus dem Bereich entfernen?
If WithoutHeader Then _
Set R = W.Range(W.Cells(R.Row + 1, R.Column), _
W.Cells(R.Row + R.Rows.Count - 1, R.Column + R.Columns.Count - 1))
'Wenn kein Filter aktiv ist den gesamten Bereich zurückgeben
If W.FilterMode Then
'Wenn keine Zellen da sind gibt es einen Fehler!
On Error Resume Next
'Alle sichtbaren Zellen im Filterbereich
Set R = R.SpecialCells(xlCellTypeVisible)
'Alle Zellen wurden gefiltert, kein Datenbereich
If Err <> 0 Then Set R = Nothing
End If
'Bereich zurückgeben
Set GetAutoFilterRange = R
Else
'Kein Autofilter, kein Bereich
Set GetAutoFilterRange = Nothing
End If
End Function
Sub Nächste_Eingeblendet_nach_ActiveCell()
Dim intI As Integer
Dim lngS As Long, lngZ As Long
lngS = ActiveCell.Column
lngZ = ActiveCell.Row
For intI = lngZ + 1 To ActiveCell.CurrentRegion.Rows.Count
If Not Cells(intI, lngS).EntireRow.Hidden Then
Debug.Print "Nächste Zeile = " & Cells(intI, lngS).Row
Exit Sub
End If
Next
End Sub
--
Mit freundlichen Grüssen Eberhard
XP home XL 2000
Intersect(ActiveCell(2).Resize(Rows.Count – ActiveCell.Row),
Cells.SpecialCells(xlCellTypeVisible))(1).Select
Peter
Private Sub Example_GetAutoFilterRange()
Dim Bereich As Range, R As Range, Zeile As Range
'Gefilterten Bereich holen
Set Bereich = GetAutoFilterRange
'Ist was da?
If Bereich Is Nothing Then Exit Sub
'Durchlaufe erste Spalte
For Each R In Intersect(Bereich, Bereich.Columns(1))
'Ganze Zeile bestimmen
Set Zeile = R.Resize(1, Bereich.Columns.Count)
'Ausgeben
Debug.Print R; Zeile.Address
Next
End Sub
habe jetzt in anderen forem gesehen, es soll wohl auch über
activecell.entirerow.hidden abfragen gehen. habs noch ned ausprobiert,
aber denke das könnte gehen.
da fällt mir gerade ein:
"Die Deutsche Rechtschreibung ist Freeware, sprich, du kannst sie kostenlos
nutzen. Allerdings ist sie nicht Open Source, d.h. du darfst sie nicht
verändern oder in veränderter Form veröffentlichen." ;-)
Ist richtig, während der Autofilter aktiv ist sind die gefilterten
Zeilen hidden.
Könntest Du abfragen, ala:
for i = 1 to LetzteZeile
if Cells(i,1).EntireRow.hidden then
'ausgelebendet
else
'eingeblendet
endif
next
Ist aber IMHO eine Dummylösung, weil Du nicht sicher sein kannst ob der
User eine Zeile, die nicht zum Autofilterbereich gehört, selber
ausgeblendet hat.
Oder vielleicht Zeilen vor/nach dem Autofilter dazugebastelt hat.
Hab ich mir auch schon mal 'ne blutige Nase bei geholt. Denk mal drüber
nach und dann probier mal Example_GetAutoFilterRange aus. ;-)
Andreas.