使用 Queries.Add 时:如何在 Queries.Add 的公式参数中引用自定义函数?

When using Queries.Add: How do I reference to a custom function inside the formula argument of Queries.Add?

总的来说:我正在尝试创建一个运行多个查询的子程序。所有这些查询都完全相似,除了一个词:Column1。因此,我想使用循环并用函数 GetColumnAct(x) 替换 Column1。函数应该 return Column1 when 运行 loop 第一次,Column2 when 运行 it it second time...

代码如下:

Sub ColumnLoop()

For x = 1 To 5

ActiveWorkbook.Queries.Add Name:=GetColumnAct(x), Formula:= _
        "let" & Chr(13) & "" & Chr(10) & "    Quelle = Excel.Workbook(File.Contents(""C:\Users\felix\OneDrive\Dokumente\GIZ Consultancy\Technisch\Teststruktur\FV_MA_Abfragen\Aktuelle Abfrage NEU\MA_Daten_AktuelleAbfrageNEU.xlsx""), null, true)," & Chr(13) & "" & Chr(10) & "    Tabelle1_Sheet = Quelle{[Item=""Tabelle1"",Kind=""Sheet""]}[Data]," & Chr(13) & "" & Chr(10) & "    #""Höher gestufte Header"" = Table.PromoteHeaders(Tabelle1_Sheet, [PromoteAllScalars=true]" & _
        ")," & Chr(13) & "" & Chr(10) & "    #""Spalte nach Trennzeichen teilen"" = Table.SplitColumn(#""Höher gestufte Header"", ""Mitarbeiter (eMail) TN-Projekt"", Splitter.SplitTextByDelimiter("","", QuoteStyle.Csv), {""MA.1"", ""MA.2"", ""MA.3""})," & Chr(13) & "" & Chr(10) & "    #""Zusammengeführte Abfragen"" = Table.NestedJoin(#""Spalte nach Trennzeichen teilen"", {""TN Projekt""}, Tabelle1, {""TN Projekt""}, ""Tabelle1"", JoinKind.FullOuter)," & Chr(13) & "" & Chr(10) & "    #""Erweiterte Tabelle1"" = Table.ExpandTableColumn(#""Zusammengeführte Abfragen"", ""Tabelle1"", {""TN Projekt"", ""Fachverbunds Nr."", ""TN Bezeichnung"", ""Fachverbundsbezeichnung"", ""MA.1"", ""MA.2"", ""MA.3""}, {""Tabelle1.TN Projekt"", ""Tabelle1.Fachverbunds Nr."", ""Tabelle1.TN Bezeichnung"", ""Tabelle1.Fachverbundsbezeichnung"", ""Tabelle1.MA.1"", ""Tabelle1.MA.2"", ""Tabelle1.MA.3""})," & Chr(13) & "" & Chr(10) & "    #""Entfernte Spalten"" = Table.RemoveColumns(#""Erweiterte Tabelle1"",{""Tabelle1.TN Projekt"", ""Tabelle1.Fachverbunds Nr."", ""Tabelle1.TN Bezeichnung"", ""Tabelle1.Fachverbundsbezeichnung""})," & Chr(13) & "" & Chr(10) & "    #""Tiefer gestufte Header"" = Table.Demote" & _
        "Headers(#""Entfernte Spalten"")," & Chr(13) & "" & Chr(10) & "    #""Transponierte Tabelle"" = Table.Transpose(#""Tiefer gestufte Header"")," & Chr(13) & "" & Chr(10) & "    ColumnNext = #""Transponierte Tabelle"" [GetColumnAct(x)]," & Chr(13) & "" & Chr(10) & "    #""In Tabelle konvertiert"" = Table.FromList(ColumnNext, Splitter.SplitByNothing(), null, null, ExtraValues.Error)," & Chr(13) & "" & Chr(10) & "    #""Entfernte Duplikate"" = Table.Distinct(#""In Tabelle konvertiert"")," & Chr(13) & "" & Chr(10) & "    #""" & _
        "Entfernte leere Zeilen"" = Table.SelectRows(#""Entfernte Duplikate"", each not List.IsEmpty(List.RemoveMatchingItems(Record.FieldValues(_), {"""", null})))," & Chr(13) & "" & Chr(10) & "    #""Transponierte Tabelle1"" = Table.Transpose(#""Entfernte leere Zeilen"")" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & "    #""Transponierte Tabelle1"""

Next x

End Sub

函数是这样的:

Public Function GetColumnAct(ColNumber) As String

Dim ColumnAct As String

ColumnAct = "Column" & ColNumber

GetColumnAct = ColumnAct

End Function

唯一的问题是在公式中包含函数 GetColumnAct(x)。虽然它适用于参数名称:=GetColumnAct(x),(在开始时)它在包含在公式中时不起作用:=...(在最后)。

有人知道为什么会这样吗?也许我只是把语法弄错了?我非常感谢提供的任何帮助,因为我现在一整天都在做这个小东西......

这是我在高级编辑器(高级查询)中得到的错误消息: invalid identifier

试试这个:

Public Function GetColumnAct(ColNumber as Integer) As String

    Dim ColumnAct As String

    ColumnAct = "Column" & str(ColNumber) 

    GetColumnAct = ColumnAct

End Function

再次感谢所有对此进行调查的人!

我现在找到答案了!

而不是

#""Transponierte Tabelle"" [GetColumnAct(x)]," & Chr(13) & ""

我需要写

#""Transponierte Tabelle"" [" & GetColumnAct(x) & "]," & Chr(13) & ""

有人在另一个网站上告诉我,很高兴我现在知道了!