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