Я столкнулся с проблемой, это не должно быть большим делом, но я не нахожу способ ее решить, даже если это кажется простым.
У меня есть код, который должен * l oop через файлы в папку и скопируйте их содержимое в 1 окончательный файл.
Чтобы избежать мигания экрана, я использую Application.ScreenUpdating = False
перед запуском l oop и в конце l oop я возвращаю его в True.
Я также записывая в A1 «Обработка, пожалуйста, подождите», и в конце l oop я очищаю A1.
Я вызываю функцию LoopThroughFiles через активную командную кнопку x, размещенную на MySheet.
Проблема в том, что сообщение в ячейке «А1» не всегда появляется! иногда это появляется, а иногда нет. В большинстве случаев, когда я впервые запускаю код, он появляется, после 3-4 тестов он перестает появляться, затем после нескольких тестов он появляется снова и так далее. это случайно. вот что я заметил:
Если я удаляю Application.ScreenUpdating = False, он всегда появляется. Если я поставлю точку останова или окно сообщения перед Application.ScreenUpdating = False, оно также всегда будет отображаться.
Я думаю, что Application.ScreenUpdating = False очень быстро появляется после обработки A1.value = " Пожалуйста, подождите ", поэтому A1 заполнен, но Application.ScreenUpdating = False приходит слишком быстро, поэтому он вступает в силу до того, как появится содержимое A1, и экран не обновится. Я пытался поставить Doevents перед Application.ScreenUpdating = False, но все еще та же проблема, любая идея, как решить эту проблему и сделать всегда содержимое A1, появляется перед Application.ScreenUpdating = False?
вот как выглядит как мой код
Private Sub CommandButton1_Click()
Call LoopThroughFiles
End Sub
Public Function LoopThroughFiles() As String
'Declare Variables etc...
'I change the Value of A1
With ThisWorkbook.Sheets(MySheet).Range("A1")
.Font.Color = -16776961
.Font.Bold = True
.Value = "Processing, Please Wait ..."
End with
Application.ScreenUpdating = False
'MyLoop
'The Rest of code
Application.ScreenUpdating = True
'I clear A1
With ThisWorkbook.Sheets(MySheet).Range("A1")
.Value = vbNullString
.Font.ColorIndex = xlAutomatic
.Font.Bold = False
End with
End function