Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1736to1740
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
Laufzeit Excel Makro
06.02.2020 07:17:31
Sebastian
Hallo zusammen,
Vorweg möchte ich euch mitteilen, dass ich ein Anfänger in VBA bin, deshalb verzeiht mir schon mal, wenn ich hier etwas nicht richtig beschreibe oder meine Vorgehensweise in VBA verbesserungswürdig ist.
Ich habe ein kleines Tool für meine Arbeit in Excel 2010 gestrickt. Es lief die ganze Zeit so, wie es sollte. Nun wurde letzte Woche auf Excel 2013 umgestellt und es klappt nicht mehr so wie soll. Es läuft anstatt 10 Sekunden nun bis zu 2:30min.
Die „Problemstelle“ konnte ich mittlerweile herausfinden: Es gibt eine Prozedur wo immer wieder einzelne Zellen kopiert werten und neben dran als Wert eingefügt wird. Das schafft das neue Excel in der gleichen Schnelligkeit irgendwie nicht mehr. Durch dieses kopieren wird dann in der Zelle, wo der Wert eingefügt wird, durch die Zellenveränderung ein Makro ausgelöst. Und das ganz soll alle 20 Sekunden wiederholt werden.
Hier die beiden Codes im Auszug:
Problemstelle Kopieren
Private Sub Worksheet_Calculate()
Application.ScreenUpdating = False
Sheets("Abfrage").Select
Range("G2").Select
Selection.Copy
Range("H2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
… Das halt für 110 Zellen
Durch die Zellenveränderung beim Kopieren wird folgendes Makro für jede Zelle einzeln ausgelöst, also die ausgelösten Makros ändern sich
Private Sub Worksheet_Change(ByVal target As Range)
Select Case target.Address
Case "$H$2"
With target
If .Value = "GV_01_02" Then Call GV_01_02
If .Value = "" Then Call GV_01_02_weiß
End With
.. hier auch 110 verschiedene Makros, immer mit dem nächsten Target
Jetzt habe ich schon lange versucht, das Tool wieder schneller laufen zulassen, aber da stoße ich an meine VBA Grenzen.
Hatte auch schon probiert nicht jede einzelne Zelle zu kopieren, sondern immer direkt ganze Spalten/Bereiche, aber dann löst leider die Change Funktion nicht mehr aus. Kann mir einer Helfen, dass die Laufzeit wieder schneller wird und die Funktionsweise gleichbleibt.
Ich bin für jeden Tipp dankbar.
Vielen Dank
Sebastian

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

Betreff
Datum
Anwender
Anzeige
AW: Laufzeit Excel Makro
06.02.2020 08:02:49
Bernd
Servus Sebastian,
dein erstes Makro ließe sich schonmal folgendermaßen vereinfachen:

Private Sub Worksheet_Calculate()
Application.ScreenUpdating = False
Sheets("Abfrage").Range("H2").Value = Sheets("Abfrage").Range("G2").Value
Application.ScreenUpdating = True
End Sub

Oder auch

Private Sub Worksheet_Calculate()
Application.ScreenUpdating = False
With Sheets("Abfrage")
.Range("H2").Value = .Range("G2").Value
End With
Application.ScreenUpdating = True
End Sub
Zu diesem Teil hier noch ein paar Fragen:

Private Sub Worksheet_Change(ByVal target As Range)
Select Case target.Address
Case "$H$2"
With target
If .Value = "GV_01_02" Then Call GV_01_02
If .Value = "" Then Call GV_01_02_weiß
End With
End Select
End Sub

1. Warum alle Zeilen einzeln abfragen ("Case ...")? Das ließe sich sehr wahrscheinlich auch per Schleife realisieren (für beide Makros).
2. Was wird in den Subs GV_01_02 bzw. GV_01_02_weiß gemacht?
3. Wie unterscheiden sich diese GV_01_02/_weiß zu deinen restlichen 110 Makros? Wenn alle das gleiche machen kann man das wunderbar vereinfachen.
Lade vielleicht mal eine Beispieldatei hoch, da kann man dein Vorhaben besser nachvollziehen.
Grüße, Bernd
Anzeige
AW: Laufzeit Excel Makro
10.02.2020 15:39:58
Sebastian
Hallo Bernd,
sorry dass ich die Tage nicht geantwortet habe, aber bin erst heute wieder auf der Arbeit.
Erstmal vielen Dank für die Tipps.
Nun zu deinen Fragen:
1)da ich nicht wirklich fit in vba bin hab ich nach einer Lösung gesucht die für meine Zwecke funktioiniert und deshlab bin ich dann bei der case mothode gelandet
2)in den Makros wird auf einem anderen Tabellen blatt Werte gesucht und dann entweder grün oder rot eingefärbt. Je nachdem welcher Wert in den Case Zellen steht
3) Die Makros unterscheiden sich nur in den "Suchwerten" ansonst amchen die alle das gleiche,also entweder grün oder rot
Beispiel Datei bereite ich vor.
Anzeige
AW: Laufzeit Excel Makro
06.02.2020 08:08:55
Nepumuk
Hallo Sebastian,
versuch es mal so:
Private Sub Worksheet_Calculate()
    
    With Application
        .EnableEvents = False
        .ScreenUpdating = False
    End With
    
    With Worksheets("Abfrage")
        
        .Range("H2").Value = .Range("G2").Value
        
        'weitere Kopieraktionen
        
    End With
    
    With Application
        .EnableEvents = True
        .ScreenUpdating = True
    End With
End Sub

Gruß
Nepumuk
Anzeige
AW: Laufzeit Excel Makro
06.02.2020 08:27:20
Luschi
Hallo Sebastian,
und ich frage mich, warum Du Kopier-Aktivitäten im 'Worksheet_Calculate'-Ereignis ausführst.
Das ist so, als ob Du versuchst ein Zimmer aufzuräumen und ständig kommt jemand, um neues Zeug darin abzulagern. Dieses Ereignis hat KEIN Target-Übergabeparameter und so wird bei jeder Berechnung das Ereignis durchgeklappert, auch wenn die Berechnung nix mit Deinen Wünschen zu tun hat.
Verschiebe den ganzen Code in das 'Worksheet_Change'-Ereignis, da gibt es diesen Parameter und man kann gezielt die Veränderungen steuern. Damit sich das 'Worksheet_Change'-Ereignis nicht immer wieder selbst aufruft, muß Application.EnableEvents zu Beginn deaktiviert und am Ende wieder aktiviert werden.
Eigentlich gehören weitere Application-Einstellungen dazu, suche dazu im Browser Deines Vertrauens nach 'Excel Vba GetMoreSpeed', wie z.B. hier: https://www.herber.de/forum/archiv/888to892/891304_GetMoreSpeed.html
Gruß von Luschi
aus klein-Paris
Anzeige

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige