使用 VBA 更新 Excel 中的查询

许陈

使用Teradata的连接将查询 ( Query1 ) 加载到Excel 中通常当我想更新查询时,我必须右键单击它并选择编辑。

在此处输入图片说明

进入Power Query Editor 后,我可以打开Source并编辑其中的SQL 脚本以更新查询。

在此处输入图片说明

问题是如何使用VBA编辑此SQL 脚本

在尝试使用宏记录器时,我只能使用刷新查询

ActiveWorkbook.Connections("Query - Query1").OLEDBConnection.Refresh

尝试编辑CommandText也失败了。这是查询的属性。

在此处输入图片说明

许陈

首先,我们使用以下方法获取查询的公式:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章