VBA обновление запроса PQ с дальнейшим копированием полученных данных, Обновление запроса PQ с помощью макроса с дальнейшим копированием полученных данных
Добрый день, специалисты, подскажите, пожалуйста, что делаю не так. Требуется, чтобы: 1) сначала обновлялся запрос PQ; 2) полученные в результате обновления запроса данные копировались бы в другую таблицу. Я пытаюсь решить эту задачу с помощью макроса, который по очереди запускает два макроса, первый из который обновляет запрос, а второй - копирует и вставляет данные из таблицы запроса в другую. Но желаемого результата у меня не получается: обновление запроса происходит уже после того как отрабатывается копирование. Сразу хочу написать, что видела на форуме рассмотренную ситуацию, где в комментариях кода (к сожалению, совсем непонятного для меня) идет речь о принудительном ожидании завершения запроса, https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=150928&a... но никак не могу эту ситуацию спроецировать на на свои малюсенькие две строчки. Помогите, пожалуйста, кто не видит в этом сложности.
Код
Sub БазовыеПараметрыВ_Базы()
Обновление
Копирование
End Sub
Sub БазовыеПараметрыВ_Базы()
Dim IsBG_Refresh As Boolean
IsBG_Refresh = Connection.OLEDBConnection.BackgroundQuery
Connection.OLEDBConnection.BackgroundQuery = False
Обновление
Connection.OLEDBConnection.BackgroundQuery = IsBG_Refresh
Копирование
End Sub
ЕленаЕлина, Исправьте сообщение. Не нужно вставлять картинки в сообщение. И вообще, на форуме по Excel, уместнее соответствующие файлы. Вы на форум по Фотошопу догадались бы приложить файл Excel? Думаю нет. В Правилах форума (п.2.3) есть об этом. Ознакомьтесь
Согласие есть продукт при полном непротивлении сторон
ЕленаЕлина написал: R091n , большое спасибо, но не получаетсяCompile error:Variable not defined
Данная ошибка может относиться к любой части Вашего кода, а Вы никак его не покажите. Хотя-бы КОД, не говоря о файле. Тут на форуме мало провидцев При включенном параметре Option Explicit ВСЕ переменные должны быть определены. В коде от R091n, одна переменная и она определена Dim IsBG_Refresh As Boolean ищите проблему в Ваших макросах
Согласие есть продукт при полном непротивлении сторон
Sub Обновление()
ActiveWorkbook.Connections("Запрос — БазовыеПараметры").Refresh
End Sub
2) Копирование данных
Код
Sub Копирование()
Range("БазовыеПараметры").Select
Selection.Copy
Sheets("Товары").Select
Range("Базы").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Базы").Select
Range("R18").Select
End Sub
3) И макрос, который в первом сообщении, по моей идее он должен запускать эти два. Сейчас, вместо него разместила следующее:
Код
Sub БазовыеПараметрыВ_Базы()
Dim IsBG_Refresh As Boolean
IsBG_Refresh = Connection.OLEDBConnection.BackgroundQuery
Connection.OLEDBConnection.BackgroundQuery = False
Обновление
Connection.OLEDBConnection.BackgroundQuery = IsBG_Refresh
Копирование
End Sub
Наверное как-то так. Проверить возможности нет, PQ не установлен
Скрытый текст
Код
Option Explicit
Sub БазовыеПараметрыВ_Базы()
Обновление
Копирование
End Sub
Sub Обновление()
Dim IsBG_Refresh As Boolean
With ThisWorkbook.Connections("Запрос — БазовыеПараметры")
IsBG_Refresh = .OLEDBConnection.BackgroundQuery
.OLEDBConnection.BackgroundQuery = False
.Refresh
.OLEDBConnection.BackgroundQuery = IsBG_Refresh
End With
End Sub
Sub Копирование()
Range("БазовыеПараметры").Copy
Worksheets("Товары").Range("Базы").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End Sub
Цитата
Sanja написал: В коде от R091n , одна переменная и она определена Dim IsBG_Refresh As Boolean ищите проблему в Ваших макросах
Вот тут я ошибся. Была не объявлена переменная Connection)
Согласие есть продукт при полном непротивлении сторон
Sub Обновление()
Dim Connection As WorkbookConnection
Dim IsBG_Refresh As Boolean
Set Connection = ActiveWorkbook.Connections("Запрос — БазовыеПараметры")
IsBG_Refresh = Connection.OLEDBConnection.BackgroundQuery
Connection.OLEDBConnection.BackgroundQuery = False
Connection.Refresh
Connection.OLEDBConnection.BackgroundQuery = IsBG_Refresh
End Sub
Sub Копирование()
Range("БазовыеПараметры").Select
Selection.Copy
Sheets("Товары").Select
Range("Базы").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Базы").Select
Range("R18").Select
End Sub
Sub БазовыеПараметрыВ_Базы()
Обновление
Копирование
End Sub
R091n, спасибо! Спешу быстрее ответить Вам, что теперь работает. Еще не разобралась, но все правильно выполняется. Спасибо, что откликнулись на мою просьбу.