Страницы: 1
RSS
Обновление запроса PQ через макрос или горячие клавиши
 
Собственно сабж: Обновление запроса PQ через макрос или горячие клавиши - такое реально? Под горячими клавишами имею в виду, что для каждого запроса задавать индивидуальную клавишу, а не общую на все запросы.

Спасибо.
 
А в чем проблема? Набор маленьких подпрограмм , которые запускают обновления конкретного запроса и привязка их к горячим кнопкам.
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
привязка их к горячим кнопкам
так в этом и есть вопрос) Как к конкретному запросу привязать горячую клавишу?
 
Включаете макрорекордер. В окошке создания макроса задаете хоткей. Становитесь на выгруженный запрос, правой мышью, "обновить". Бинго
F1 творит чудеса
 
Кнопка привязывается не к запросу, а к конкретной подпрограмме (ну или макросу, как многие это кличут), Это подпрограмма вызывает обновление  запроса или передает идентификатор запроса другой подпрограмме, которая обновляет указанный запрос. Воротить что-то более сложное наверно не лучший выбор.
В модуль книги
Код
Private Sub Workbook_Activate()
    HotKeyON
End SubPrivate Sub Workbook_Deactivate()
    HotKeyOFF
End SubPrivate Sub Workbook_Open()
    HotKeyON
End SubPrivate Sub HotKeyON()
    On Error Resume Next
    Application.OnKey "^q", "'" & ActiveWorkbook.Name & "'!PQRefresh1"
    Application.OnKey "^й", "'" & ActiveWorkbook.Name & "'!PQRefresh1"
End SubPrivate Sub HotKeyOFF()
    On Error Resume Next
    Application.OnKey "^q"
    Application.OnKey "^й"
End Sub
q.и й не везде нужно, но был случай когда раскладка влияла.
ну и соответствено делайте модули с PQRefresh1, PQRefresh2 .......
По вопросам из тем форума, личку не читаю.
 
Цитата
Максим Зеленский написал:
Включаете макрорекордер. В окошке создания макроса задаете хоткей. Становитесь на выгруженный запрос, правой мышью, "обновить". Бинго
Благодарю!
Осталось только найти свободное сочетание клавиш, а то чего-то все заняты...
И порядок с обновлением запросов решен!
 
Появляется вот такая функция - Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
И если запускать макрос, то обновляет только ТОТ запрос, который выделен,а тот который я указал при записи.
 
Цитата
БМВ написал: Кнопка привязывается не к запросу, а к конкретной подпрограмме..., Это подпрограмма вызывает обновление  запроса или передает идентификатор запроса другой подпрограмме, которая обновляет указанный запрос.
ДА этот вариант тоже пока не самый простой)
Мне пока его запустить не удалось(
Изменено: Денис - 14.01.2018 11:17:47
 
sheet2.ListObjects("Table1_2").QueryTable.Refresh  
Имя листа и имя объекта (или его индекс) уже сами.
По вопросам из тем форума, личку не читаю.
 
БМВ, не получается. Файл приложил.
 
и не должно , ведь у вас там "Таблица1_2", а не Таблица1 на листе
Если на листе один запрос, то используйте .ListObjects(1).QueryTable.Refresh
Изменено: БМВ - 28.12.2017 13:52:00
По вопросам из тем форума, личку не читаю.
 
БМВ, Понял. Работает. Благодарю!
 
БМВ, я не знаток VBA, но вот момент - разве нельзя лист называть через пробел? То есть Если
Лист4.ListObjects(1).QueryTable.Refresh - обновляет
Лист Новый.ListObjects(1).QueryTable.Refresh - ругается на синтаксис.

Это не критично, но интересно.
 
Так как именовать с пробелом можно только лист а не сам объект листа, то в этом случае для обращений по имени используется Worksheets(<SheetName>) . Но у этого метода есть один минус, переименовать лист означает сделать нерабочим код, это надо иметь в виду. В рабочем примере выше используется именно объект книги. Его тоже можно переименовать(но без пробелов), но это более скрыто от глаз. Видеть эти имена и соответвуюзие им имена листов вы можете в редакторе VBA.
По вопросам из тем форума, личку не читаю.
 
БМВ, Столкнулся с такой проблемой, что не во всех файлах могу обновить запросы.
Выкладываю файл в котором не могу обновить запрос (подключение к внешнему файлу), хотя если сделать новый файл - там все выполняется.

Если получится - посмотрите, пожалуйста.
 

Денис, ну нет у вас объекта Лист7 в этой книге. Вы не прочитали внимательно  #14 .

Код
Sub auto()
Worksheets("Лист7").ListObjects("Лист1").QueryTable.Refresh
End Sub

или
Код
Sub auto()
Лист18.ListObjects("Лист1").QueryTable.Refresh
End Sub

И что б не путаться, не называйте запросы как Лист1

Изменено: БМВ - 14.01.2018 11:18:23
По вопросам из тем форума, личку не читаю.
 
БМВ, Понял. Не досмотрел. Спасибо.
 
Цитата
написал:
Появляется вот такая функция - Selection.ListObject.QueryTable.Refresh BackgroundQuery:=FalseИ если запускать макрос, то обновляет только ТОТ запрос, который выделен
Цитата
написал:
Sub auto()Worksheets("Лист7").ListObjects("Лист1").QueryTable.RefreshEnd Sub
Я использую макрос по обновлению всех файлов в выбранной папке.
Но запросы PQ данный макрос не обновляет. :(
Код
Sub OtkritVseKnigi()
    Dim MyFiles As String, sFolder As String
  
    sFolder = ShowFolderDialog() & Application.PathSeparator
    MyFiles = Dir(sFolder & "*.xls*")
    Application.ScreenUpdating = False
    Do While MyFiles <> ""
        Workbooks.Open sFolder & MyFiles
        ActiveWorkbook.RefreshAll
        ActiveWorkbook.Close SaveChanges:=True
        MyFiles = Dir
    Loop
    Application.ScreenUpdating = True
    MsgBox "Файлы обновлены!", vbInformation, "Конец"
End Sub
 
Function ShowFolderDialog() As String
    Dim oFD As FileDialog
    Dim x, lf As Long
    'назначаем переменной ссылку на экземпляр диалога
    Set oFD = Application.FileDialog(msoFileDialogFolderPicker)
    With oFD 'используем короткое обращение к объекту
        'так же можно без oFD
        'With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "Выбрать папку с отчетами" '"заголовок окна диалога
        .ButtonName = "Выбрать папку"
        .Filters.Clear 'очищаем установленные ранее типы файлов
        '.InitialFileName = "C:\Temp\" 'назначаем первую папку отображения
        .InitialView = msoFileDialogViewLargeIcons 'вид диалогового окна(доступно 9 вариантов)
        If oFD.Show = 0 Then Exit Function 'показывает диалог
        'цикл по коллекции выбранных в диалоге файлов
        x = .SelectedItems(1) 'считываем путь к папке
        ShowFolderDialog = x
    End With
End Function

В файлах разное количество запросов PQ и по-разному они называются.
Подскажите, можно ли какую-то универсальную команду использовать для обновления всех запросов PQ.
Заранее спасибо.
Изменено: Viper25 - 18.04.2022 20:02:44
Страницы: 1
Читают тему
Наверх