Я боролся с этой проблемой в течение нескольких дней и читал много сообщений о переименовании соединений и до сих пор не могу достичь того, что мне нужно.Соединения с помощью pivot Excel переименованы в «Connection» в VBA
По существу у меня есть книга, которая имеет несколько листов, каждая с другой сводной таблицей, используя другое соединение.
Мне нужно использовать VBA, чтобы вставлять критерии диапазона дат из вкладки «Контроль» в инструкцию sql каждого соединения, потому что, поскольку все мы знаем, что опорные точки не могут использовать? параметр.
Однако, как и мы знаем, Excel переименовывает соединение при его изменении, поэтому изменение текста команды с помощью VBA приводит к созданию новых соединений и оставлению избыточных.
Использование некоторых других очень полезных сообщений в этом форуме я успешно удалось - изменить текст команды - удалить старое соединение и переименовать новый предполагая его имя, чтобы быть «Connection»
таким образом:
text = "... new SQL query here..."
ActiveWorkbook.Connections("GLCosts").ODBCConnection.CommandText = text
' assume excel has renamed the "GLCosts" connection to "Connection"
ActiveWorkbook.Connections("Connection").Refresh
' delete the original and rename the new one to the old name
ActiveWorkbook.Connections("GLCosts").Delete
ActiveWorkbook.Connections("Connection").name = "GLCosts"
пока каждый Sub() делает это, в свою очередь, то это должно быть хорошо, как «новое» имя соединения всегда будет «Connection» (т.е. не «Connection1» и т.д.)
ОДНАКО Что я нашел, так это то, что Excel переименовывает соединение только в том случае, если есть переменная в COMMAND.TEXT
Поэтому, если пользователь фактически не изменяет значения критериев даты (хранится в таблицах («Контроль»). Диапазон («D4»)), но они запускают макрос для обновления опорных точек, а макрос терпит неудачу, потому что текст команды не был изменен, и нет новой строки соединения для переименования в качестве старого имени.
So .... Я старался быть умным. В каждом Sub() я сначала установил text = "... действительный sql-запрос, но не тот, который мне нужен ...", а затем заменим command.text соединения с этим фиктивным запросом, тем самым вынудив excel создать новое соединение который я могу переименовать. Затем, когда я устанавливаю text = "... правильный SQL-запрос", excel снова создаст новое соединение под названием «Connection», и я могу повторить шаги переименования и удаления.
Это должно быть хорошо, но по какой-то причине он просто разбился первенствовать, и я не пробовал снова
Кто-нибудь есть фактическое решение этой проблемы? Должен ли я снова попробовать умный материал?
Любые идеи с благодарностью получил
не может поверить, что там нет никого, кто решил эту проблему. я определил это плохо? – jfly62