VBA Prüfen ob PDF bereits vorhanden ist

Hallo ihr,

mir stellt sich folgendes Problem:

ich habe ein UserForm mit dem ich mit Hilfe von PDF Creator 1.2 meine ganze Arbeitsmappe in ein PDF exportieren möchte.

Folgendes existiert und funktioniert sauber:
-Eine Textbox (Name=TextBox1) für den Dateinamen (die Endung „.pdf“ füge ich selbst hinzu also nicht erforderlich)
-einen „OK“ Button (Name=CommandButton5)
-einen "Abbrechen Button (Name=CommandButton6)

Ziel/Problem:
-Bei Excelversion 2010 exportieren mit Code(siehe unten), aber nicht überschreiben ohne zu fragen, wie er es einfach macht. (Name dafür ist in „TextBox1“.
-Bei älteren Versionen PDF Creator 1.2 einsetzen (am besten ohne das Fenster das alles nochmal abfrägt).

Vielen Dank für eure Mühe
wagnthom

_Private Sub CommandButton5_Click()

'Monat wird als PDF abgespeichert und erstellt einen neuen Monat

'Footer für alle Tabellenblätter setzen
For Each Worksheet In Worksheets
Worksheet.PageSetup.CenterFooter = „Seite &amp:stuck_out_tongue_winking_eye: von &N“
Worksheet.PageSetup.RightFooter = „&A“
Worksheet.PageSetup.PrintComments = xlPrintNoComments
Next Worksheet

'Abspeichern als PDF

If Val(Application.Version) = „2010“ Then
ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, FileName:= _
TextBox1, Quality:= _
xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
OpenAfterPublish:=True
Else
ActiveWorkbook.PrintOut Copies:=1, ActivePrinter:=„PDFCreator“, Collate:=True, IgnorePrintAreas:=False
End If

Unload Speichern_als_PDF 'PopUp Monatsabschluss wird geschlossen

End Sub

Private Sub CommandButton6_Click()

'PopUp Monatsabschluss wird geschlossen

Unload Speichern_als_PDF

End Sub_

Hallo Wagnthom,

Folgendes existiert und funktioniert sauber:

###If Val(Application.Version) = „2010“ Then###

funtioniert bei XL 2010? In allen Vorläuferversionen funktioniert es nicht
denn Application.Version liefert einen String zurück, „9.0“ bei XL 2000, „12.0“ bei XL 2007

Ich hätte es also so in etwa vermutet:
If Application.Version = „13.0“ Then
oder
If Val(Application.Version) = 13 Then

-Eine Textbox (Name=TextBox1) für den Dateinamen (die Endung
„.pdf“ füge ich selbst hinzu also nicht erforderlich)

Im Code nicht sichtbar daß du eine Endung hinzufügst.

Ziel/Problem:
-Bei Excelversion 2010 exportieren mit Code(siehe unten), aber
nicht überschreiben ohne zu fragen, wie er es einfach macht.
(Name dafür ist in „TextBox1“.

Option Explicit

Private Sub CommandButton5\_Click()
Dim wks As Worksheet, Eing As Variant
'Monat wird als PDF abgespeichert und erstellt einen neuen Monat
'Footer für alle Tabellenblätter setzen
For Each wks In Worksheets
 wks.PageSetup.CenterFooter = "Seite &amp:stuck\_out\_tongue\_winking\_eye: von &N"
 wks.PageSetup.RightFooter = "&A"
 wks.PageSetup.PrintComments = xlPrintNoComments
Next wks
'Abspeichern als PDF
If Val(Application.Version) = "2010" Then
 If Dir(PfadDateiname) "" Then
 Eing = MsgBox("datei existiert schon, überschreiben Ja/nein?", 4, "Abfrage")
 End If
 If Eing = vbOK Then
 ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:= \_
 TextBox1, Quality:= \_
 xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, \_
 OpenAfterPublish:=True
 End If
Else
 ActiveWorkbook.PrintOut Copies:=1, ActivePrinter:="PDFCreator", Collate:=True, IgnorePrintAreas:=False
End If
Unload Speichern\_als\_PDF 'PopUp Monatsabschluss wird geschlossen
End Sub

-Bei älteren Versionen PDF Creator 1.2 einsetzen (am besten
ohne das Fenster das alles nochmal abfrägt).

Bei dem neuen Creator wird nix abgefragt?

Gruß
Reinhard

Hallo Reinhard,

###If Val(Application.Version) = „2010“ Then###

Deswegen hab ich das nicht mit in die Auflistung getan :wink:

Type:=xlTypePDF

Unter Office 2010 kann man bei Speichern unter neuerdings auch PDF auswählen. Diese Eigenschaft gibt dann vor, dass es die Endung PDF erhält.

Bei dem neuen Creator wird nix abgefragt?

Doch es wird eben was abgefragt, aber ich hätte es am liebsten so, dass ich die Informationen per VBA komplett an das Programm übergebe.

Letztes Problem:
Wie kombiniere ich in der If abfrage meinen Dateinamen aus „TextBox1“ (der zum beispiel Test ist) mit der endung .pdf?

Vielen Dank jedenfalls schonmal
wagntom

Private Sub CommandButton5\_Click()

'Monat wird als PDF abgespeichert und erstellt einen neuen Monat

 Dim Wks As Worksheet
 Dim Eing As Variant

 'Footer für alle Tabellenblätter setzen
 For Each Wks In Worksheets
 Wks.PageSetup.CenterFooter = "Seite &amp:stuck\_out\_tongue\_winking\_eye: von &N"
 Wks.PageSetup.RightFooter = "&A"
 Wks.PageSetup.PrintComments = xlPrintNoComments
 Next Wks

 'Abspeichern als PDF

 If Dir(Text(TextBox1 & ".pdf")) = "" Then

 If Application.Version = "14.0" Then
 ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, FileName:= \_
 TextBox1, Quality:= \_
 xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, \_
 OpenAfterPublish:=True
 Else
 ActiveWorkbook.PrintOut Copies:=1, ActivePrinter:="PDFCreator", Collate:=True, IgnorePrintAreas:=False
 End If

 Else

 Eing = MsgBox("Datei existiert schon, überschreiben Ja/nein?", 3, "Abfrage")

 If Eing = vbYes Then
 MsgBox "Du hast ja gedrückt", 0, "Du hast ja gedrückt"
 Else: End If

 If Eing = vbNo Then
 MsgBox "Du hast nein gedrückt", 0, "Du hast nein gedrückt"
 Else: End If

 End If

 Unload Speichern\_als\_PDF 'PopUp Monatsabschluss wird geschlossen

End Sub

Private Sub CommandButton6\_Click()

'PopUp Monatsabschluss wird geschlossen

 Unload Speichern\_als\_PDF

End Sub

Hallo Wagnthom,

###If Val(Application.Version) = „2010“ Then###

Deswegen hab ich das nicht mit in die Auflistung getan :wink:

welche Auflistung?

Type:=xlTypePDF

Unter Office 2010 kann man bei Speichern unter neuerdings auch
PDF auswählen. Diese Eigenschaft gibt dann vor, dass es die
Endung PDF erhält.

aha, grad nachgesehen, kann ja mein 2007 auch.

Bei dem neuen Creator wird nix abgefragt?

Doch es wird eben was abgefragt, aber ich hätte es am liebsten
so, dass ich die Informationen per VBA komplett an das
Programm übergebe.

An Fremdprogramme , sogar an Excelfenster was „mitgeben“ bzw. „vorbelegen“ ist manchmal schwierig bis unmöglich.
Und was bei CreatorX klappt muß noch lange nicht mit CreatorY klappen.

„Sendkeys“ ginge evtl., ist aber selbst kritisch zu sehen, muß man austesten.

Wie kombiniere ich in der If abfrage meinen Dateinamen aus
„TextBox1“ (der zum beispiel Test ist) mit der endung .pdf?

Das ist doch schon in

If Dir(Text(TextBox1 & „.pdf“)) = „“ Then

wenn das nicht klappt, nimm halt

If Dir(Text(TextBox1.Text & „.pdf“)) = „“ Then

Ggfs. muß vornedran noch der Pfad zur Datei in TextBox1.

Gruß
Reinhard

Hallo Reinhard,

mit deinen Tipps bin ich jetzt auch noch auf ne Lösung gekommen.

Das mit dem variablen Dateinamen für das PDF erledige ich so, dass ich meine Tabellen mit PDF-Creator zu einem bekannten Namen hin exportiere. Hierbei nutze ich das Automatische Speichern und lasse es einfach als Windows-Anmeldenamen exportieren. Danach ändere ich den Dateinamen einfach wieder auf meinen variablen Dateinamen.
Leider ist es dann dann nicht mehr so einfach das PDF danach nochmal aufzurufen, wenn man nicht sicher sagen kann, welcher PDF-Reader verwendet wird und wo er installiert ist. Aber ich lasse dann einfach eine MsgBox erscheinen, dass er fertig ist.

Vielen Dank
wagnthom

Private Sub CommandButton5\_Click()

'Monat wird als PDF abgespeichert und erstellt einen neuen Monat

 Dim Wks As Worksheet
 Dim Abfrage\_ueberschreiben As Variant
 Let Vorlaeufiger\_Dateiname = ThisWorkbook.Path & "\" & UserNameWindows & ".pdf"
 Let SollDateiname = ThisWorkbook.Path & "\" & TextBox1 & ".pdf"

 Unload Speichern\_als\_PDF 'PopUp Monatsabschluss wird geschlossen

 'Footer für alle Tabellenblätter setzen
 For Each Wks In Worksheets
 Wks.PageSetup.CenterFooter = "Seite &amp:stuck\_out\_tongue\_winking\_eye: von &N"
 Wks.PageSetup.RightFooter = "&A"
 Wks.PageSetup.PrintComments = xlPrintNoComments
 Next Wks

 'Abspeichern als PDF

 If Not Dir(SollDateiname) "" Then
Speichern:
 If Application.Version = "14.0" Then

 ThisWorkbook.ExportAsFixedFormat Type:=xlTypePDF, FileName:= \_
 ThisWorkbook.Path & "\" & TextBox1, Quality:= \_
 xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, \_
 OpenAfterPublish:=True

 End

 Else

 If Not Dir(Vorlaeufiger\_Dateiname) "" Then 'Fall die Datei "Vorlaeufiger\_Dateiname" schon existiert wir sie vorher gelöscht

 ThisWorkbook.PrintOut copies:=1, ActivePrinter:="PDFCreator", Collate:=True, IgnorePrintAreas:=False

 Else

 Kill Vorlaeufiger\_Dateiname

 ThisWorkbook.PrintOut copies:=1, ActivePrinter:="PDFCreator", Collate:=True, IgnorePrintAreas:=False

 End If

 GoTo Umbenennen

 End If

 Else

 'Abfragen ob PDF überschrieben werden soll

 Abfrage\_ueberschreiben = MsgBox(TextBox1 & ".pdf ist bereits vorhanden." & vbCrLf & "Möchten Sie sie ersetzen?", 48 + 4 + 256, "Speichern unter bestätigen")

 If Abfrage\_ueberschreiben = vbYes Then 'Wenn PDF überschrieben werden soll, zu Speicherprozess springen

 Kill SollDateiname 'Alte Datei wird gelöscht

 GoTo Speichern

 Else: End If

 If Abfrage\_ueberschreiben = vbNo Then 'Wenn PDF NICHT überschrieben werden soll, "Speichern\_als\_PDF" neu laden

 Speichern\_als\_PDF.Show

 Else: End If

 End If

Umbenennen:
 'Wartet 1.5 Sekunden und benennt wenn schon v erstelltes PDF um

 Application.Wait Now + TimeSerial(0, 0, 1.5)
 If Dir(Vorlaeufiger\_Dateiname) "" Then
 Name Vorlaeufiger\_Dateiname As SollDateiname
 Else: GoTo Umbenennen
 End If

 MsgBox "Abrechnung wurde vollständig als PDF exportiert."

End Sub

Private Sub CommandButton6\_Click()

'PopUp Monatsabschluss wird geschlossen

 Unload Speichern\_als\_PDF

End Sub

Hallo WagnThom,

Das mit dem variablen Dateinamen für das PDF erledige ich so,
dass ich meine Tabellen mit PDF-Creator zu einem bekannten
Namen hin exportiere. Hierbei nutze ich das Automatische
Speichern und lasse es einfach als Windows-Anmeldenamen
exportieren.

ist mir jetzt zu der Uhrzeit zu kompliziert darüber nachzudenken was du da machst.

Danach ändere ich den Dateinamen einfach wieder
auf meinen variablen Dateinamen.

Na, wenn dann alles in Ordnung ist isses ja in Ordnung.
Ich muß ja nicht alles verstehen.

Leider ist es dann dann nicht mehr so einfach das PDF danach
nochmal aufzurufen, wenn man nicht sicher sagen kann, welcher
PDF-Reader verwendet wird und wo er installiert ist.

? Soll das bedeuten du müßtest herausfinden welchen PDF-Creator Excel benutzt hat?
Benutzt es eigentlich einen? Also einen FremdCreator oder den in der Version eingebauten?

Aber ich
lasse dann einfach eine MsgBox erscheinen, dass er fertig ist.

Auch gut, du weißt von nix sagst aber dann in einem Fenster. alles in Ordnung, bestand niemals Gefahr und ich übernehme die volle Verantwortung usw.
Du solltest in die Poltik gehen *sehr grins*

Damit ich jetzt nicht völlig den Überblick verliere, deine Anfrage ist insofern „erledigt“ von mir aus gesehen, da du einen Weg gefunden hast das zu lösen?

Gruß
Reinhard

Excel 2010 = Version 13.0 oder 14.0?
Hallo Wagnthom,

ich habe deinen Code nur überflogen, mir fiel das auf:

If Application.Version = „14.0“ Then

m.W. ist XL 2010 die Version 13.0
Kannste das bitte mal checken, ich hab kein XL 2010, danke

Gruß
Reinhard

Hi Reinhard,

Die Entwicklung begann 2006, während Microsoft die Arbeit an Office 12 abschloss, und es als Microsoft Office 2007 veröffentlichte. Die Versionsnummer 13 wurde wegen der Abneigung gegen die Zahl 13 ausgelassen.

sagt http://de.wikipedia.org/wiki/Office_2010.

Gruß

Markus
______________

Und geh’ heute bloß nicht unter einer Leiter durch. Bestimmt funktioniert dann VBA nicht mehr.

Die Entwicklung begann 2006, während Microsoft die Arbeit an Office 12 abschloss, und es als Microsoft Office 2007 veröffentlichte. Die Versionsnummer 13 wurde wegen der Abneigung gegen die Zahl 13 ausgelassen.

sagt http://de.wikipedia.org/wiki/Office_2010.

Hallo Markus,

danke dir, auch für den Link, ich habe letztes jahr Office 2007 Home & Student gekauft, mal nachschauen wann genau wegen:

„Über die Microsoft Office 2010 Technology Garantie erhält der Käufer
von Office 2007 eine kostenlose Upgrade-Lizenz auf Microsoft Office
2010, sofern dieser Office 2007 zwischen dem 5. März und 30.
September 2010 erworben hat.“

Und geh’ heute bloß nicht unter einer Leiter durch. Bestimmt
funktioniert dann VBA nicht mehr.

Ich gehe auch unter einer Leiter durch aber nur nach einem prüfenden Blick auf den der auf der Leiter steht und was er grad macht.

„Es bringtt Unglück wenn eine schwarze katze vor dir von links nach rechts geht“, mag sein, wenn ich eine maus bin :smile:
Oder aber die katze ist ein Löwe o.ä… Dann spielt es aber m.E. keine Rolle ob mich das Kätzchen von links oder von rechts her annagt, meine restliche tagesplanung ist dann sowieso bald gegessen :frowning:

Gruß
Reinhard

Gruß
Reinhard