Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
908to912
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
908to912
908to912
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Zeilen ausblenden mit VBA
28.09.2007 00:16:00
Thomas
Hallo liebe Forummitglieder,
ich möchte mit Hilfe einer ComboBox einen Filter realisieren, d.h. alle Zeilen, welche nicht das Kriterium enthalten, ausblenden. Jedoch komme ich an einem bestimmten Punkt einfach nicht weiter. Egal welche Schleife ich bisher versucht habe, immer wenn "Selection.EntireRow.Hidden = True" ausgeführt wird beginnt das Makro komplett von vorn!!! Es wird also wieder bei Zeile 5 begonnen, da diese aber nicht mehr da, sondern bereits ausgeblendet ist, gibt es eine Fehlermeldung!!!
--------------------------------

Sub ComboBox_Change()
AktuelleZeile = 5
LetzteZeile = 30
Spalte = 5
While Zeile  ComboBox.Value Then Selection.EntireRow.Hidden = True
AktuelleZeile = AktuelleZeile + 1
Wend
End Sub

--------------------------------
Wo liegt mein Fehler? Oder sollte ich das komplett anders lösen? Ich bin für jede Hilfe extrem dankbar.
Viele Grüße, Thomas.

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilen ausblenden mit VBA
28.09.2007 03:06:57
fcs
Hallo Thomas,
du hast einen Variablenfehler in der Schleifenprüfung. Das resultiert in einer Endlosschleife, ist aber wohl nicht das Hauptproblem.
Wenn das Makro immer wieder neu gestartet wird, dann löst entweder die Zellselektion oder das Ausblenden eine Änderung an der Combox aus. Deshalb muss wohl während der Makroausführung die Reaktion auf Ereignisse deaktiviert und am Ende wieder eingeschaltet werden.
Zusätzlich solltets du auf "Objekt.Select und Selection.Methode" verzichten. Diese vom Makrorekorder aufgezeichnete Code-Variante ist relativ langsam und führt gerne mal zu Problemen. Man kann Objekt und Methode/Eigenschaft immer zusammenziehen zu Objekt.Methode bzw. Objekt.Eigenschaft.
In deinem Fall ist die For-Next-Schleife übrigens die etwas einfachere Variante.
Gruß
Franz

Sub ComboBox_Change()
On Error GoTo Fehler
AktuelleZeile = 5
LetzteZeile = 30
Spalte = 5
Application.EnableEvents = False
For AktuelleZeile = AktuelleZeile To LetzteZeile
If Cells(AktuelleZeile, Spalte).Value  ComboBox.Value Then
Cells(AktuelleZeile, Spalte).EntireRow.Hidden = True
End If
Next
GoTo Beenden
Fehler:
msdbox "Fehler Nr " & Err.Number & vbLf & Err.Description
Beenden:
Application.EnableEvents = True
End Sub


Anzeige
AW: Zeilen ausblenden mit VBA
28.09.2007 17:10:00
Thomas
Hallo Franz,
vielen Dank für Deine Antwort. Ich habe es zum Laufen bekommen, musste aber leider feststellen, dass diese Variante relativ langsam ist. Ich habe nun probiert, mit dem Autofilter zu arbeiten, doch leider komme ich auch da nicht bis zum Ende.
-------------------------

Sub Filtern()
Application.ScreenUpdating = False
Selection.AutoFilter field:=5, Criteria1:=ComboBox.Value, _
VisibleDropDown:=False
Selection.AutoFilter field:=1, VisibleDropDown:=False
Selection.AutoFilter field:=2, VisibleDropDown:=False
Selection.AutoFilter field:=3, VisibleDropDown:=False
Selection.AutoFilter field:=4, VisibleDropDown:=False
Selection.AutoFilter field:=6, VisibleDropDown:=False
Selection.AutoFilter field:=7, VisibleDropDown:=False
Selection.AutoFilter field:=8, VisibleDropDown:=False
Selection.AutoFilter field:=9, VisibleDropDown:=False
Selection.AutoFilter field:=10, VisibleDropDown:=False
Selection.AutoFilter field:=11, VisibleDropDown:=False
Selection.AutoFilter field:=12, VisibleDropDown:=False
Selection.AutoFilter field:=13, VisibleDropDown:=False
Selection.AutoFilter field:=14, VisibleDropDown:=False
Application.ScreenUpdating = True
End Sub


----------------
Ich habe 14 Spalten, in welchen ich diesen Autofilter-Pfeil ausblenden möchte, weil ich ja mit einer ComboBox arbeiten will. Wenn ich nun dieses Makro über "Extras --> Makro --> Makros ..." ausführe, klappt alles genau so wie ich mir das vorstelle, auch das Filterkriterium aus der ComboBox wird korrekt ausgelesen und verwendet.
Wenn ich jedoch mit der ComboBox selbst arbeite, also mit ComboBox_Change(), und ein Kriterium darüber auswählen möchte, filtert Excel zunächst alle Werte korrekt bevor ich dann wieder im VBA-Editor lande, in welchem die Zeile "Selection.AutoFilter field:=5, Criteria1:=Filter.Value, VisibleDropDown:=False" gelb hinterlegt ist.
Ich bin fast am verzweifeln ...
Gruß, Thomas.

Anzeige
AW: Zeilen ausblenden mit VBA
28.09.2007 17:12:28
Thomas
Hallo Franz,
vielen Dank für Deine Antwort. Ich habe es zum Laufen bekommen, musste aber leider feststellen, dass diese Variante relativ langsam ist. Ich habe nun probiert, mit dem Autofilter zu arbeiten, doch leider komme ich auch da nicht bis zum Ende.
-------------------------

Sub Filtern()
Application.ScreenUpdating = False
Selection.AutoFilter field:=5, Criteria1:=ComboBox.Value, _
VisibleDropDown:=False
Selection.AutoFilter field:=1, VisibleDropDown:=False
Selection.AutoFilter field:=2, VisibleDropDown:=False
Selection.AutoFilter field:=3, VisibleDropDown:=False
Selection.AutoFilter field:=4, VisibleDropDown:=False
Selection.AutoFilter field:=6, VisibleDropDown:=False
Selection.AutoFilter field:=7, VisibleDropDown:=False
Selection.AutoFilter field:=8, VisibleDropDown:=False
Selection.AutoFilter field:=9, VisibleDropDown:=False
Selection.AutoFilter field:=10, VisibleDropDown:=False
Selection.AutoFilter field:=11, VisibleDropDown:=False
Selection.AutoFilter field:=12, VisibleDropDown:=False
Selection.AutoFilter field:=13, VisibleDropDown:=False
Selection.AutoFilter field:=14, VisibleDropDown:=False
Application.ScreenUpdating = True
End Sub


----------------
Ich habe 14 Spalten, in welchen ich diesen Autofilter-Pfeil ausblenden möchte, weil ich ja mit einer ComboBox arbeiten will. Wenn ich nun dieses Makro über "Extras --> Makro --> Makros ..." ausführe, klappt alles genau so wie ich mir das vorstelle, auch das Filterkriterium aus der ComboBox wird korrekt ausgelesen und verwendet.
Wenn ich jedoch mit der ComboBox selbst arbeite, also mit ComboBox_Change(), und ein Kriterium darüber auswählen möchte, filtert Excel zunächst alle Werte korrekt bevor ich dann wieder im VBA-Editor lande, in welchem die Zeile "Selection.AutoFilter field:=5, Criteria1:=Filter.Value, VisibleDropDown:=False" gelb hinterlegt ist.
Ich bin fast am verzweifeln ...
Gruß, Thomas.

Anzeige
AW: Zeilen ausblenden mit VBA
01.10.2007 01:03:24
fcs
Hallo Thomas,
da gibt es Probleme mit dem Selektion-Objekt, wenn du von der Change-Box aus das Setzen des Autofilters versuchst. Vor dem Setzen der Filter in der Tabelle darf die Kombibox nicht mehr das Objekt mit dem Fokus sein. Konsequenter Weise sollte man komplett mit Objekten arbeiten.
Folgende Anpassung, die zunächst eine beliebige Zelle in der Tabelle selektiert, funktioniert.
Als Vereinfachung der Filterdefinition solltest du eine Select Case -Anweisung verwenden. Auch eine Fehlerbehandlung ist hilfreich, wenn man bei Fehlern das Makro kontrolliert verlassen möchte ohne dass direkt der VBA-Editor angezeigt wird.
Nachfolgend beide Varianten. Den Namen der Combobox muss du ggf. noch anpassen.
Gruß
Franz

Private Sub ComboBox1_Change()
Range("D1").Select
Call Filtern
End Sub
Sub Filtern()
Dim wks As Worksheet
Application.ScreenUpdating = False
Set wks = ActiveSheet
With wks.AutoFilter.Range
.AutoFilter field:=5, Criteria1:=ComboBox1.Value, VisibleDropDown:=False
.AutoFilter field:=1, VisibleDropDown:=False
.AutoFilter field:=2, VisibleDropDown:=False
.AutoFilter field:=3, VisibleDropDown:=False
.AutoFilter field:=4, VisibleDropDown:=False
.AutoFilter field:=6, VisibleDropDown:=False
.AutoFilter field:=7, VisibleDropDown:=False
.AutoFilter field:=8, VisibleDropDown:=False
.AutoFilter field:=9, VisibleDropDown:=False
.AutoFilter field:=10, VisibleDropDown:=False
.AutoFilter field:=11, VisibleDropDown:=False
.AutoFilter field:=12, VisibleDropDown:=False
.AutoFilter field:=13, VisibleDropDown:=False
.AutoFilter field:=14, VisibleDropDown:=False
End With
Application.ScreenUpdating = True
End Sub
Sub Filtern2()
Dim wks As Worksheet, iI%
Application.ScreenUpdating = False
On Error GoTo Fehler
Set wks = ActiveSheet
With wks.AutoFilter.Range
For iI = 1 To wks.AutoFilter.Filters.Count
Select Case iI
Case 1 To 4, 6 To 14
.AutoFilter field:=iI, VisibleDropDown:=False
Case 5
.AutoFilter field:=iI, Criteria1:=ComboBox1.Value, VisibleDropDown:=False
Case Else
'do nothing
End Select
Next
End With
GoTo Beenden
Fehler:
MsgBox "Fehler Nr. : " & Err.Number & " ist aufgetreten!" & vbLf & Err.Description
Beenden:
Application.ScreenUpdating = True
Set wks = Nothing
End Sub


Anzeige

314 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige