Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
892to896
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
892to896
892to896
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Makro zu langsam

Makro zu langsam
31.07.2007 09:53:00
mephonad
Hallo,
ich habe ein Makro geschrieben der unter Excel 2003 (8) sec braucht. Aber unter Excel 2002 fast (15) min braucht.
weiß jemand woran kann es liegen.
vielen dank

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro zu langsam
31.07.2007 10:00:00
Klaus
Hallo Mephonad,
das Problem liegt in Zeile 15 deines Makros, kommentiere die mal aus.
Gruß,
Klaus

AW: Makro zu langsam
31.07.2007 10:17:00
mephonad
Hallo,
wie kann ich dieser Code Abschnitt besser optimieren ?
For k = Sheets("Buchungen").UsedRange.Rows.Count To 10 Step -1
If (Sheets("Buchungen").Range("I" & k) = 0) Then
Sheets("Buchungen").Rows(k).EntireRow.Delete
End If
Next k
For g = Sheets("Buchungen").UsedRange.Rows.Count To 10 Step -1
If (Sheets("Buchungen").Range("C" & g) = 9021000000#) Then
Sheets("Buchungen").Rows(g).EntireRow.Delete
End If
Next g
Gruß
mephonad

Anzeige
AW: Makro zu langsam
31.07.2007 13:07:00
Rudi
Hallo,

Sub tt()
Dim rngTmp As Range, k As Long
With Sheets("Buchungen")
For k = .UsedRange.Rows.Count To 10 Step -1
If .Cells(k, 9) = 0 Or .Cells(k, 3) = 9021000000# Then
If rngTmp Is Nothing Then
Set rngTmp = .Cells(k, 1)
Else
Set rngTmp = Union(rngTmp, .Cells(k, 1))
End If
End If
Next k
End With
If Not rngTmp Is Nothing Then rngTmp.EntireRow.Delete
End Sub


Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe

AW: Makro zu langsam
31.07.2007 15:20:59
mephonad
Ihr habt mir wirklich sehr geholfen und ich bin euch sehr dankbar
Kann man auf dieser Code Abschnitt optimieren?
anfang = 2
totalrows = Sheets("Daten").UsedRange.Rows.Count
For i = 1 To 4 '4 weil Jahre 2007 bis 2010 erzeugt werden sollen
h = 9
Application.ScreenUpdating = False
For l = Sheets("Buchungen").UsedRange.Rows.Count To 10 Step -1
Sheets("Buchungen").Rows(l).EntireRow.Delete
Next l
Sheets("Daten").Range("A" & anfang & ":A" & totalrows).Copy Sheets("Buchungen").Range("B10")
Sheets("Daten").Range("B" & anfang & ":B" & totalrows).Copy Sheets("Buchungen").Range("C10")
Sheets("Daten").Range("E" & anfang & ":E" & totalrows).Copy Sheets("Buchungen").Range("D10")
Sheets("Daten").Range("F" & anfang & ":F" & totalrows).Copy Sheets("Buchungen").Range("E10")
Sheets("Daten").Range("G" & anfang & ":G" & totalrows).Copy Sheets("Buchungen").Range("F10")
Sheets("Daten").Range("H" & anfang & ":H" & totalrows).Copy Sheets("Buchungen").Range("G10")
Sheets("Daten").Range("K" & anfang & ":K" & totalrows).Copy Sheets("Buchungen").Range("H10")

Anzeige
AW: Makro zu langsam
31.07.2007 22:34:37
Daniel
Hi
also mal ne kleine Verbesserung wäre, alles was direkt zusammenängt, auch zusammen zu kopieren:
Sheets("Daten").Range("A" & anfang & ":B" & totalrows).Copy Sheets("Buchungen").Range("B10")
Sheets("Daten").Range("E" & anfang & ":F" & totalrows).Copy Sheets("Buchungen").Range("D10")
Sheets("Daten").Range("G" & anfang & ":H" & totalrows).Copy Sheets("Buchungen").Range("F10")
Sheets("Daten").Range("K" & anfang & ":K" & totalrows).Copy Sheets("Buchungen").Range("H10")
damit fällt schon mal die Hälfte der Copy-Aktionen weg.
besser wärs natürlich man könnte die Zwischenzeilen mitkopieren, dann gings auf einmal, aber das wird wohl seine Gründe haben.
diese Schleife ist auch überflüssig:
For l = Sheets("Buchungen").UsedRange.Rows.Count To 10 Step -1
Sheets("Buchungen").Rows(l).EntireRow.Delete
Next l
wenn ichs richtig verstehe, soll alles gelöscht werden, bis auf ersten 9 Zeilen.
Das geht dann auch so:
Sheets("Buchungen").usedrange.offset(9,0).entirerow.delete
Gruß, Daniel

Anzeige
Application.Screenupdate
31.07.2007 10:59:00
sergiesam
Hi,
wenn du Zeilen löscht, benötigt die Grafik (Animation des Löschens) einiges an Zeit.
ich schlage vor, dass du kurzfristig die Bildschirmaktualisierung ausschaltest.
Application.screenupdate = false
...
Dein Code
...
Application.Screenudpate = True
Pass aber auf, dass dein Code ohne Absturz läuft, sonst siehst du kein Ergebnis. Bei Fehler, gib einfach im VBA-Direktfenster (STRG+G) wieder Application.Screenupdate = True [Enter] ein.
lg,
Sam

AW: Makro zu langsam
31.07.2007 11:14:00
ransi
HAllo
Versuche es mal so:
' **********************************************************************
' Modul: Tabelle1 Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Option Explicit
Dim AppCalc
Dim AppScreen
Dim AppEvents
Dim AppCursor

Public Sub dein_code()
More_speed
'Dein Code
'.
'.
'.
Meine_Einstellungen
End Sub


Public Sub More_speed()
With Application
    AppCalc = .Calculation
    AppScreen = .ScreenUpdating
    AppEvents = .EnableEvents
    AppCursor = .Cursor
    .Calculation = xlCalculationManual
    .ScreenUpdating = False
    .EnableEvents = False
    .Cursor = xlDefault
End With
End Sub


Public Sub Meine_Einstellungen()
With Application
    .Calculation = AppCalc
    .ScreenUpdating = AppScreen
    .EnableEvents = AppEvents
    .Cursor = AppCursor
End With
End Sub

ransi
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige