Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1524to1528
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

vba code optimieren

vba code optimieren
16.11.2016 22:38:19
Fred
Hallo vba Experten,
in meiner Mappe häufen sich langsam die vba-Anweisungen und fast für jede Aktion habe ich einen Button. Also will ich "langsam alles zusammen legen".
Ich habe hier mal 2 Codes vereint:

Sub beide_ungefiltert()
Application.ScreenUpdating = False
Worksheets("Kriterien").Range("N2:CY3").ClearContents 'enttfernt bisherige Kriterien-HeimTeam
Worksheets("Kriterien").Range("N12:CY13").ClearContents 'enttfernt bisherige Kriterien-GastTeam
Worksheets("HeimTeam").Activate
Selection.AutoFilter
' prüft ob Filterfunktionen in HeimTeam vorhanden sind, vorhandene werden entfernt
With ActiveSheet
If .AutoFilterMode Then
If .FilterMode Then .ShowAllData
End If
End With
' filtert HeimTeam
Sheets("HeimTeam").Activate
Range("A6:CL3350").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Sheets("Kriterien").Range("N1:CY2"), Unique:=False
Worksheets("GastTeam").Activate
Selection.AutoFilter
' prüft ob Filterfunktionen in GastTeam vorhanden sind, vorhandene werden entfernt
With ActiveSheet
If .AutoFilterMode Then
If .FilterMode Then .ShowAllData
End If
End With
' filtert GastTeam
Sheets("GastTeam").Activate
Range("A6:CL3350").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Sheets("Kriterien").Range("N11:CY12"), Unique:=False
Worksheets("Center").Activate
End Sub
Vorweg: Es läuft. Mich würde es aber nicht wundern, wenn dort einiges "überflüssig oder unrichtig" aufgebaut ist.
Könnte sich jemand dies genauer anschauen und evt. eine Alternative aufzeigen?
mfg
Fred

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

Betreff
Datum
Anwender
Anzeige
AW: vba code optimieren
16.11.2016 23:43:07
snb
Verzichte auf 'Select' und 'Activate' in VBA.
AW: vba code optimieren
17.11.2016 00:04:00
Fred
Moin snb,
naja, zB

Worksheets("HeimTeam").Activate
Selection.AutoFilter
wie schreibe ich das dann optimal?
Worksheets("HeimTeam").Selection.AutoFilter
funzt nicht.
mfg
Fred
AW: vba code optimieren
17.11.2016 05:49:05
fcs
Hallo Fred,
wenn man auf Activate und Select/Selection erzeichtet, dann muss man die Blatt- und Zellebezüge immer korrekt referenzieren. Dies löst man meist am besten über ein With-End With-Konstrukt.
Selection.Autofilter
ist bei dir nicht ganz korrekt eingebaut.
Der Autofilter wird ggf. unnötiger Weise aktiviert, nur um dann durch das Setzen des Spezialfilters wieder deaktiviert zu werden.
Die Anweisung zum Aufheben des Autofilters gehört in die Prüfung, ob der Autofilter aktiviert ist.
Falls die letzte Zeile im zu filternden Bereich nicht fix (3350) ist, dann solltest du das auch dynamisch anpassen.
LG
Franz
Sub beide_ungefiltert()
Dim wks As Worksheet
Dim Zeile_L As Long
Application.ScreenUpdating = False
Worksheets("Kriterien").Range("N2:CY3").ClearContents 'enttfernt bisherige Kriterien- _
HeimTeam
Worksheets("Kriterien").Range("N12:CY13").ClearContents 'enttfernt bisherige Kriterien- _
GastTeam
Set wks = ActiveWorkbook.Worksheets("HeimTeam")
With wks
'        .Activate
' prüft ob Filterfunktionen in HeimTeam vorhanden sind, vorhandene werden entfernt
If .AutoFilterMode Then
If .FilterMode Then .ShowAllData
.AutoFilterMode = False
End If
Zeile_L = .UsedRange.Row + .UsedRange.Rows.Count - 1
' filtert HeimTeam
.Range("A6:CL" & Zeile_L).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Sheets("Kriterien").Range("N1:CY2"), Unique:=False
End With
Set wks = ActiveWorkbook.Worksheets("GastTeam")
With wks
'        .Activate
' prüft ob Filterfunktionen in HeimTeam vorhanden sind, vorhandene werden entfernt
If .AutoFilterMode Then
If .FilterMode Then .ShowAllData
.AutoFilterMode = False
End If
Zeile_L = .UsedRange.Row + .UsedRange.Rows.Count - 1
' filtert GastTeam
.Range("A6:CL" & Zeile_L).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Sheets("Kriterien").Range("N11:CY12"), Unique:=False
End With
Worksheets("Center").Activate
Application.ScreenUpdating = True
End Sub

Anzeige
AW: vba code optimieren
17.11.2016 12:58:57
Fred
Hallo Franz,
danke für deine Korrektur. Das z.B. mit dem vergeben von Variablen(namen) sehe ich bei euch Profis ja immer wieder, wenn es darum geht, etwas öfters vorkommendes oder komplexeres zu gestalten.
In meiner Arbeitsmappe soll des öfteren auf zwei Blättern etwas per Code abgearbeitet werden. Ich denke mal, dass ich deine Korrektur sehr wohl als Referenz auch für weitere Aufgaben nutzen kann.
Wenn ich mal richtig rate, ermittelt Variablenname „Zeile_L“ die letzte Zeile mit Inhalt, folglich „CL & Zeile_L“ die letzte „beschriebene“ Zeile in Spalte „CL“. Alleine durch diese Info, sollte ich in 4 vergangenen Codes Änderungen vornehmen.
Da kommt mir gerade die Idee, ob es da nicht Sinn macht, wenn man die Funktion „Zeile_L“ für alle seine Arbeitsmappen zugänglich macht.
Wie auch immer; Danke für die Hilfe Franz. Dein Script funzt, ich habe den Ansatz für weitere Aufgaben doch ich vermute mal, dass ich auch in Zukunft Fragen hier im Forum stelle :-)
Gruß
Fred
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige