Прежде чем задать этот вопрос, я уже попробовал решения, ранее заявленные на форуме. Пусть Excel VBA ожидает продолжения обновления данных PowerQuery sh и Как ожидать обновления Power Query sh до конечного значения sh? Я пробовал «DoEvents» с «BackgroundQuery = False», и более того, ничего не работает
Моя цель: обновить sh таблицу, отформатировать таблицу (изменить размер, выровнять и скрыть данные), замените пустые ячейки на "-". Формат и процедуры замены пустых написаны отдельно, которые я вызываю после запроса refre sh. Когда я шагаю по коду, все работает идеально. Тем не менее, когда я запускаю макрос, запрос обновляется и бланки заменяются, но данные не форматируются так, как я указал.
Я не уверен, связано ли это с ошибкой в коде, побочным продуктом работы в медленной сети или с тем, что я просто являюсь ладьей ie во всем этом и не понимаю, что я ' Я делаю неправильно.
Решения, которые я пробовал: 1. Отключите «Background Refre sh» в разделе свойств. 2. Написал refre sh кусок обоими способами:
With ActiveWorkbook.Connections("Query - QueryName").OLEDBConnection
brfresh = .BackgroundQuery
.BackgroundQuery = False
.Refresh
.BackgroundQuery = brfresh
End With
и
ActiveWorkbook.Connections("Query - QueryName").Refresh
Я также попытался добавить приложение. Время ожидания 5 секунд после refre sh.
Вот модуль, если это поможет:
Sub RefreshMRIQuery()
Dim brfresh As Boolean
Dim StartT As Date
Dim EndT As Date
StartT = Now
EndT = StartT + TimeValue("00:00:05")
Sheets("MRI").Select
Range("A1").Select
With ActiveWorkbook.Connections("Query - MASTER ROLLER INPUT").OLEDBConnection
brfresh = .BackgroundQuery
.BackgroundQuery = False
.Refresh
.BackgroundQuery = brfresh
End With
Application.Wait EndT
Range("A1").Select
RemoveBlanks
Range("A1").Select
FormatMRITable
Range("A1").Select
End Sub
Sub FormatMRITable()
Columns("B:B").Select
Selection.EntireColumn.Hidden = True
Columns("C:C").Select
Selection.EntireColumn.Hidden = True
Rows("1:1").RowHeight = 44.25
Range("MASTER_ROLLER_INPUT").Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Columns("G:G").ColumnWidth = 10
Columns("G:G").ColumnWidth = 13.57
Columns("H:H").ColumnWidth = 11.57
Columns("I:I").ColumnWidth = 11.29
Columns("I:I").ColumnWidth = 14
Columns("J:J").ColumnWidth = 12.71
Range("A2").Select
End Sub
Public Sub RemoveBlanks()
Dim MRI As ListObject
Set MRI = Worksheets("MRI").ListObjects("MASTER_ROLLER_INPUT")
Dim r As Range
For Each r In MRI.DataBodyRange
If r.Value = "" Then r.Value = "-"
Next r
End Sub
Извините, если форматирование не правильно и / или если у меня есть ненужные шаги - я учился с нуля около месяца и Google был источником всех моих знаний в области программирования. Если мне нужно что-то уточнить, пожалуйста, дайте мне знать, спасибо!