PDA

Vollständige Version anzeigen : Per VBA nachfragen ob ich Datei als PDF speichern möchte


Alfredx
04.04.2012, 12:29
Hallo ich wollte fragen ob es möglich ist das ich per VBA es so einstellen kann wenn ich auf das X gehe um mein Fenster zu schließen eine Meldung kommt die mich fragt ob ich die Datei als PDF speichern möchte, mit antwortmöglichkeiten JA/Nein... wenn nein soll er die Datei einfach schließen, wenn ja soll er es als PDF automatisch speichern...

PS ich habe einen VBA Code schon drin in "dieses Arbeitsblatt" welches automatisch die Exceldatei speichert... nur so zur Info

DeBabba
04.04.2012, 13:39
hi AlfredX

Schau im VBA unter "Diese Arbeitsmappe" und hier im Dropdown links "Workbook" und im Dropdown rechts "Before save" oder before close" auswählen .
Hier dann Deinen Code eingeben
also
X= inputbox("datei als PDF sichern ?")
if x = 7 then
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"c:\Mappe2.pdf", Quality:=xlQualityStandard, IncludeDocProperties:= _
True, IgnorePrintAreas:=False, OpenAfterPublish:=True


habe das mit dem PFD erzeugen aufgezeichnet (Excel 2010)

und fertig

gruß
DeBabba

Alfredx
04.04.2012, 13:57
Ja ich habe das jetzt ausprobiert, die Inputbox erscheint (kann man daraus nicht eine msgbox machen mit möglichkeit auf ja oder nein zu klicken?) und wenn ich dort ein ja oder nein eingebe und auf enter drücke schließt er einfach meine datei ohne irgendwo was abgespeichert zu haben. (Wenn dann hätte ich es gerne das er es auf dem desktop speichert)

hab ich jetzt da einen fehler gemacht oder liegt das am code...

hier der code wie er jetzt ausschaut(ganz unten habe ich deinen code eingefügt):

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Sh As Object
On Error GoTo ErrorHandler
Application.ScreenUpdating = False
Sheets("Makro-Meldung").Visible = xlSheetVisible
For Each Sh In ThisWorkbook.Sheets
If Sh.Name <> "Makro-Meldung" Then
Sh.Visible = xlSheetVeryHidden
End If
Next Sh
ThisWorkbook.Save
ErrorHandler:
Application.ScreenUpdating = True
End Sub



Private Sub Workbook_Open()
Dim Sh As Object
On Error GoTo ErrorHandler
Application.ScreenUpdating = False
For Each Sh In ThisWorkbook.Sheets
Sh.Visible = xlSheetVisible
Next Sh
Sheets("Makro-Meldung").Visible = xlSheetVeryHidden
Sheets(1).Activate
ErrorHandler:
Application.ScreenUpdating = False


ThisWorkbook.Worksheets("Copyright").Visible = xlVeryHidden



MLF_Splash.Show


End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Ja = InputBox("datei als PDF sichern?")
If Ja = 7 Then
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"c:\Mappe2.pdf", Quality:=xlQualityStandard, IncludeDocProperties:= _
True, IgnorePrintAreas:=False, OpenAfterPublish:=True
End If
End Sub

DeBabba
04.04.2012, 14:30
Sorry..... mein Fehler.
also...
wenn Du JA klickst erhält die Variable X den Wert 6 und nicht 7

zu Message Box
ja, geht auch
Ja = msgbox("Datei als PDF sichern",vbyesno)

und schon sollte es klappen.
Probiers nochmal.
Gruß
De Babba

Alfredx
04.04.2012, 14:42
habs jetzt so eingefügt

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Ja = MsgBox("Datei als PDF sichern?", vbYesNo)

If x = 6 Then
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"c:\Mappe2.pdf", Quality:=xlQualityStandard, IncludeDocProperties:= _
True, IgnorePrintAreas:=False, OpenAfterPublish:=True
End If
End Sub

funktioniert aber immer noch nicht, wo speichert er es überhaupt ab? PS: musste am ende noch ein "end if" einfügen weil sonst es nicht funktionieren würde...

was muss ich noch am code ändern?

DeBabba
04.04.2012, 15:47
hi Alfred x
ok... hier nochmal der ganze Code


sub versiv
Ja = MsgBox("Datei als PDF sichern?", vbYesNo)

If x = 6 Then
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\BlaBla.pdf", Quality:=xlQualityStandard, IncludeDocProperties:=True _
, IgnorePrintAreas:=False, OpenAfterPublish:=False
end if
end sub

Also in diesem Beispiel wird das PDF im Laufwer C mit dem namen BlaBla.pdf gespeichert !Schau mal was hinter dem begriff FILENAME steht!
Hier kannst du ja mittels einer weiteren Inputbox noch einen Namen eintragen

Mit dem End If hast Du recht. Ich dachte aber das Du das bemerkst :rolleyes:
Probiers doch mal zunächst mit nei einfachen tabelle und baue die Sequenz dann in Deinen Code ein

Gruß

DeBabba

Alfredx
04.04.2012, 15:59
Tut mir leid Debaba das klappt nicht bei mir, ich muss dazu sagen ich bin jetzt auch nicht so der crack...

warum steht da jetzt auf einmal versiv()? Bei mir steht im lokalen datenträger c:\ nichts! ich wäre schon froh wenn die datei unter blabla dort aufkreuzen würde :)

und ich versteh auch nicht wieso er es mir speichern will wenn ich auf den button "ja" drücke... ich versteh halt den zusammenhang nicht zu x=6

msgbox taucht auf ich klick auf ja oder nein und es schließt mir die datei ohne was gespeichert zu haben...

PS: Ich möchte nur den Bereich (A1:H20) als PDF haben vom worksheet "Tabelle1"

DeBabba
04.04.2012, 16:00
ok ok,
habe bitte etwas Geduld, denn ich muß jetzt mal weg
ich melde mich wieder
gruß
DeBabba

Alfredx
05.04.2012, 07:34
ok kein Problem... aber danke schonmal :)

DeBabba
05.04.2012, 08:14
Hi AlfredX
so ... und jetzt nochmal ganz langsam
Als erstes der Code
Sub PDF()
X = MsgBox("Datei als PDF sichern?", vbYesNo)
If X = 6 Then
Range("A1:H20").Select
Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\HOFF-IT\Tabelle1.pdf", Quality:=xlQualityStandard, IncludeDocProperties:= _
True, IgnorePrintAreas:=False, OpenAfterPublish:=False
End If
End Sub

und hier die Erklärung und beantwortung Deiner Fragen
warum steht da jetzt auf einmal versiv()?
Das, was hinter dem Sub steht ist der Name des Makros. Das kannst Du nennen wie Du willst (ohne leerzeichen) also kutan, versiv, gagga oder was_auch_immer.
als erstes haben wir ja die MSG-Box. Hier gibt es ja die Schaltflchen JA und NEIN. Diese Schaltflächen geben in der variable "X" das Ergbnis zurück. wenn du JA klickst dann ist X = 6, bei NEIN ist X=7.
Dann markiere ich den Bereich A1:H20 und erzeuge das PDF (Sollche Sachen kannst Du mit dem Makrorekorder aufzeichnen, denn man kann die ganzen Befehle und parameter ja nicht alle auswendig wissen)
Und Fertig

nun kopiere den Code mal in ein "normales" Modul und teste das mal aus
Wenn alles wie gewünscht funzt, verschiede den Code in den Bereich "Diese Arbeitsmappe" Wie am Anfang beschrieben. Wenn Du das in "before close " setzt wird das Makro automatisch ausgeführt, bevor die Mappe geschlossen wird.

Ich hoffe das hilft Dir so weiter.:o :mrcool:

Gruß
DeBabba

Alfredx
05.04.2012, 08:30
Super debaba jetzt funzt es bei mir. Er speichert es im desktop ab...

Bin ich schon mal froh darüber, DANKE, aber jetzt hätte ich noch zwei Fragen an dich, ich hoffe ich überanstrenge dich nicht :)

Und zwar hab ich eingestellt das er mir den Bereich (A1:K51) abspeichert, dann speichert er mir im PDF dies auf zwei Seiten, ich hätte aber gern das er es mir auf einer Seite speichert, ist das möglich?

Meine zweite Frage wäre die das wenn ich das Dokument speichern möchte diesem einen Namen zuweisen kann, weil sonst überschreibt er mir das alte dokument... zudem würde ich gerne den Speicherort auswählen wollen, da nicht jeder Rechner den gleichen Pfad zum Desktop hat um die Datei abzuspeichern

Alfredx
05.04.2012, 09:13
Ok das mit dem pdf habe ich schon selber hinggekriegt, jetzt brauch ich nur noch die Namensvergabe für das pdf Dokument und die "speichern unter..." möglichkeit...

du hast ja gemeint die namensvergabe wäre mit der inputbox möglich, nur weiss ich nicht wo ich diese in den code eingeben soll.

Alfredx
05.04.2012, 09:45
Ok debabba um dich etwas zu entlasten :)


das mit dem dateinamen habe ich nun auch soweit

Dateiname = InputBox("Unter welchem Namen möchten sie die Datei abspeichern?", "Name:")

Range("A1:K51").Select
Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\" & Dateiname & ".pdf", Quality:=xlQualityStandard, IncludeDocProperties:= _
True, IgnorePrintAreas:=False, OpenAfterPublish:=False

nun speichert er es mir unter C: automatisch, aber ich würde gerne selber aussuchen wo er es abspeichert, sprich die "speichern unter..." option brauch ich noch dann wäre es perfekt!

DeBabba
05.04.2012, 09:51
Hey... cool das mit dem dateinamen haste gut gemacht. ;)
Wenn ich das mit dem PDF erzeugen manuell aufrufe kommt immer die Speichern Unter Option. Wenn ich das aufzeiche und einbinde dann nicht.
Schau doch mal ob hier die Hilfe was bietet (Im Code den Befehl "exportas fixedformat" markieren und F1 drücken. Oder mal googeln.
Bin im Moment etwas unter Stress , schau aber hier nochmal nach

Gruß
deBabba

Alfredx
05.04.2012, 11:53
Kein Problem, bei mir eilt es nicht :)

ich habe jetzt diesen Code eingefügt um das speichern unter aufzurufen

Application.Dialogs(xlDialogSaveAs).Show "C:\" & Dateiname

Allerdings muss ich dort dann erst manuell auswählen das ich es als PDF haben möchte! Vielleicht weisst du da aushilfe, aber wie gesagt mach dir keinen stress jetzt ist sowieso Ostern :) am Dienstag schau ich dann wieder spätestens rein :) gruß

Alfredx
11.04.2012, 13:20
und weisst du wie ich es evtl. hinkriege das "speichern unter" aufzurufen?

So das es schon als PDF eingestellt ist...

Denn wenn man das speichern unter abruft muss man manuell wählen ob man es als Word, Excel oder PDF datei abspeichern will. Ich hätte aber gerne das die PDF speicheroption schon automatisch ausgewählt wird.