Небольшая неисправность, без исключений, когда Application.ScreenUpdating = False используется VB.NET
Я столкнулся с чем-то, чего я раньше не видел, Application.ScreenUpdating = False
, в результате чего саба немного плохо себя ведет. Это не выдает ошибку, но это вызывает отключение на одну ошибку в результате при включении.
Try
'Globals.ThisWorkbook.Application.ScreenUpdating = False
'if this on sub behaves unexpectedly
For n = 13 To Globals.ThisWorkbook.Worksheets.Count
Globals.ThisWorkbook.Worksheets(n).Activate()
Call ESLAUpdateReportPosition(True)
Next
'Globals.ThisWorkbook.Application.ScreenUpdating = True
Catch ex As Exception
'...Error Handling
End Try
Опять же, не исключение не выбрасывается, результат просто немного неправильный. Место, где я подозреваю, что оно ломается в методах:
SumCount1 = CurrentSheet.Cells(2, 6).value
1 ответ
Проблема в том, чтобы попытаться принять это значение. Поскольку эта ячейка в рабочей книге считает количество раз, которое элемент используется в столбце, он не обновляется до тех пор, пока For
цикл завершен. Таким образом, я мог бы отменить обновление экрана на 1 итерацию и заставить его работать, но когда мне пришлось изменить несколько листов, обновление этого значения не удалось (хотя, казалось, оно обновлялось несколько раз с большим количеством итераций).
Исправить это довольно просто, попросите Excel "обновить" или вычислите значения в формулах, которые вам нужны. Так что для приведенного выше примера вы бы использовали:
CurrentSheet.Cells(2, 6).Calculate()
SumCount1 = CurrentSheet.Cells(2, 6).value
Теперь вам нужно быть осторожным, так как это не приведет к обновлению ячеек, на которые есть ссылки в этой ячейке (если они также имеют формулы). Если вам нужно обновить группу ячеек, вы можете обновить весь лист, не указав ячейку: .Cells.Calculate
или вы могли бы сделать пересчет всего с Application.CalculateFull()