Hallo zusammen,
ich habe ein Makro aufgezeichnet und einen Loop draus gebaut. Der läuft allerdings super langsam - habt ihr vielleicht Tipps, wie man den Code optimieren kann?
Code:
Sub WKN_Update()
Application.ScreenUpdating = False
Dim i As Integer
Sheets("WKN Data").Select
For i = 1 To 147
Range("B2").Select
ActiveCell.FormulaR1C1 = i
Range("C3").Select
Selection.Copy
Cells(i + 4, 10).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("G3").Select
Selection.Copy
Cells(i + 4, 11).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Next i
Sheets("Overview").Select
Range("A1").Select
End Sub
Schonmal vielen Dank im Voraus, freue mich auf eure Antworten!
Danke und viele Grüße
Andreas
Hallo
ich gehe mal davon aus, dass während der Schleife in den Zellen C3 und G3
Berechnungen stattfinden
dann wäre das ein Geschwindigkeitsgewinn
Code:
Sub WKN_Update()
Dim i As Long
Dim oldCalc
With Application
.ScreenUpdating = False
oldCalc = .Calculation
.Calculation = xlCalculationManual
.EnableEvents = False
End With
With Sheets("WKN Data")
For i = 1 To 147
.Range("B2").Value = i
.Cells(i + 4, 10).Value = .Range("C3").Value
.Cells(i + 4, 11).Value = .Range("G3").Value
Next i
End With
With Application
.ScreenUpdating = True
.Calculation = oldCalc
.EnableEvents = True
End With
MsgBox "fertsch"
End Sub
ansonsten würde das hier schon reichen
Code:
Sub test()
With Sheets("WKN Data")
.Range("J5:J151").Value = .Range("C3").Value
.Range("K5:K151").Value = .Range("G3").Value
End With
End Sub
MfG Tom
heje excelfreunde,
oder dieser vorschlag:
Code:
Public Sub WKN_Update_02()
Dim WSWKN As Worksheet
Dim WSOV As Worksheet
Dim lngZL01 As Long 'ZeilenZaehler, entspricht "i"
Dim lngSP01 As Long 'SpaltenZaehler
Dim lngLZ01 As Long 'Letzte Zeile
On Error GoTo Fehler
With Application
.Calculation = xlCalculationAutomatic
.ScreenUpdating = False
End With
Set WSWKN = Application.Worksheets("WKN Data")
Set WSOV = Application.Worksheets("Overview")
lngSP01 = 10
lngLZ01 = 147
With WSWKN
For lngZL01 = 1 To lngLZ01 Step 1
.Cells(2, 2) = lngZL01
.Cells(lngZL01 + 4, lngSP01) = .Cells(3, 3)
.Cells(lngZL01 + 4, lngSP01 + 1) = .Cells(3, 7)
Next lngZL01
End With
With Application
.GoTo Reference:=WSWKN.Range("A1"), Scroll:=True
.GoTo Reference:=WSOV.Range("A1"), Scroll:=True
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
End With
Set WSWKN = Nothing
Set WSOV = Nothing
On Error GoTo 0
Exit Sub
Fehler:
If Err.Number <> 0 Then MsgBox "Fehler: " & Err.Number & " " & Err.Description
'Resume Next
End Sub
Hallöchen,
Ich glaube, es sollen die berechneten Ergebnisse bei jedem Schleifendurchgang übernommen werden. Da wäre ein Abschalten der Berechnungsautomatik kontraproduktiv. Man könnte aber schauen, ob es ausreicht, die Formel(n) im VBA umzusetzen.
Moinmoin
war wohl noch etwas früh heut morgen :D
klar sollte die Berechnung da automatisch bleiben
aber so sollte es auch schnell genug sein
Code:
Sub WKN_Update()
Dim i As Long
With Sheets("WKN Data")
For i = 1 To 147
.Range("B2").Value = i
.Cells(i + 4, 10).Value = .Range("C3").Value
.Cells(i + 4, 11).Value = .Range("G3").Value
Next i
End With
MsgBox "fertsch"
End Sub
MfG Tom
heje excelfreunde,
es wurde nach einer schnellen ausführung gefragt und nicht nach permanenter berechung der arbeitsmappe beim datentransfer.
es werden lediglich daten transferiert und ein calculate am am anfang und ende würden ebenfalls eine vollständige berechnung ausführen...
Langsam ???
Code:
Sub M_snb()
With Sheets("WKN Data").Range("C3:C150")
.Offset(4, 10) = .Value
.Offset(4, 14) = .Offset(, 4).Value
End With
End Sub
Hallo Janosch,
wenn Du Deine Ansicht konsequent verfolgst, würde es ggf. reichen, die 147 am Ende der Schleife in B2 einzutragen.
Für die ständigen Einträge in diese Zelle gibt es aus meiner Sicht nur zwei Gründe.
Entweder wird nach jedem Eintrag etwas auf Basis dieser Zelle berechnet, oder der TE möchte eine Art Log, um zu sehen, ob der Ablauf irgendwo hängen bleibt.
Um hier die richtige Entscheidung mit 100%iger Sicherheit zu treffen, fehlt eine entsprechende Beschreibung. Ich für meinen Teil tendiere zur Berechnung, da ich im Moment keinen Grund sehe, warum der Code zwischendrin abbrechen sollte.
Hallo,
ich bin immer wieder beeindruckt, wie eine Frage und/oder bestehender VBA-Code (fehl)interpretiert werden kann. :17:
Toms Vesion in Beitrag
#5 sollte passen. Ich hätte
ScreenUpdating = False jedoch drin gelassen.
Gruß Uwe
Ich bin immer wieder beeindrückt wie eine TS/OP meint Fragen stellen zu können ohne komplette Information (d.h. eine Beispieldatei) zu Verfügung zu stellen. Die Helfer sind nur 'guessing'.
Die 'Lösung' in #5 könnte viel effizienter sein in einem Array; aber dazu muss mann die Formel im Arbeitsblatt kennen.