查找查询来源的更简单方法?

A simpler way to find the source of a query?

如何确定 Excel 中的查询指向哪个工作簿?

经过多次来回,我设法想出了以下 sub,它产生了一个字符串,我可以从中提取工作簿的名称和路径,但我觉得应该有一种更简单的方法来找到这些信息?我是不是漏了什么。

我制作的子是

Sub test()
    Dim wbq As WorkbookQuery

    For Each wbq In ThisWorkbook.Queries
        Debug.Print wbq.Formula
    Next wbq
End Sub

打印类似

的内容
let
    Source = Excel.Workbook(File.Contents("[what I want]"), null, true),
    Sheet2 = Source{[Name="Sheet1"]}[Data],
    #"Removed Columns" = Table.RemoveColumns(Sheet2,{"Column2", "Column3", "Column4", "Column5", "Column6", "Column7", "Column8", "Column9", "Column10", "Column12", "Column13", "Column14", "Column15", "Column16", "Column17", "Column18"}),
    #"Removed Top Rows" = Table.Skip(#"Removed Columns",4),
    #"Promoted Headers" = Table.PromoteHeaders(#"Removed Top Rows", [PromoteAllScalars=true]),
    #"Removed Blank Rows" = Table.SelectRows(#"Promoted Headers", each not List.IsEmpty(List.RemoveMatchingItems(Record.FieldValues(_), {"", null})))
in
    #"Removed Blank Rows"

我的理解是没有比您展示的更简单的方法了。查询是用 M/Power Query 公式语言编写的——据我所知,在 VBA.

中无法对其进行评估或与之交互

我认为你能做的最好的事情就是获取 WorkbookQuery.Formula(正如你目前正在做的那样)并求助于字符串匹配来尝试提取正在传递的路径。

当在对 Excel.Workbook(File.Contents("...")) 的调用中对路径进行硬编码(如您的示例)时,这很好,但如果涉及间接寻址并且正在传递函数 identifier/variable 则更难 -当您最终尝试重新创建语言评估引擎的一部分时。

但也许其他人可以告诉您不同的说法。