Необходимо приостановить сценарий VBA во время обновления ссылок

Основная проблема, по-видимому, заключается в подпроцедуре. Для простоты я поместил это в основную процедуру: проблема, с которой я столкнулся, заключается в следующем коде:

Sub US_Sub01()

Dim NAtotal As Integer

NAtotal = Worksheets("Dashboard").Cells(20, "C").Value

MsgBox(“NAtotal”) 'Это показывает, сколько оставшихся ссылок нужно обновить. Начинается с 4540.

Do Until NAtotal = 0 'Этот цикл должен продолжаться до тех пор, пока NAtotal не достигнет нуля.

NAtotal = Worksheets("Dashboard").Cells(20, "C").Value

DoEvents

Loop

NAtotal не меняется с 4540 и никогда не отсчитывается. Если я сломаю макрос, ячейка C20 сразу же обновится до нуля.

Какие-либо предложения?

Спасибо, Стив


person Steve    schedule 14.12.2018    source источник
comment
Является ли C20 изначально пустым? Можете ли вы ввести цикл до C20 = 0 (действительно = 0)   -  person QHarr    schedule 14.12.2018
comment
№ C20 — это сумма ячеек C5:C19. В этих ячейках подсчитываются все экземпляры #N/A на других вкладках. Application.CalculateFull заставляет C5:C19 содержать #N/A, который затем обновляется в C20. В зависимости от электронной таблицы Sub это значение варьируется от 200 до 15 000.   -  person Steve    schedule 15.12.2018


Ответы (1)


Вам нужно будет вызывать функции для расчета формул и обновления ссылок следующим образом:

Обновить формулы: Application.Calculate

Ссылки на обновление: ThisWorkbook.UpdateLink

Если вы хотите обновить статус для этого процесса, вам нужно будет просмотреть каждую ячейку в книге и использовать код, подобный этому, для каждой ячейки:

ThisWorkbook.Worksheets("Sheet1").Range("A1").Calculate

Затем установите Worksheets("Dashboard").Cells(20, "C").Value = total cells - loop count, но я думаю, что это слишком сильно замедлит ваш код, чтобы быть полезным, но дайте мне знать, если вы этого хотите, и я могу создать код.

Если вы хотите что-то сказать пользователю, что лист обновляется, вы можете сделать что-то вроде этого:

Excel.Application.StatusBar = "Updating Links & Formulas"
'Changes the "Ready in the status bar to what you want it to say
Application.Calculate 'Calculate Formulas
ThisWorkbook.UpdateLink 'Update Links
Excel.Application.StatusBar = False 'Changes back to "Ready" status

Простое добавление :Do Events в конец вашего Set ActiveWKB = Workbooks.Open("Sub01.xlsm") тоже может сработать.

person Zamorak    schedule 14.12.2018
comment
@cybernetic.nomad: Спасибо за ваши предложения, но они не дали мне решения. - person Steve; 17.12.2018
comment
Стив - Кредит, где следует кредит, на самом деле это ответ @Zamokak, я только что отредактировал его, чтобы исправить проблему с форматированием. Если это не работает для вас, рассмотрите возможность изменить свой вопрос, чтобы предоставить нам дополнительную информацию. например каково новое поведение, когда вы пробуете это решение? - person cybernetic.nomad; 17.12.2018
comment
Извините, новичок здесь просто пытается привыкнуть к форматированию. Я отредактирую вопрос. - person Steve; 17.12.2018