2.6k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo zusammen,

ich möchte per VBA den aktuellen Namen der geöffneten Datei ermitteln, um mit diesem Namen
in PDF zu exportieren.

Der Export in PDF ist ja per "ExportAsFixedFormat" ja kein Problem, nur wird dort eben ein Dateiname erwartet und den möchte ich natürlich nit fix vorgeben.

Hat jemand eine Idee?

LG

Peter

11 Antworten

0 Punkte
Beantwortet von beverly_ Experte (3.3k Punkte)

Hi Peter,

ActiveWorkbook.Name sollte Abhilfe schaffen, wenn es die aktive Mappe sein soll.

Bis später, Karin

0 Punkte
Beantwortet von
Hi Karin,

vielen Dank für Deinen Hinweis. Auf den war ich ebenfalls bereits gestoßen. Allerdings komme ich damit insoweit nicht klar, als dass (angenommen meine Datei heißt "xyz.xlxs") ich ja lediglich das "xyz" des Namens benötige und noch keine Lösung dafür habe, das ".xlxs" wegzubekommen, um dann einen neuen Dateinamen "xyz.pdf" zu generieren.

LG

Peter
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)

Hallo Peter,

so kannst du den Namen ohne Endung ermitteln:

Sub name()
Dim strName As String

strName = Left(ThisWorkbook.name, InStrRev(ThisWorkbook.name, ".") - 1)
MsgBox strName

End Sub

Gruß

M.O.

0 Punkte
Beantwortet von
Hallo M.O.,

vielen Dank für die Lösung!
Sie klappt, nachem ich den kleinen Fauxpas "sub name()" endlich als solchen erkannt hatte,
einwandfrei.

Danke schön!

Gruß

Peter
0 Punkte
Beantwortet von

Da wird doch der Hund in der Pfanne verrückt!
Ich bekomme nun den korrekt ermittelten und gewandelten Namen nicht übergeben...


Sub Drucken_PDF()
'
' Drucken_PDF Makro
'

'
    Dim strName1 As String
    Dim strName2 As String
    strName1 = Left(ThisWorkbook.name, InStrRev(ThisWorkbook.name, ".") - 1)
    strName2 = strName1 & ".pdf"
    
    Sheets(Array("xyz1", "xyz2")).Select
    Sheets("xyz1").Activate
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=strName2, _
        Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
        :=False, OpenAfterPublish:=False
End Sub


Wo ist mein Denkfehler?
Ich habe sowohl Filename:=strName2 als auch Filename:= "strName2" ausprobiert.

Wie bekomme ich denn den strName2 korrekt übergeben?

LG

Peter

0 Punkte
Beantwortet von beverly_ Experte (3.3k Punkte)

Hi Peter,

es fehlt die Pfadangabe wo gespeichert werden soll.

Ich löse so etwas auf diesem Weg:

Sub PDFerzeugen()
    Dim strName As String
    strName = "E:\Z_Test\" '<== Speicherpfad
    strName = strName & Application.Substitute(ActiveWorkbook.Name, ".xlsx", "") & ".pdf"
    Application.ScreenUpdating = False
    ActiveWorkbook.Worksheets(Array("Tabelle1", "Tabelle2")).Copy
    With ActiveWorkbook
        .ExportAsFixedFormat _
            Type:=xlTypePDF, Filename:=strName, _
            Quality:=xlQualityStandard, IncludeDocProperties:=True, _
            IgnorePrintAreas:=False, OpenAfterPublish:=False
        .Close False
    End With
    Application.ScreenUpdating = True
End Sub

Bachte bitte folgendes: du hattest in deinem Eröffnungsbeitrag geschrieben, dass du den Namen der aktuellen geöffneten Mappe feststellen willst - das wäre ActvieWorkbook und ist etwas anderes als ThisWorkbook, denn letzteres bezieht sich auf die Arbeitsmappe mit dem Code, wogegen diese nicht unbedingt die aktive Mappe sein muss!

Bis später, Karin

0 Punkte
Beantwortet von

Hallo Karin,

vielen Dank, und das gleich 2-fach:
- Deine Code-Lösung zur Tabellenauswahl finde ich wesentlich übersichtlicher als meine (ändere ich bei mir gleich mal ab)
- Dein Hinweis auf die fehlende Pfadangabe

Habe ich getestet und funktioniert!
Da wäre ich niemals drauf gekommen. Ich hatte mich auf der MS-Seite in die ExportAsFixedFormat-Methode eingelesen, und dort steht:

"...Sie können einen vollständigen Pfad angeben, andernfalls wird die Datei in Excel im aktuellen Ordner gespeichert."

Deshalb hatte ich den Pfad stets außen vor gelassen, weil ich ohnehin im gleichen Verzeichnis bleiben wollte.
Ich habe mir jetzt aus Euren Antworten das so zusammengebastelt:

strNameTest = ActiveWorkbook.Path & "\" & Left(ActiveWorkbook.name, InStrRev(ActiveWorkbook.name, ".") - 1) & ".pdf"

Deinen Hinweis auf den Unterschied zw. ActiveWorkbook und ThisWorkbook nehme ich dankend an und setze das auch um, wobei mir der Unterschied zwischen beiden noch nicht einleuchtet - ist hier aber auch egal.

Auf jeden Fall ein ganz dickes Dankeschön!

LG

Peter

0 Punkte
Beantwortet von beverly_ Experte (3.3k Punkte)

Hi Peter,

der Unterschied zwischen ThisWorkBook und ActiveWorkbook ist eigentlich ganz einfach: ThisWorkbook = DieseArbeitsmappe und lässt sich merken als "Diese Arbeitmappe mit dem laufenden Code". ActiveWorkbook dagegen kann auch eine andere offene Arbeitsmappe sein wenn mehrere geöffnet sind, also diejenige welche gerade aktiv ist und in der gerade gearbeitet wird. Angenommen dein Code steht in der Mappe mit dem Namen "MeineMappe.xlsm" und außerdem sind noch geöffnet "Mappe2.xlsx" und "Mappe3.xlsm" und "Mappe4.xlsb" und "Mappe5.csv" usw. und du arbeitest gerade in "Mappe4.xlsb", dann entspricht "MeineMappe.xlsm" ThisWorkbook und "Mappe4.xlsb" ActiveWorkbook. ThisWorkbook ist also immer die Mappe mit dem Code der gerade läuft, ActiveWorkbook kann dagegen eine Mappe ohne Code oder mit Code sein (wobei dieser Code inaktiv ist).

Bis später, Karin

0 Punkte
Beantwortet von
Hallo Karin,

vielen Dank für Deine Ausführungen.
Das macht es verständlicher für mich.

Ich habe ein anderes Phänomen beim Benutzen unserer beiden Codes festgestellt:
Nutze ich Deinen Code, die Auswahl der Tabellenblätter in der "With -> End With"-Einbettung,
werden grau ginterlegte Zellen im PDF farbverfälscht dargestellt; sie sind dann eher gelblich als grau.

Nutze ich die Tabellenblattauswahl, wie von mir oben gepostet, habe ich im PDF eine korrekte Darstellung des Grautons.

Das Ergebnis ist reproduzierbar, ich habe alles gleich und nur die Tabellenauswahl jeweils unterschiedlich gesetzt - immer das gleiche Ergebnis.

Kannst Du Dir darauf einen Reim machen?

LG

Peter
0 Punkte
Beantwortet von beverly_ Experte (3.3k Punkte)
Hi Peter,

sehen die Farben nur im PDF anders aus oder auch wenn sie in eine neue Arbeitsmappe kopiert wurden - also wenn du in meinem Code mal den ganzen With-Block weglässt?

Ich könnte das mir nämlich erklären, wenn die zu exportierenden Arbeitsmappe eine andere Farbpalette benutzt als die, mit welcher bei dir eine neue Arbeitsmappe erstellt wird, denn mit meinem Code werden die Tabellen zuerst in eine neue Arbeitsmappe exportiert und diese dann insgesamt gespeichert.

Es wäre auch denkbar, wenn du eine bedingte Formatierung anwendest, die sich auf ein anderes Tabellenblatt bezieht und dieses Tabellenblatt beim Export fehlt, sodass die bedingte Formatierung nicht mehr gültig ist.

Bis später, Karin
...