Страницы: 1
RSS
Ошибка при отработке скрипта vba, Автоматизация обновления данных звпроса
 
В общем, решил автоматизировать обновление данных запросов PQ при изменении ячейки на листе. Ячейка R1C1 на Листе1 является выпадающим списком в диапазоне из таблицы на Листе2. Присвоил этой ячейке имя Folder. Создал скрипт vba такого содержания (для Листа1):
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("R1C1")) Is Nothing Then
        ActiveWorkbook.Connections("Query - G_File").Refresh
    End If
End Sub

При таком синтаксисе при изменении моей ячейки (выборе любого значения из выпадающего списка) возникает ошибка Run-time error 1004: Method 'Range' of object '_Worksheet' failed. Если меняю номер ячейки на ее заранее установленное имя Folder:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("Folder")) Is Nothing Then
        ActiveWorkbook.Connections("Query - G_File").Refresh
    End If
End Sub

Тогда при тех же манипуляциях вылезает ошибка Run-time error '9': Subscript out of range. Смотрел подобные задачи и у всех этот простой код работает. Но не у меня. В чем может быть дело?
Изменено: DJ_URAN - 12.02.2026 09:54:57
 
Стиль R1C1 не работает при задании диапазона. Используйте Rang("A1")
Во втором случае проблема в запросе. Возможно пробелы заменить чем-нибудь
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Sanja написал:
Используйте Rang("A1")
А в самой книге нужно при этом менять отображение с RxCx на Ах?
 
Цитата
Sanja написал:
пробелы заменить
имеете в виду нижнее подчеркивание?
 
Цитата
DJ_URAN написал:
в самой книге нужно при этом менять отображение
нет
Цитата
DJ_URAN написал:
имеете в виду нижнее подчеркивание?
нет. Возможно запрос на самом деле называется иначе. Попробуйте вывести список имен всех запросов кодом из этой статьи: Вывести список имен имен всех подключений на лист
и посмотреть название. Оптимально - скопировать имя запроса из полученного списка и использовать в коде.
Изменено: Дмитрий(The_Prist) Щербаков - 12.02.2026 14:40:03
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Разобрался. Действительно, все решилось после замены англоязычного Query на "Запрос" с удалением пробелов снаружи тире:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("Folder")) Is Nothing Then
        ActiveWorkbook.Connections("Запрос-G_File").Refresh
    End If
End Sub

Спасибо за наводку!
Страницы: 1
Читают тему
Наверх