VBA Excel - Power Query, дождитесь refre sh, затем продолжите - PullRequest
1 голос
/ 11 марта 2020

Прежде чем задать этот вопрос, я уже попробовал решения, ранее заявленные на форуме. Пусть 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 был источником всех моих знаний в области программирования. Если мне нужно что-то уточнить, пожалуйста, дайте мне знать, спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...