Excel vba: почему обновление не обновляется, обновляйте ячейки непосредственно перед отключением обновления экрана

У меня есть суб, который начинается с вызова другого суб (который редактирует ячейки рабочей книги), а затем отключает обновление экрана и оповещения. Дело в том, что первый юг, который редактирует книгу, находится перед вторым югу, ячейка не обновляется.

Когда я выключаю второй sub, ячейка обновляется. Как я могу обновить ячейку, а затем отключить обновление экрана?

Sub mainSub() Call editSub 'edit cell's value: ThisWorkbook...Cells(i, j).Value=... Call setupApp 'turns off scren updating, when uncommented prevents the previous sub from getting visible results ... End Sub Sub setupApp() Application.ScreenUpdating = False Application.DisplayAlerts = False End Sub 

EDIT : обновление экрана уже выполняется mainSub запуске mainSub ; Комментирование setupApp помогает , потому что оно явно выполняется раньше, чем ячейки редактируются несколько позже.

 Sub editSub() Dim resultArray() As String resultArray = getStateNames() 'just returns an array of Strings displayStateNameArray (resultArray) End Sub Sub displayStateNameArray(resultArray As Variant) ThisWorkbook.Worksheets("sheet 1").Range("C6:C97").Clear Dim k As Integer Dim i As Integer i = 1 For k = LBound(resultArray) To UBound(resultArray) ThisWorkbook.Worksheets("sheet 1").Cells(5 + i, 3).Value = resultArray(k) i = i + 1 Next End Sub 

Я действительно не понимаю, почему это не работает. Но вы можете попытаться вызвать SetupApp с помощью инструкции If. Для этого вам нужно привязать editSub к функции и в конце просто вернуть истинное значение. Что-то вроде этого:

 Sub mainSub() If editSub = True Then Call setupApp End Sub Sub setupApp() Application.ScreenUpdating = False Application.DisplayAlerts = False End Sub Function editSub() As Boolean 'Code stuff in her editSub = True End Function 

Второе решение

Вы можете попытаться DoEvents события с помощью DoEvents для обновления экрана.

Как это:

 Call editSub DoEvents Call setupApp 

Или вы поместите DoEvents сразу после того, как вы написали в ячейках.


Если это не работает, вы можете попробовать метод ожидания:

 Application.Wait "00:00:01" 


Первое решение

Вы пытались включить ScreenUpdating перед выполнением Sub?

 Sub mainSub() Call setupApp(true) Call editSub 'edit cell's value: .Cells(i, j).Value=... Call setupApp (false)'turns off scren updating, when uncommented prevents the previous sub from getting visible results ... End Sub Sub setupApp(bol as Boolean) Application.ScreenUpdating = bol Application.DisplayAlerts = bol End Sub 
Interesting Posts

VBA Скопировать и вставить в новый лист на основе даты подтверждения

Каков метод ссылки на другую открытую книгу, которая находится в отдельном окне?

Создание отчета в виде листа Excel fron json array в java

Блокировка данных в таблице Excel

Выделить текст в Userform TextBox

Excel – строка соответствия HTTP-строки и результат отображения

использование counta в смещении и обращение с ячейками без ценности

Соединение Excel между графиком и слайсером

Apache POI блокирует все ячейки по умолчанию. Как сделать все ячейки разблокированными?

выделить целую строку, используя условный формат

Импорт Excel в Yii2

Добавление цветной полосы к диаграмме

Специальное форматирование Excel 2007; text placeholder (@) возвращает адрес вместо значения

ExcelAsyncUtil.Observe – создание рабочих часов в Excel

Я хочу экспортировать свои данные в массив ячеек в файл Excel, насколько это возможно, без полуколоней для новых строк

Давайте будем гением компьютера.