Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1060to1064
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
Inhaltsverzeichnis

Autofilter in verschiedenen Sheets

Autofilter in verschiedenen Sheets
18.03.2009 10:37:03
Jeff
Hallo,
kurze Frage zum Autofilter.
Ich fülle eine ComboBox in Sheet 3 wie folgt:
Private Sub Auswahl_Jahr_Change()
........
Worksheets("ExterneDaten").Activate
Worksheets("ExterneDaten").Select
Worksheets("ExterneDaten").Range("A1:U1").Select
Selection.AutoFilter
Selection.AutoFilter Field:=3, Criteria1:="=*" & Jahr_Criteria & "*"
Worksheets("ExterneDaten").Range("B2").Select
Worksheets("ExterneDaten").Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Worksheets("Daten").Select
Worksheets("Daten").Range("C2").Select
ActiveSheet.Paste
...........
Anschließend via AdvancedFilter die Unique-Werte und befülle dann die ComboBox. Funktioniert fehlerfrei.
Schönheitsfehler ist allerdings, daß einem beim Change der ComboBox die unterschiedlichen Sheets hin- und hergezeigt werden, wenn auch nur für einen kurzen Moment, aber das ist sehr störend. Gibt es eine Möglichkeit, das auszublenden? Ohne die Sheets zu aktivieren funktioniert leider Auto-Filter nicht...
Danke
Jeff

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Autofilter in verschiedenen Sheets
18.03.2009 10:53:28
Hajo_Zi
Hallo Jeff,
Excel ist ein vielseitiges Programm und man kann viele Probleme damit lösen. Jede positive Seite hat aber auch negative Aspekte - einer davon ist im Makrorecorder enthalten.
Die Bücher, die es zu Excel VBA gibt, erklären viele Funktionen, aber ich habe bisher nur in einem gelesen, dass der vom Makrorecorder aufgezeichnete Code bereinigt werden sollte.
Der Makrorecorder zeichnet alle Aktionen auf, u. a. auch das Auswählen einer Zelle oder eines eingebetteten Objektes (Bild, Diagramm, Zeichnungsobjekt usw.) dabei wird generell Select und Activate aufgezeichnet. Diese Befehle sind in VBA zu 99,9% nicht notwendig. Sie lassen den Bildschirm flackern und senken die Geschwindigkeit bei der Ausführung des Codes. Man sollte also schon von Beginn an bei der Programmierung darauf achten, solche Befehle zu vermeiden. Meine Erfahrung mit dem Vorsatz: Das mache ich später ist, man schreibt das Programm später meist komplett neu. Also kostest es nicht nur Rechnerzeit sondern auch Deine Zeit und ist Dir Deine Zeit so wenig Wert?
Zum Vergleich mit und ohne Select schau Dir auch mal diese Beispielarbeitsmappe an: mit und ohne select Auf meiner Homepage sind alle meine Beispiele ohne Select. Da kann man sich also einige Lösungsansätze zu diesem Thema ansehen.

Anzeige
AW: Autofilter in verschiedenen Sheets
18.03.2009 11:16:16
Jeff
Hallo Hajo,
danke für die Antwort.
Aber der Autofilter lässt sich bei obigem Beispiel *nicht* ohne die elenden Select und Activate Anweisungen durchführen. Besser gesagt führt zu Fehlermeldungen.
Gibts evtl eine Alternative dazu?
Danke
AW: Autofilter in verschiedenen Sheets
18.03.2009 11:22:02
Hajo_Zi
Hallo Jeff,
dann ist Dein neuere Code den ich nicht sehe falsch.
Gruß Hajo
AW: Autofilter in verschiedenen Sheets
18.03.2009 11:29:18
Jeff
Hier der vollständige Code:

Private Sub Auswahl_Jahr_Change()
Worksheets("ExterneDaten").AutoFilterMode = False
Worksheets("Daten").Range("A2:C65536").Clear
Jahr_Criteria = Worksheets("Auswertung").Auswahl_Jahr.Value
Worksheets("ExterneDaten").Activate
Worksheets("ExterneDaten").Select
Worksheets("ExterneDaten").Range("A1:U1").Select
Selection.AutoFilter
Selection.AutoFilter Field:=3, Criteria1:="=*" & Jahr_Criteria & "*"
Worksheets("ExterneDaten").Range("B2").Select
Worksheets("ExterneDaten").Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Worksheets("Daten").Select
Worksheets("Daten").Range("C2").Select
ActiveSheet.Paste
Set rOldList = Worksheets("ExterneDaten").Range("C1", Worksheets("ExterneDaten").Range(" _
C65536").End(xlUp))
last_i = Worksheets("Daten").Range("C65536").End(xlUp).Row
Worksheets("Daten").Range("C2: C" & last_i & "").AdvancedFilter Action:=xlFilterCopy,  _
CopyToRange:=Worksheets("Daten").Range("A2"), Unique:=True
last_zeile = Worksheets("Daten").Range("A65536").End(xlUp).Row
Worksheets("Daten").Cells(last_zeile + 1, 1) = "Alle"
Set rListSort = Worksheets("Daten").Range("A1", Worksheets("Daten").Range("A65536").End( _
xlUp))
With rListSort
.Sort Key1:=.Cells(2, 1), Order1:=xlAscending, Header:=xlYes, OrderCustom:=1, MatchCase: _
=False, Orientation:=xlTopToBottom
End With
strRowSource = Worksheets("Daten").Range("A2", Worksheets("Daten").Range("A65536").End(xlUp) _
).Address
Worksheets("Auswertung").Auswahl_Fachbereich.ListFillRange = "Daten!" & strRowSource
Worksheets("Auswertung").Auswahl_Fachbereich.ListIndex = 0
Worksheets("Auswertung").Select
Worksheets("ExterneDaten").AutoFilterMode = False
End Sub


Anzeige
AW: Autofilter in verschiedenen Sheets
18.03.2009 12:11:34
Hajo_Zi
Hallo Jef,
ich baue die Datei nicht nach. Variablen sollten Definiert werden.

Private Sub Auswahl_Jahr_Change()
Dim LoLetzte As Long
Dim rOldList As Range
Worksheets("ExterneDaten").AutoFilterMode = False
Worksheets("Daten").Range("A2:C65536").Clear
Jahr_Criteria = Worksheets("Auswertung").Auswahl_Jahr.Value
With Worksheets("ExterneDaten").Worksheets("ExterneDaten")
If Not .AutoFilterMode Then .Range("A1").AutoFilter
If .FilterMode Then .ShowAllData
.AutoFilter Field:=3, Criteria1:="=*" & Jahr_Criteria & "*"
LoLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 2)), .Cells(.Rows.Count, 1).End(xlUp).Row, . _
Rows.Count)
.Range("B2:B" & LoLetzte).Copy Worksheets("Daten").Range("C2")
Set rOldList = .Range("C1", .Range("C65536 ").End(xlUp))
End With
With Worksheets("Daten")
last_i = .Range("C65536").End(xlUp).Row
.Range("C2: C" & last_i & "").AdvancedFilter Action:=xlFilterCopy, _
CopyToRange:=.Range("A2"), Unique:=True
last_zeile = .Range("A65536").End(xlUp).Row
.Cells(last_zeile + 1, 1) = "Alle"
Set rListSort = .Range("A1", Worksheets("Daten").Range("A65536").End(xlUp))
End With
With rListSort
.Sort Key1:=.Cells(2, 1), Order1:=xlAscending, Header:=xlYes, OrderCustom:=1, MatchCase: _
=False, Orientation:=xlTopToBottom
End With
strRowSource = Worksheets("Daten").Range("A2", Worksheets("Daten").Range("A65536").End(xlUp) _
_
).Address
Worksheets("Auswertung").Auswahl_Fachbereich.ListFillRange = "Daten!" & strRowSource
Worksheets("Auswertung").Auswahl_Fachbereich.ListIndex = 0
Worksheets("ExterneDaten").AutoFilterMode = False
Set rOldList = Nothing
Set rListSort = Nothing
End Sub


Gruß Hajo

Anzeige
AW: Autofilter in verschiedenen Sheets
18.03.2009 14:44:29
Jeff
So nähert man sich an. Nach wie vor geht der Autofilter auch nach untenstehender Methode nur durch Select. Ansonsten erhält man einen Fehler. Habe aber nach zwischenzeitlicher Nutzung des Application.ScreenUpdating = False das Problem, das meine ComboBox Auswahl_Fachbereich nicht mehr gefüllt wird!!! Statt der Lösung habe ich nun 2 Probleme... ;(
Worksheets("ExterneDaten").AutoFilterMode = False
Worksheets("Daten").Range("A2:C65536").Clear
Jahr_Criteria = Worksheets("Auswertung").Auswahl_Jahr.Value
With Worksheets("ExterneDaten")
.Select
.Range("A1").AutoFilter
Selection.AutoFilter Field:=3, Criteria1:="=*" & Jahr_Criteria & "*"
End With
With Worksheets("Daten")
last_i = Worksheets("ExterneDaten").Range("B65536").End(xlUp).Row
Worksheets("ExterneDaten").Range("B2: B" & last_i & "").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range("A2"), Unique:=True
last_zeile = .Range("A65536").End(xlUp).Row
.Cells(last_zeile + 1, 1) = "Alle"
Set rListSort = .Range("A1", Worksheets("Daten").Range("A65536").End(xlUp))
End With
With rListSort
.Sort Key1:=.Cells(2, 1), Order1:=xlAscending, Header:=xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End With
strRowSource = Worksheets("Daten").Range("A2", Worksheets("Daten").Range("A65536").End(xlUp)).Address
Worksheets("Auswertung").Auswahl_Fachbereich.ListFillRange = "Daten!" & strRowSource
Worksheets("Auswertung").Select
Worksheets("ExterneDaten").AutoFilterMode = False
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige