Das Auge liest mit!

Ich erstelle häufig Power Query-Lösungen für Mitarbeiter und Mitarbeiterinnen verschiedener Firmen. Dabei werden oft Parameter in andere Zellen ausgelagert. Beispielsweise der Ordner, aus dem die Dateien herausgeholt werden.

Sollte der Anwender nun einen falschen Ordnernamen eintragen, soll eine Fehlermeldung kommen. Das geht nicht in Power Query. Aber warum nicht eine Tabelle mit dem Hinweis, dass dieser Ordner nicht existiert. Bei korrekter Eingabe erfolgt die Transformation und das Laden der gewünschten Tabelle in Excel. Hier eine Auflistung der Dateinamen des Ordners:

Wie macht man so etwas?

Man benötigt eine Weiche.

Der eingetragene Pfad wird als Tabelle/Bereich in Power Query verwendet. Nun kommt der Befehl try ins Spiel, der entweder einen Fehler produziert oder nicht. Und je nachdem – Fehler oder nicht – wird die eine Abfrage oder die andere Abfrage aufgerufen. Hier der Code:

let

    Dateipfad  = Excel.CurrentWorkbook(){[Name="Pfad2"]}[Content]{0}[Column1],
    // holt den eingetragenen Verzeichnisnamen aus der Zelle, die "Pfad2" heißt

    Quelle = try Table.RowCount(Folder.Files(Dateipfad)),
    // der try-Befehl

    Ausgabe = if Logical.From(Quelle[HasError]) then Ergebnis_FalscherPfad else Ergebnis_KorrekterPfad
    // Weiche zu der Abfrage/Tabelle, welche angezeigt wird, wenn der Pfad korrekt oder falsch ist
in
    Ausgabe

man probiert also irgendeinen Befehl, beispielsweise Folder.Files. Der Befehl try hat den Parameter HasError, der True oder False liefert – je nachdem, ob Fehler oder nicht:

Eigentlich denkbar einfach, so eine Weiche, oder?

Damit solche Fehlermeldungen nicht auftauchen:

Es gibt Tage, da trete ich nicht ins Fettnäpfchen. Da falle ich in die Fritöse.

Kennst du Anrufe, die beginnen mit einem „hast du mal einen Moment Zeit?“ oder: „störe ich gerade?“

Richtig: Angelika rief am Wochenende an. Meine Kollegin Angelika. Sie bereitet gerade einen Excel-Makro-Kurs vor und suchte einige gute Gedanken für Befehle, die man mit dem Makrorekorder aufzeichnen könne. Dabei stieß sie auf die benutzerdefinierte Kopfzeile.

„Sag mal“, fragte sie, „wenn ich in der Kopfzeile aufzeichne: Seitennummerierung, Datum, Dateiname und Tabellenblattname passiert etwas ganz Komisches.“

Zuerst glaubte ich es nicht. Also – auch aufgezeichnet:

Ich lasse das Makro laufen:

Das Ergebnis verblüfft:

Und noch einmal:

Und wieder:

Und wieder. Und wieder. Und wieder ….

Ich schaue im Code nach:

[...]
    With ActiveSheet.PageSetup
        .LeftHeader = "&P / &N"
        .CenterHeader = "&D / &T"
        .RightHeader = "&Z&F / &A"

Eigentlich alles okay. Ich habe keine Ahnung, was hier passiert!

Ich rate Angelika, im Makrokurs nur den Firmennamen als Text aufzuzeichnen. Das klappt!

Okay – für Datum und Uhrzeit stehen die VBA-Befehle Date und Time zur Verfügung; für den Dateiname ActiveWorkbook.Name (oder Fullname), für den Blattnamen ActiveSheet.Name, aber für die Seitennummer? Ich weiß keine Lösung.

Danke an Angelika Meyer für diesen Hinweis!

Und nur wenig nach der Veröffentlichung des Artikels erreicht mich ein Kommentar von Ernst. Großartig – DAS ist des Rätsels Lösung! Hier sein Kommentar:

Hallo Rene,

dieses eigenartige Verhalten tritt bei mir (Excel 2019) nur dann auf, wenn vor dem Festlegen der PageSetup-Eigenschaften die Application.PrintCommunication-Eigenschaft auf False gesetzt wird. Wenn die Kommunikation mit dem Drucker nicht abgeschaltet wird, tritt dieses Verhalten nicht auf.

Bei der Makroaufzeichnung werden die Befehle
Application.PrintCommunication = False und Application.PrintCommunication = True
verwendet.

Bei Microsoft steht wohl folgender Hinweis:

Legen Sie die PrintCommunication-Eigenschaft auf False fest, um die Ausführung von Code zu beschleunigen, mit dem PageSetup-Eigenschaften festgelegt werden.

Legen Sie die PrintCommunication-Eigenschaft nach dem Festlegen der Eigenschaften auf True fest, um alle im Cache vorhandenen PageSetup-Befehle auszuführen.

Scheinbar klappt dies nicht richtig.

Salü

Ernst

Wenn auf der Packung steht: „schmeckt wie selbstgemacht“ und du dir denkst: „Bitte nicht!“

WORD – Bug in Inhaltsverzeichnis ?

Hallo Rene,

bei MS Word kannst Du sicher auch helfen?

Ich habe in angehängter Datei im Inhaltsverzeichnis den Fall, dass die Seitenzahlen in einigen Überschriften (Brote, Pizza, Gebäck, …) nicht rechtsbündig stehen.

Hast Du eine Idee, woran das liegt?

Danke, Gunnar

klar, Gunnar,

Word: davon lebe ich auch. Normalerweise.

Die Antwort ist denkbar einfach: „Brote“ und „Gebäck“ basieren auf der Formatvorlage „Verzeichnis 2“ und „Verzeichnis 3“. Dort ist ein hängender Einzug von 1,25 cm eingestellt. 1,25 cm heißt um 1,25 cm, nicht auf die Position 1,25 cm. Da diese Wörter kürzer als 1,25 cm springt der Tab auf den gesetzten Einzug.

Die Lösung: Einzug auf 0,5 cm oder 0 setzen. Dann klappt es.

Liebe Grüße

Rene

Fazit: Nicht alles, was nach Bug aussieht, ist auch einer. Manchmal sind auch die Menschen, die vor dem Computer sitzen, die Ursache für Fehler.

i am not weird i am a limited edition

Es ist so schrecklich! Eigentlich ist das Problem einfach: eine Mitarbeiterin möchte wissen, ob beim Anwender Excel die deutsche oder englische Oberfläche eingeschaltet hat. Per VBA wäre dies kein Problem; allerdings wollen wir eine Lösung entwickeln, die auf Formeln basiert.

Wir beginnen:

=WENN(TEXT(DATUM(2018;1;1);“MMMM“)=“Januar“;“de“;“en“)

Wenn der erste Monat des Jahres „Januar“ heißt, bin ich Deutsch. Test: Excel wird auf englisch umgestellt:

Klar. die Ländereinstellung der Systemsteuerung ist noch immer „deutsch“ – deshalb ist der erste Monat Januar. Blöd zum Testen!

Zweiter Versuch:

=IF(ISERROR(TEXT(TODAY();“dddd“));“de“;“en“)

zeigt „en“ an. Bei der deutschen Oberfläche ebenso. Der Grund:

TEXT(HEUTE();“dddd“)

liefert „dddd“?!? Und eben keinen Fehler.

Noch ein Versuch:

=IF(ISERROR(INFO(„DIRECTORY“));“de“;“en“)

Auch hier weigert sich Excel hartnäckig „deutsch“ zu werden. Der Grund:

INFO(„DIRECTORY“)

funktioniert auch im Deutschen korrekt. Erst

=WENN(ISTFEHLER(INFO(„VERZEICHNIS“));“en“;“de“)

klappt. Das englische Excel kennt „VERZEICHNIS“ nicht. Zum Glück ist diese Funktion volatil, das heißt: wird beim Start von Excel neu berechnet.

Mehrsprachige Umgebungen sind die Hölle! Nicht nur in Excel … Und: das oben genannte Beispiel ist nur Spitze des Eisberges.