Hallo Michael,
mit der Shell-Funktion (mehr Info dazu, wenn du imVBA-Editor das Wort
in ein Codemodul eintippst, den Cursor in das Wort stellst und F1
drückst) startet man eine externe Anwendung. Das bedeutet, die
pdf-Datei müsste als externe Datei vorhanden sein.
Dadurch liesse sich das Speichern-Problem umgehen, aber dafür können
natürlich andere auftreten.
Wenn man mit deinem Code ein eingebettete pdf öffnet, hat die
Anwendung einen Fenstertitel, etwa Acrobat Reader - [Acrobat-Dokument
in Mappe1.xls]
Nach diesem Fenstertitel kann man suchen und, falls gefunden, eine
Meldung ausgeben und das speichern solange sperren, bis Acrobat bzw die
pdf-Datei geschlossen wurde.
Ins Codemodul DieseArbeitsmappe
Private Declare Function FindWindow Lib _
"user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal _
lpWindowName As String) As Long
Private Sub Workbook_BeforeSave _
(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim hwnd As Long
hwnd = FindWindow(vbNullString, _
"Acrobat Reader - [Acrobat-Dokument in " _
& ThisWorkbook.Name & "]")
If hwnd <> 0 Then
MsgBox "Acrobat schließen!"
Cancel = True
End If
End Sub
Anstatt MsgBox "Acrobat schließen" kann man den Prozess dann auch
abschießen, aber auch dieser Code ist nicht wenig umfangreich, Codebsp
http://michael-schwimmer.de/xlMain.htm Nr 78
Es gibt nun mehrere Programme, eine pdf anzeigen zu lassen, und damit
variiert auch der Fenstertitel. Um für alle Eventualitäten gerüstet
zu sein, landet man doch wieder bei derm Code aus meinem ersten link.
Andere Möglichkeit: die pdf-Datei als Bild-Datei abspeichern, dieses
Bild der Picture-Eigenschaft eines UserForm zuordnen. Das Bild wird in
der Exceldatei gespeichert und muss nicht als externe Datei vorhanden
sein. Zum anzeigen dann schlicht UserForm.Show
Gruß
stefan
Post by Michael Steingruberhallo stefan
danke für deine tipps. du must verstehen, bin ein vba neuling. ich hab
keinen plan was shell ist. ich öffne ein eingebettetes pdf in der excel
datei, da diese verschickt wird und auf anderen computern laufen muss, somit
kann ich keinen dateipfad im sinne eines links angeben, damit das pdf
Sub öffnen_Kurzanleitung_DE()
Sheets("anleitung").Select
ActiveSheet.Shapes("Object 12").Select
Selection.Verb Verb:=xlPrimary
Sheets("leere seite").Select
Range("a1").Select
End Sub
jetzt muss es nur wieder geschlossen werden können mit einem in einer
userform integrierten funktion. ein makro für ein button der das excel
speichert und schliesst. ist eingebaut, funktioniert jedoch nur, wenn das pdf
nicht geöffnet ist....
gruss
michael
Post by stefan onkenPost by stefan onkenAnsonsten könnte man auch alle Fensterhandles bzw Tasks nach dem Namen
www.activevb.de/tipps/vb6tipps/tipp0123.html
(funktioniert auch mit Excel).
ich habe überlesen, dass du den Reader mittels Makro startest. Machst
du das mit Shell?
In dem Fall wird eine Task-ID erzeugt, die du überprüfen kannst.
taskID = Shell("Pfad\acrobat.exe test.pdf")
Ein Codebsp, wie man mit der taskID an den Task kommt und diesen ggfls
schliesst, findest du hier: http://tinyurl.com/d8wdy
Gruß
stefan