Сначала мы получаем формулу запроса, используя:
Debug.Print ThisWorkbook.Queries.Item("Query1").Formula
Причина, по которой нам нужно это сделать, состоит в том, что строка формулы содержит некоторую дополнительную информацию о нашем соединении с базой данных, а не просто запрос sql. Это может выглядеть примерно так:
let Source = Teradata.Database("tdprod1.ov.de", [HierarchicalNavigation=true, Query="SELECT week, revenue FROM table1"]); in Source
Чтобы обновить запрос, мы устанавливаем ThisWorkbook.Queries.Item("Query1").Formula
в новую строку формулы. Также будьте осторожны при обработке двойных кавычек внутри VBA. Вот скрипт, который я использовал:
' Update the query Query1 using the provided parameters
Sub UpdateQuery1()
' string to represent a single double quote for VBA string
Const vbDoubleQuote As String = """"
Dim oledb As OLEDBConnection
Dim queryFormula As String
' get the connection
Set oledb = ThisWorkbook.Connections("Query - Query1").OLEDBConnection
' the new formula of the query
Let queryFormula = _
"let " & _
"Source = Teradata.Database(" & vbDoubleQuote & "tdprod1.ov.de" & vbDoubleQuote & ", [HierarchicalNavigation=true, Query=" & vbDoubleQuote & _
"SELECT #(lf)a.kw MOD 100 AS KW, #(lf)a.r_Category2_ID AS Category_ID,#(lf)a.r_category3_ID AS Subcategory_ID,#(lf)#(lf)a.vt_p_j AS VP_Jahr,#(lf)a.vt_p_p AS ..." & _
"in Source"
' update the formula of the query
Let ThisWorkbook.Queries.Item("Query1").Formula = queryFormula
' refresh the connection
oledb.Refresh
End Sub