Ich möchte Formeln in Spalte B mit einer Verzögerung dazwischen einfügen. Die Formel sollte nur die Formel einfügen, wenn die Zelle, um es nach links (im Fall von B1 ist das A1) nicht leer ist, wie folgt aus:Korrekte Formel gibt "Laufzeitfehler '1004': Anwendungsdefiniert oder objektdefiniert" Fehler beim Ausführen von Sub
Ich habe folgende VBA, die die Formel mit einer Verzögerung Pasten von 1 Sek.
Option Explicit
Sub RetrieveDataDelay()
'paste formulas into cells, then calculate, then delay rinse repeat
'=========================
'Declare Variables
'=========================
Dim i As Long 'used to loop
Dim rowCount As Long
Dim LastRow As Long 'used to find the last row
'=========================
'Setup for Speed
'=========================
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
'=========================
'Define Variables
'=========================
LastRow = Worksheets(ActiveSheet.Name).Cells(Rows.Count, 1).End(xlUp).Row 'This will find the last used row in column A, change the number 1 to whatever column number you want
rowCount = 1 ' set to how many rows you want to do at a time
'=========================
'Do Work
'=========================
For i = 1 To LastRow Step rowCount
Range("B" & i, "B" & WorksheetFunction.Min(i + rowCount - 1, LastRow)).Formula = "'=IF(ISBLANK(A" & i & ");" & """" & """" & ";Dump(Volumes(A" & i & ";2528;1010;TRUE;" & "Volume" & ";TRUE)))" 'set the formula to whatever it needs to be
Calculate
Application.Wait (Now + TimeValue("00:00:01")) 'this delays 1 second
Next i
'=========================
'Setup for Speed - Reverse
'=========================
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
Der Fehler tritt bei diesem Teil
Range("B" & i, "B" & WorksheetFunction.Min(i + rowCount - 1, LastRow)).Formula = "=IF(ISBLANK(A" & i & ");" & """" & """" & ";Dump(Volumes(A" & i & ";2528;1010;TRUE;" & "Volume" & ";TRUE)))"
Die Fehler hat etwas mit der Formel zurückzuführen, die es nicht akzeptiert. Dies ist eine benutzerdefinierte Formel, die mit einer Excel-Erweiterung verwendet wird. Ich weiß, dass die Formel funktioniert, wie ich ein einfaches Anführungszeichen vor als solche setzen:
Range("B" & i, "B" & WorksheetFunction.Min(i + rowCount - 1, LastRow)).Formula = "'=IF(ISBLANK(A" & i & ");" & """" & """" & ";Dump(Volumes(A" & i & ";2528;1010;TRUE;" & "Volume" & ";TRUE)))"
so dass es die formal buchstäblich Pasten. Wenn ich dann das Anführungszeichen aus der Formel entferne, funktioniert die Formel. Es bleibt also die Frage, warum es diese spezielle Formel in der VBA nicht akzeptiert.
Mit Excel 2013
Sie Sir, sind ein Held. Das hat funktioniert. Haben Sie eine Idee, warum diese VBA so langsam ist? Ich habe es gerade in 50 Zeilen getestet, es dauert fast 2 Minuten, wenn ich den VBA auf 1 Reihe hintereinander setze. Wenn ich auf 10 Zeilen setze, dann geschieht das in 46 Sekunden. Aber 10 Zeilen gleichzeitig sollten 5 Mal mit einer Verzögerung von einer Sekunde sein, also würde ich denken, dass dies unter 10 Sekunden wäre. – Dechesne
Meiner Meinung nach. Die Geschwindigkeit wird hauptsächlich von der Zeit bestimmt, die 'Calculate' benötigt. Und das wird hauptsächlich von Ihrem 'UDF' 'Dump' bestimmt, der für mich unbekannt ist. Also ich weiß nicht, warum es langsam ist. Aber warum die 'For'-Schleife überhaupt? Warum nicht einfach 'Range (" B1: B "& LastRow) .Formula =" = IF (ISBLANK (A1), "" "", Dump (Volumes (A1,2528, 1010, TRUE, Volume, TRUE))) " 'und dann' Calculate' nur einmal? –