Auf der rechten Brust der Lidl-Kassiererin hängt ein Namensschild: „Renate“. Werde sie mal fragen, ob die linke keinen Namen hat.

Ich programmiere wirklich gerne. Aber ich habe immer meine liebe Not mit ungenauen Arbeitsanweisungen.

Ich soll per Programmierung ein Tabellenblatt als PDF ablegen.

Kein Problem. Allerdings muss ich nachfragen, wie das PDF-Dokument heißen soll.

BatchRecord-Filename-Datum-Uhrzeit

lautet die Antwort.

Ich vermute, dass er nicht Filename, sondern Blattname meint.

Und: in welcher Form das Datum und die Uhrzeit geschrieben wird, erklärt er mir auch nicht. Nun, er wird es mir sicherlich noch sagen.

Ich probiere:

    strBlattname = "BatchRecord-" & ThisWorkbook.Name & Format(Date, "DD.MM.YYYY") & "-" & Format(Now, "HH:MM") & ".pdf"
    ' -- Export als PDF - in den gleichen Ordner, in dem sich die Vorlagendatei befindet
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        ThisWorkbook.Path & "\" & strBlattname, _
        Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
        OpenAfterPublish:=False

Eine Fehlermeldung ist die Folge:

Das Dokument wurde nicht gespeichert.

Ein bisschen suchen und ich werden fündig: Natürlich darf kein Doppelpunkt im Dateinamen auftauchen. Also raus damit (bei der Uhrzeit) und warten, wie denn der Dateiname korrekt aussehen soll:

strBlattname = "BatchRecord-" & ThisWorkbook.Name & Format(Date, "DD.MM.YYYY") & "-" & Format(Now, "HH.MM") & ".pdf"

Advent ist, wenn der Dachboden entrümpelt und alles wieder in der Wohnung verteilt wird.

Boah, was ist denn das? Ich bin sehr irritiert!

Ich öffne im Windows-Explorer das Eigenschaftenfenster einer Datei und wechsle auf die Registerkarte „Sicherheit“. Dort finde ich den Dateinamen mit Pfad, den ich markiere und nach Excel kopiere. Achtung: Ich markiere von rechts nach links:

Ein zweites Mal – jetzt wird von links nach rechts markiert und anschließend kopiert:

Ich kopiere beide Varianten nach Excel – die erste ist oben, die zweite unten. Ich ermittle die Anzahl der Zeichen mit LÄNGE und bin erstaunt. Ich löse das erste Zeichen mit der Funktion LINKS heraus und bin wieder erstaunt:

Wandelt man das Zeichen vor dem Laufwerksbuchstaben D mit Code in den ASCII-Code um und mit ZEICHEN wieder zurück, so erhält man ein „?“

Ich bin erstaunt.

Noch schlimmer wird es, wenn man mit PowerQuery und diese Access-Datenbank zugreift

und den Pfad durch den ersten Text ersetzt:

DataFormat.Error: Der angegebene Dateipfad muss ein gültiger absoluter Pfad sein.

lautet die Fehlermeldung. Man sieht das Zeichen nicht – weder in Excel noch in Word, im Editor oder in PowerQuery. Und wundert sich über diese merkwürdige Fehlermeldung.

Da gibt es nur eine Lösung: Will man den Dateinamen mit Pfad ermitteln, muss man im Explorer über das Symbol „Pfad kopieren“ den Verzeichnisnamen und Dateinamen in die Zwischenablage kopieren.
(danke an Martin Weiß für diesen Tipp)

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

Die einen gehen nachts feiern. Andere haben nachts wilden Sex. Und ich lade nachts mein Handy auf.

Seit ein paar Tagen habe ich in Microsoft 365 die neue Funktion LET. Damit kann man Formeln unter einem Namen ablegen, um sie (mehrmals) wieder zu verwenden. Beispielsweise so:

=ZELLE(„dateiname“)

oder besser:

=ZELLE(„filename“)

liefert den Namen und Speicherort der aktuellen Datei:

Benötigt man nun den Pfad, kann man das Zeichen „[“ suchen (oder finden):

=SUCHEN(„[„;D3)

liefert in unserem Beispiel 19. Bis ein Zeichen vor diesem Zeichen kann von links der Text herausgelöst werden:

=LINKS(D3;D4-1)

liefert hier: D:\Eigene Dateien\

Oder zusammengefasst:

=LINKS(ZELLE(„dateiname“);SUCHEN(„[„;ZELLE(„dateiname“))-1)

Darin wird nun zwei Mal die Funktion ZELLE(„dateiname“) verwendet. Man kann sie an einen Namen in der Funktion LET übergeben, beispielsweise an „Dateiname“:

=LET(Dateiname;ZELLE(„dateiname“);LINKS(Dateiname;SUCHEN(„[„;Dateiname)-1))

Allerdings: Das Ergebnis ist länger als die vorherige Funktion. Also ein kürzerer Funktionsname:

=LET(DN;ZELLE(„dateiname“);LINKS(DN;SUCHEN(„[„;DN)-1))

Das erhöht allerdings nicht gerade die Lesbarkeit!

Fazit: LET ist sicherlich eine nützliche und praktische Funktion. Allerdings kommt sie wohl erst bei sehr langen Formeln zum Einsatz. Und auch nur dann wenn Formelteile sich mehrmals wiederholen. Legt man diese Teil unter einem (langen) sprechenden Namen ab, wird das Ergebnis weder kürzer noch gut lesbar. Ich fürchte, sie wird wohl in den wenigsten Berechnungen in Excel in Microsoft 365 Einzug finden …

Wenn du im Dschungelcamp niemanden kennst hast du im Leben alles richtig gemacht.

Liebe Microsoft-Macher,

ich wünsche mir, dass ihr euch mal unterhaltet. Über die Anwendungsprogramme, die ihr uns verkauft. Für die wir Geld bezahlen. Es wäre schön, wenn sie sehr, sehr ähnlich wären.

Warum sehe ich in Access in der Titelleiste den Pfad und den Dateinamen:

In Excel dagegen nur den Dateinamen?

Es wäre doch so schön …


Ich muss nich immer im Mittelpunkt stehen … sitzen is auch okay

Schon perfide: Ich verbinde zwei Zellen miteinander („verbinden und zentrieren“). Ich speichere die Datei unter dem Namen „RenesTest.xlsx“. Ich verweise von einer anderen Datei auf die verbunden Zelle(n) und erhalte als Bezug:

=[RenesTest.xlsx]Tabelle1!$B$5

Ich speichere die Datei unter dem Namen „Test Rene.xlsx“. Erneut ein Bezug auf die verbundenen Zellen. Nun erhalte ich:

='[Test Rene.xlsx]Tabelle1′!$B$5:$C$5

was nach Bestätigung mit dem Fehler #WERT! quittiert wird. Erstaunlich, dass bei einem Leerzeichen im Dateiname der Bezug auf die verbunden Zellen aufgelöst wird, während bei einem Dateinamen ohne Leerzeichen der Bezug auf eine Zelle erfolgt!

Fazit: Besser nicht „verbinden und zentrieren!“ Das bringt nur Ärger!