PDA

Vollständige Version anzeigen : Zeile durchblättern ohne ausgefilterte Zeilen


Thomasey
27.05.2015, 05:57
Hallo zusammen,

ich habe ein Formularsteuerelement "Leiste zum Verschieben von Fensterinhalten".

Bei Steuerelement formatieren, Registerkarte "Steuerung" habe ich bei Zellverknüpfung

$D$8

Im Tabellenblatt habe ich in der Zelle E6 folgende Formel

=INDEX(ID;D8)

Soweit funktioniert es, nur wenn ich anschließend die Daten filtere, beachtet das Steuerelement nicht den Filter. Es sollte so sein, dass die ausgeblendeten Zeilen übersprungen werden.

Zum einfacheren Nachvollziehen hänge ich eine Beispieldatein mit an.

Vielen Dank für eure Hilfe.

Gruß
Thomas

Hajo_Zi
27.05.2015, 07:24
Hallo Thomas,

ich habe mir die Datei nicht angesehen.
Ich vermute das bekommst Du nur per VBA hin. Zuweisen der sichtbaren Zellen.
Man könnte vermuten Du benutzt kein ActiveXSteuerelement.
Ich vermute bei Formular bekommst Du es nicht hin.

<img src="http://Hajo-Excel.de/images/grusz1.gif" align="middle" height="40" alt="Grußformel"><a href="http://Hajo-Excel.de/index.htm"><img border="0" src="http://Hajo-Excel.de/images/logo_hajo3.gif" align="middle" height="40" alt="Homepage"></a>

Thomasey
27.05.2015, 07:31
Hallo Hajo,

kannst du mir eine VBA-Lösung anbieten?

Gruß
Thomas

Hajo_Zi
27.05.2015, 07:35
Hallo Thomas,

Nein, was wohl auch daran liegt das ich Deine KomboBox nicht sehe.
Ich teste immer erst den Ist Zustand. Was nicht möglich ist.
War es doch schon richtig das ich für den ersten Beitrag die Datei nicht runtergeladen habe. Jetzt war es sinnlos.

Edit
Für ComboBox in Tabelle kann ich noch Code schreiben. Alle anderen Steuerelemente kann ich nicht.
Ich bin dann raus. Da Combobox nicht mehr relevant.

<a href="http://Hajo-Excel.de/index.htm" target="_blank" title="Hajo's Excelseiten">Gruß Hajo</a>

Superingo2
27.05.2015, 09:48
Hallo Thomas,

die Filtrierung von Daten ist größtenteils nur optisch nutzbar. Einzige mir bekannte Außnahme ist TEILERGEBNIS(). Somit wirkt die Filtrierung auch nicht im Steuerelement.
Ich habe Dir trotzdem mal eine Lösung mithilfe eines Dropdownfeldes gebastelt.
Die makrogesteuerte Filtrierung ist dabei nicht mehr nötig, habe sie Dir aber trotzdem im Makro stehen lassen.

Hilft Dir das weiter?

LG Ingo

Beverly
27.05.2015, 10:40
Hi Thomas,

wenn du einen SpinButton aus den ActiveX-Steuerelementen benutzt, dann könnte man es vielleicht so lösen - Code im Codemodul des Tabellenblattes:

Option Explicit
Dim arrZeilen()

Private Sub SpinButton1_Change()
Dim lngZeile As Long
Dim lngLetzte As Long
Dim lngZaehler As Long
With Worksheets("Daten")
If .AutoFilterMode Then
If .FilterMode Then
lngLetzte = .Columns(1).Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
SpinButton1.Max = lngLetzte
ReDim arrZeilen(0 To .Range(.Cells(1, 1), .Cells(lngLetzte, 1)).SpecialCells(xlCellTypeVisible).Count - 2)
For lngZeile = 2 To lngLetzte
If .Cells(lngZeile, 1).Height > 0 Then
arrZeilen(lngZaehler) = lngZeile
lngZaehler = lngZaehler + 1
End If
Next lngZeile
End If
End If
End With
End Sub

Private Sub SpinButton1_SpinDown()
Dim lngZeile As Long
Dim lngSpin As Long
lngSpin = SpinButton1.Value
With Worksheets("Daten")
If .AutoFilterMode Then
If .FilterMode Then
If IsError(Application.Match(lngSpin, arrZeilen(), 0)) Then
For lngZeile = UBound(arrZeilen()) To 0 Step -1
If arrZeilen(lngZeile) < lngSpin Then
SpinButton1.Value = arrZeilen(lngZeile)
Exit For
ElseIf lngZeile = 0 Then SpinButton1.Value = arrZeilen(0)
End If
Next lngZeile
End If
End If
End If
End With
End Sub

Private Sub SpinButton1_SpinUp()
Dim lngZeile As Long
Dim lngSpin As Long
lngSpin = SpinButton1.Value
With Worksheets("Daten")
If .AutoFilterMode Then
If .FilterMode Then
If IsError(Application.Match(lngSpin, arrZeilen(), 0)) Then
For lngZeile = 0 To UBound(arrZeilen())
If arrZeilen(lngZeile) >= lngSpin Then
SpinButton1.Value = arrZeilen(lngZeile)
Exit For
End If
Next lngZeile
End If
End If
End If
End With
End Sub

'.... hier dann dein weiterer Code



<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

xlph
27.05.2015, 11:16
Hallo,

mit einer zusätzlichen Spalte ("lfd-nr") und der Aggregat()-Funktion
lässt sich das einfach lösen.

Thomasey
27.05.2015, 11:37
Danke! Viele gut Lösungsvorschläge. Vielen Danke an alle, habt mir sehr weitergeholfen!

xlph
27.05.2015, 13:05
Hallo,

hab noch ein wenig rumgestestet.

Entstanden sind 2 weitere Versionen.

Superingo2
27.05.2015, 13:20
Hallo xlph,

ich habe mir nur Deine Version2 (Matrixformel) angeschaut, und bin restlos begeistert!!!! Das dürfte exakt das sein, was der TE sich gewünscht hat.

TOLLE ARBEIT!!!

:10points: :10points: :10points:

:winner: :winner: :winner:

:hands: :hands: :hands:

LG Ingo