Я хочу вставить формулу в столбце B с задержкой между ними. Формула должна вставить только формулу, если ячейка слева от нее (в случае B1 это A1) не пусто, как это:Правильная формула, дающая «Ошибка времени выполнения« 1004 »: определяемая приложением или объектная ошибка при запуске sub
У меня есть следующие VBA, что Пасты формула с задержкой 1 сек.
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
Ошибка возникает в этой части
Range("B" & i, "B" & WorksheetFunction.Min(i + rowCount - 1, LastRow)).Formula = "=IF(ISBLANK(A" & i & ");" & """" & """" & ";Dump(Volumes(A" & i & ";2528;1010;TRUE;" & "Volume" & ";TRUE)))"
Ошибки есть, что из-за с формулой, которую он не принимает. Это обычная формула, используемая с расширением excel. Я знаю, что формула работает, как я поставил одинарную кавычку перед как таковой:
Range("B" & i, "B" & WorksheetFunction.Min(i + rowCount - 1, LastRow)).Formula = "'=IF(ISBLANK(A" & i & ");" & """" & """" & ";Dump(Volumes(A" & i & ";2528;1010;TRUE;" & "Volume" & ";TRUE)))"
так, что она приклеивает формально буквально. Если я затем удаляю кавычку из формулы, она работает. Поэтому остаются вопросы, почему он не принимает эту конкретную формулу в VBA.
Использование Excel 2013.
Вы, сэр, герой. Это сработало. У вас есть идеи, почему этот VBA настолько медленный? Я просто тестировал его на 50 строк, для установки VBA по 1 строке за один раз требуется около 2 минут. Когда я устанавливаю, если по 10 строк за раз, он делает это через 46 секунд. Но 10 строк за раз должны быть 5 раз с задержкой на одну секунду, поэтому я думаю, что это будет менее 10 секунд. – Dechesne
По-моему. скорость определяется главным образом временем 'Calculate'. И это в основном определяется вашим 'UDF'' Dump', который неизвестен мне. Поэтому я не знаю, почему это происходит медленно. Но почему цикл 'For' вообще? Почему не просто «Диапазон (« B1: B »и« LastRow ») .Formula =« = IF (ISBLANK (A1) »,« »« », Dump (Тома (A1, 2528, 1010, TRUE, Volume, TRUE))) 'а затем' Рассчитать' только один раз? –