Männer können einfach nicht richtig zuhören. – Sind wir gar nicht!

Ich erhalte eine Mail.

„Ich komme leider mit der Fehlermeldung  

     Expression.Error: Der Schlüssel entsprach keiner Zeile in der Tabelle.

     Details:

         Key=[Record]

         Table=[Table]

nicht weiter.“

Ich schaue mir das Ganze an. Was haben wir gemacht?

In einem Tabellenblatt werden drei Dateien aufgelistet und der Pfad, in dem sich diese Dateien befinden. Diese vier Zellen haben Namen – hier: Schweinchen1, Schweinchen2, Schweinchen3 und Pfad:

Über Daten / Daten abrufen / aus Datei greife ich auf eine der drei Dateien zu:

Die Datentypen werden nicht automatisch erkannt; übrig bleiben drei Schritte; das Ergebnis wird nach Excel zuzrückgegeben:

Eine der drei Zellen mit Namen wird über Daten / Daten abrufen / Aus Tabelle/Bereich in PowerQuery verwendet. Nach einem Drilldown erhält man den Inhalt der Zelle:

Dies wird für die übrigen Zellen wiederholt. Fügt man nun diese Variablen in den Befehl Excel.Workbook ein, so ist eine Firewall-Meldung die Folge:

Diese kann man umgehen, indem man den Code (Zugriff auf den Inhalt einer Zelle mit Namen) in eine Zeile schreibt:

Excel.CurrentWorkbook(){[Name="Schweinchen3"]}[Content]{0}[Column1]

In der Codezeile

= Excel.Workbook(File.Contents(Pfad & Schweinchen1), null, true)

müssen die beiden Variablen durch ihre Funktion ersetzt werden (was den Code nicht gerade lesbar macht):

= Excel.Workbook(File.Contents(Excel.CurrentWorkbook(){[Name="Pfad"]}[Content]{0}[Column1] & Excel.CurrentWorkbook(){[Name="Schweinchen1"]}[Content]{0}[Column1]), null, true)

Klappt:

Dies wird auch für die anderen beiden Dateien durchgeführt, die anschließend in Excel geladen werden:

Die Hilfsabfragen Schweinchen1, Schweinchen2, … kann man getrost löschen.

So habe ich die Vorlage erstellt. Und nun kommt die Fehlermeldung:

Expression.Error: Der Schlüssel entsprach keiner Zeile in der Tabelle.

Ich begebe mich auf die Suche. Der Fehler taucht beim Zugriff auf das Tabellenblatt „Tabelle1“ auf. Nachgeschaut: bei einer anderen Datei heißt das Tabellenblatt „Sheet1“:

Also muss ich auch noch den „harten“ Namen entfernen. Ich mache es so:

#"Höher gestufte Header" = Table.PromoteHeaders(Quelle{[Item=Quelle{0}[Item],Kind="Sheet"]}[Data], [PromoteAllScalars=true])

und lösche die Zeile „Navigation“. Klappt:

Der ganze Code (jetzt: völlig unverständlich!):

let
    Quelle = Excel.Workbook(File.Contents(Excel.CurrentWorkbook(){[Name="Pfad"]}[Content]{0}[Column1] & Excel.CurrentWorkbook(){[Name="Schweinchen1"]}[Content]{0}[Column1]), null, true),
    #"Höher gestufte Header" = Table.PromoteHeaders(Quelle{[Item=Quelle{0}[Item],Kind="Sheet"]}[Data], [PromoteAllScalars=true])
in
    #"Höher gestufte Header"

Die übrigen zwei Abfragen werden analog angepasst – nun klappt alles!