Страницы: 1
RSS
Открыть поочередно файлы и обновить запросы Power Query, Vba
 
Здравствуйте!
На диске С есть папка. В папке три файла Excel. В каждом файле есть запрос Power Query.
Каким макросом можно
открыть файл а, обновить запрос Power Query, дождаться окончания обновления запроса, сохранить изменения, закрыть файл.
затем
открыть файл b, обновить запрос Power Query, дождаться окончания обновления запроса, сохранить изменения, закрыть файл.
затем
открыть файл c, обновить запрос Power Query, дождаться окончания обновления запроса, сохранить изменения, закрыть файл.

Желательно код без циклов.
Буду тупо прописывать для каждого файла и запроса действие.

Зачем нужно? Сейчас это делаю вручную, открываю поочередно книги, обновляю запросы. Хотелось бы зарядить автоматом  
 
Цитата
Михаил Л написал:
Желательно код без циклов
странное пожелание. Ведь цикл можно сделать и по статичному массиву, который можно будет руками добавлять/изменять. Что-то вроде этого можно попробовать:
Код
Sub RefreshFiles()
    Dim sFolder As String, asFiles, sf
    Dim wb As Workbook
    Dim ws As Worksheet, oc As Object, IsBG_Refresh As Boolean
    
    sFolder = ThisWorkbook.Path 'путь к папке с файлами - указать свой
    sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator)
    Application.ScreenUpdating = False
    asFiles = Array("file1.xlsx", "file2.xlsx", "file3.xlsx")
    For Each sf In asFiles
        Set wb = Application.Workbooks.Open(sFolder & sf)
        For Each oc In wb.Connections
            IsBG_Refresh = oc.OLEDBConnection.BackgroundQuery
            oc.OLEDBConnection.BackgroundQuery = False
            oc.Refresh
            oc.OLEDBConnection.BackgroundQuery = IsBG_Refresh
        Next
        wb.Close True
    Next
    Application.ScreenUpdating = True
End Sub
основу взял отсюда: Собрать данные из защищенных паролем файлов - PowerQuery
Изменено: Дмитрий(The_Prist) Щербаков - 16.09.2021 17:03:45
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, большое спасибо! Основу для обновления взял у вас
Мне бы попроще) типа так
Код
Public Wb As Workbook
Sub aaa()
    Set Wb = Workbooks.Open(Filename:="C:\папка\a.xlsx")
    Set oc = ActiveWorkbook.Connections("Запрос — Sheet1")
    IsBG_Refresh = oc.OLEDBConnection.BackgroundQuery
    oc.OLEDBConnection.BackgroundQuery = False
    oc.Refresh
    oc.OLEDBConnection.BackgroundQuery = IsBG_Refresh
    Excel.ActiveWorkbook.Save
    Excel.ActiveWorkbook.Close
End Sub

Sub bbb()
    Set Wb = Workbooks.Open(Filename:="C:\папка\b.xlsx")
    Set oc = ActiveWorkbook.Connections("Запрос — Sheet1")
    IsBG_Refresh = oc.OLEDBConnection.BackgroundQuery
    oc.OLEDBConnection.BackgroundQuery = False
    oc.Refresh
    oc.OLEDBConnection.BackgroundQuery = IsBG_Refresh
    Excel.ActiveWorkbook.Save
    Excel.ActiveWorkbook.Close
End Sub

Sub ccc()
    Set Wb = Workbooks.Open(Filename:="C:\папка\c.xlsx")
    Set oc = ActiveWorkbook.Connections("Запрос — Sheet1")
    IsBG_Refresh = oc.OLEDBConnection.BackgroundQuery
    oc.OLEDBConnection.BackgroundQuery = False
    oc.Refresh
    oc.OLEDBConnection.BackgroundQuery = IsBG_Refresh
    Excel.ActiveWorkbook.Save
    Excel.ActiveWorkbook.Close
End Sub
Sub macros()
aaa
bbb
ccc
End Sub
 
Ну а типа так - это убираете все промежуточные Sub - End Sub и все...Оставляете только самый первый aaa и для последнего.
Код
Sub aaa()
    Dim Wb As Workbook, oc As Object, IsBG_Refresh As Boolean
    Set Wb = Workbooks.Open(Filename:="C:\папка\a.xlsx")
    Set oc = Wb.Connections("Запрос — Sheet1")
    IsBG_Refresh = oc.OLEDBConnection.BackgroundQuery
    oc.OLEDBConnection.BackgroundQuery = False
    oc.Refresh
    oc.OLEDBConnection.BackgroundQuery = IsBG_Refresh
    Wb.Close True

    Set Wb = Workbooks.Open(Filename:="C:\папка\b.xlsx")
    Set oc = Wb.Connections("Запрос — Sheet1")
    IsBG_Refresh = oc.OLEDBConnection.BackgroundQuery
    oc.OLEDBConnection.BackgroundQuery = False
    oc.Refresh
    oc.OLEDBConnection.BackgroundQuery = IsBG_Refresh
    Wb.Close True

    Set Wb = Workbooks.Open(Filename:="C:\папка\c.xlsx")
    Set oc = Wb.Connections("Запрос — Sheet1")
    IsBG_Refresh = oc.OLEDBConnection.BackgroundQuery
    oc.OLEDBConnection.BackgroundQuery = False
    oc.Refresh
    oc.OLEDBConnection.BackgroundQuery = IsBG_Refresh
    Wb.Close True
End Sub
Изменено: Дмитрий(The_Prist) Щербаков - 16.09.2021 18:32:22
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, спасибо! Теперь точно разберусь как подстроить под 2 и более запроса в файле
Страницы: 1
Наверх