Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1088to1092
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

Schleife vekürzen

Schleife vekürzen
Jörg-HH
Hi Leute
mit
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
For Each ws In ThisWorkbook.Worksheets
If ws.Name "config" _
And ws.Name "ToDo" _
And ws.Name "Formular" Then
Application.DisplayAlerts = False
ws.Delete
Application.DisplayAlerts = True
End If
Next ws
...usw...
lösche ich nicht benötigte Arbeitsblätter (jene vor dem Blatt config). Da das knapp neunzig Stück sind, dauert die Geschichte ewig. Kann man das irgendwie zusammenfassen? zB von ... bis ... auswählen und dann en bloc löschen?
Grüße - Jörg

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Schleife vekürzen
18.07.2009 14:26:14
Tino
Hallo,
versuche es mal hiermit.
Sub Test()
Dim sAr() As String
Dim i As Integer
Dim mySh As Worksheet

For Each mySh In ThisWorkbook.Worksheets
 If mySh.Name <> "Formular" And mySh.Name <> "config" And mySh.Name <> "ToDo" Then
  Redim Preserve sAr(i)
  sAr(i) = mySh.Name
  i = i + 1
 End If
Next mySh

Application.DisplayAlerts = False
 Sheets(sAr).Delete
Application.DisplayAlerts = True

End Sub
Gruß Tino
Anzeige
AW: Schleife vekürzen
18.07.2009 15:55:45
Daniel
Hi
probier mal das Makro
Sub test()
Dim i As Long
Sheets("Config").Move before:=Sheets(1)
Sheets("ToDo").Move before:=Sheets(1)
Sheets("Formula").Move before:=Sheets(1)
Sheets(4).Select
For i = 5 To ActiveWorkbook.Sheets.Count
ActiveWorkbook.Sheets(i).Select 0
Next
Application.DisplayAlerts = False
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True
End Sub
Kleiner Tipp noch am Rande zur Geschwindigkeitssteigerung:
sollte in einer Schleife eine IF-Abfrage mit mehreren AND - Bedingungen enthalten sein, so ist es schneller, mehrere IFs zu verschachteln, dh. langsam ist:
IF x AND y AND z then

Schneller ist
IF x Then
IF y THEN
If z THEN
das liegt daran, daß im ersten Fall immer alle Bedingungen geprüft werden, auch wenn die erste nicht erfüllt ist.
im 2. Beispiel werden die 2. und 3. Bedingung nur geprüft, wenn die erste auch erfüllt ist, es wird also überflüssige Arbeit vermieden.
in meinem Makro wird allerdings durch geschickte Sortierung die Prüfung ganz überflüssig.
Gruß, Daniel
das Makro enthält keine Sicherheitsabfragen, dh. die 3 benannten Sheets müssen vorhanden sein und noch mindestens 1 weiteres, das gelöscht werden soll, sonst gibts nen Fehler.
falls das ein Problem ist, müssten, die Sicherheitsabfragen noch eingebaut werden.
Anzeige
klappt... :-))
18.07.2009 19:12:22
Jörg-HH
Hi Daniel,
wenn ich dich richtig verstanden habe, verschiebst du die drei Blätter an den Anfang und löschst dann alle dahinter, oder? - Das Ganze klappt ganz ausgezeichnet! Es beschleunigt das Verfahren sehr. Vielen Dank!!
Was ich noch nicht verstanden habe:
Sheets(4).Select
For i = 5 To ActiveWorkbook.Sheets.Count
ActiveWorkbook.Sheets(i).Select 0
Da selektiere ich das 4. Blatt, dann selektiere ich das 5. bis letzte Blatt und lösche... Wieso ist dann auch das 4. Blatt gelöscht?
Und: was bedeutet "Select 0"?
Grüße - Jörg
meine hast Du nicht probiert, oder?
18.07.2009 19:31:49
Tino
AW: Tinos Code ist schneller
18.07.2009 20:16:15
Daniel
die Prüfung ist zwar etwas aufwendiger, aber dafür ist die FOR-EACH-Schleife über die Sheet-Objekte schneller als die Schleife mit Index-Nummern.
Gruß, Daniel
Anzeige
@Tino-seltsam, vorhin war da nix von dir...
18.07.2009 21:21:54
dir...
ich teste das gleich mal...
@Tino und Daniel - 12 sek Unterschied und...
18.07.2009 22:05:03
Jörg-HH
...is ja spannend, Jungs... :-)))
also ich hab das jetzt mal gestoppt - an der fraglichen Stelle einen Haltepunkt gesetzt und die Zeit bis Prozedurabschluß gemessen.
mein alter Code: 2 min 15 sek
Daniels Code: 1 min
Tinos Code: 48 sek
Tinos Code hat noch einen weiteren Vorteil: im Blatt config steht eine msgbox, die vor Veränderungen warnt. Bei Daniels Code wird das Blatt auf eine Weise angefaßt, die bewirkt, daß zwischendurch 2 oder 3 mal diese Meldung aufpoppt (und von Hand bedient oder anderweitig ausgeschaltet werden müßte). Tinos Code läßt die unberührt (versteh allerdings nicht, warum - aber das liegt wohl daran, daß ich nichts über den Befehl ReDim Preserve weiß.
Also diese Ergebnisse sind echt eine Riesenhilfe, denn was auf meiner Maschine 2'15" benötigt, läuft auf dem Mühlstein meines Chefs fast vier Minuten lang.
danke für euren Gehirnschmalz - schönen Abend!!
Grüße - Jörg
Anzeige
AW: @Tino und Daniel - 12 sek Unterschied und...
18.07.2009 22:32:34
Tino
Hallo,
Mit etwas Optimierung könnte man bestimmt noch Sekunden rausholen.
Melde mich morgen noch mal bin auf einer Party.
Gruß Tino
Abschaltung der Bildschirmaktualisierung
19.07.2009 09:45:54
Tino
Hallo,
durch die Abschaltung der Bildschirmaktualisierung, sollten noch bar Sekunden raus zu kitzeln sein.
Sub Test1()
Dim sAr() As String
Dim i As Integer
Dim mySh As Worksheet
For Each mySh In ThisWorkbook.Worksheets
If mySh.Name  "Formular" And mySh.Name  "config" And mySh.Name  "ToDo" Then
ReDim Preserve sAr(i)
sAr(i) = mySh.Name
i = i + 1
End If
Next mySh
If i > 0 Then
With Application
.ScreenUpdating = False
.DisplayAlerts = False
Sheets(sAr).Delete
.DisplayAlerts = True
.ScreenUpdating = True
End With
End If
End Sub
Gruß Tino
Anzeige
Bildschirmaktualisierung
19.07.2009 11:36:21
Jörg-HH
Hi Tino
endlich mal was, wo ich sagen kann: hab ich schon dran gedacht... Das kannst du aber nicht wissen. Stück weiter oben hab ich das abgeschaltet, das steht:
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
MsgBox "Die Arbeitsmappe wird jetzt" _
& vbLf & "für die Ausschreibung bereinigt." _
& vbLf & "Dies kann einige Minuten dauern.", vbOKOnly, "Arbeitsblätter löschen"
...zwar nicht die alerts, aber immerhin - und bei "VBA bescheiden" kann man ja schon fast stolz sein, selbst dran gedacht zu haben :-))
also dank dir für die Ideen - schönen Sonntag noch!
Grüße - Jörg
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige