Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

aus Excel Makro heraus PDF-Datei aufrufen

872 views
Skip to first unread message

Rookie

unread,
Aug 23, 2005, 2:37:10 AM8/23/05
to
Hallo liebe VBA-Freunde,

ich grüble schon seit Tagen, wie ich es schaffe, über eine selbst definierte
Symbolleiste eine Makrofunktion auszuführen, die mit dem Standardprogramm
des Systems für PDF-Dateien eine PDF-Datei öffnet. Hierbei ist der Standort
der Datei das Verzeichnis der Excel-Datei
(Die PDF-Datei stellt das Handbuch zur Excel-Datei dar und soll per
Schaltfläche aus der Anwendung aufrufbar sein)

Ach ja, die Symbolleiste hab ich fertig; es geht also nur um den Aufruf der
PDF-Datei...

Danke vorab.

MfG

N. Paul.


Herbert Taferner

unread,
Aug 23, 2005, 2:59:52 AM8/23/05
to
Hallo Rookie,
^^^^^^
hier steht bei uns normalerweise der Realname
siehe auch hier
http://www.jumper.ch/netikette_crossposting.htm


was ist da schwer
mit Shell( Name der Anwendung mit Pfad - Leerzeichen - Pfad und Name der Datei,
1)

z. B.
Dim Ergebnis
Ergebnis = Shell("C:\Programme\Adobe\Acrobat 7.0\Reader\acrord32.exe
C:\xlhilfe.pdf", 1)


mfg Herbert


Michael Noisternig

unread,
Aug 23, 2005, 3:32:20 AM8/23/05
to
Hi,
bei installiertem Acrobat Reader 7 ist vermutlich ein Update auf 7.01
notwendig.
Gruß, Michael

Eric March

unread,
Aug 23, 2005, 6:38:57 AM8/23/05
to
Herbert Taferner schrieb:

Dann sollte wohl aber mit ActiveWorkbook.Path die Lokalität der
PDF-Datei ermittelt werden.

Und die Verwendung absoluter Pfade zum Arbeitsprogramm halte ich auch
für sehr mutig!
Shell ("c:\windows\system32\cmd.exe /c c:\a\begleitschein.pdf")
funktioniert im Soforttest gerade eben klaglos, und den Pafd zur CMD
sollte man mit der Variable COMSPEC (=C:\Windows\System32\CMD.Exe bei
mir) genial einfach erfassen können ohne %WINDIR%\System32\CMD.Exe
bemühen zu müssen.

--
Eric March

»Schreibe kurz - und sie werden es lesen. Schreibe klar und sie werden
es verstehen. Schreibe bildhaft - und sie werden es im Gedächtnis
behalten.« Joseph Pulitzer

Herbert Taferner

unread,
Aug 23, 2005, 7:19:14 AM8/23/05
to
Hallo Eric,

> Dann sollte wohl aber mit ActiveWorkbook.Path die Lokalität der PDF-Datei
> ermittelt werden.
>
> Und die Verwendung absoluter Pfade zum Arbeitsprogramm halte ich auch für sehr
> mutig!
> Shell ("c:\windows\system32\cmd.exe /c c:\a\begleitschein.pdf") funktioniert
> im Soforttest gerade eben klaglos, und den Pafd zur CMD sollte man mit der
> Variable COMSPEC (=C:\Windows\System32\CMD.Exe bei mir) genial einfach
> erfassen können ohne %WINDIR%\System32\CMD.Exe bemühen zu müssen.
>

mir ging es hier ja nicht darum, einen Internationalen und für alle Versionen
von
Acrobat Reader funktionierenden Aufruf dessen zu entwickeln,
sondern das er sieht, wenn das da und das da steht, das es geht

woher er die Pfade und Dateinamen im einzelnen nimmt ist mir
nicht wichtig gewesen, ausserdem wenn du es wirklich genau nimmst
ist diese Lösung auch nicht gerade ideal, was ist wenn einer kein
Programm installiert hat das mit "*.pdf" verknüpft ist
da müsste man grundsätzlich in der Registrierung prüfen ob das laden
einer PDF Datei möglich ist

mfg Herbert


Nico Paul

unread,
Aug 23, 2005, 9:43:29 AM8/23/05
to
Hallo Eric, Herbert,

danke erstmal für die Postings.

Aber ich krieg es noch nicht hin.

Hab folgendes versucht:

Shell ("c:\winnt\system32\cmd.exe /c " + ActiveWorkbook.Path +
"\xy.pdf")

Klappt noch nicht. Und diese Geschichte mit COMSPEC - wie binde ich das
denn in mein Macro mit ein?

Danke nochmal.

Nico.

Thomas Ramel

unread,
Aug 23, 2005, 10:06:15 AM8/23/05
to
Grüezi Paul

"Rookie" schrieb:


Hier noch eine weitere Variante, die nicht auf spezielle Voreinstellungen
angeweisen ist und auch für andere Dateien verwendet werde kann:

Declare Function ShellExecute Lib "shell32" Alias "ShellExecuteA" _
(ByVal hwnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long

Sub OpenPDF()
ShellExecute 0, _
"Open", _
"DeinPfadundDateiName.pdf", _
vbNullString, _
vbNullString, _
vbNormalFocus
End Sub

--
Mit freundlichen Grüssen

Thomas Ramel (@work)
- MVP für Microsoft-Excel -

[Win XP Pro SP-2 / xl2003]

Michael Schwimmer

unread,
Aug 23, 2005, 10:38:20 AM8/23/05
to
Hallo Nico,

"Nico Paul" schrieb:

> Hallo Eric, Herbert,
> danke erstmal für die Postings.
> Aber ich krieg es noch nicht hin.
> Hab folgendes versucht:
> Shell ("c:\winnt\system32\cmd.exe /c " + ActiveWorkbook.Path +
> "\xy.pdf")

Am besten Anführungszeichen um den Dokumentpfad einfügen.

Shell ("c:\winnt\system32\cmd.exe /c """ & ActiveWorkbook.Path &
"\xy.pdf""")

Statt Pluszeichen sollte man unbedingt das kaufmännische Und benutzen,
um Zeichenketten zu verknüpfen.

Nimm am besten ShellExecute!

Private Declare Function ShellExecute Lib "shell32.dll" _
Alias "ShellExecuteA" (ByVal Fensterzugriffsnummer As Long, _
ByVal lpOperation_wie_Open_oder_Print As String, _
ByVal lpDateiname_incl_Pfad As String, _
ByVal lpZusätzliche_Startparameter As String, _
ByVal lpArbeitsverzeichnis As String, _
ByVal nGewünschte_Fenstergröße_der_Anwendung As Long) _
As Long

Private Const SW_HIDE = 0
Private Const SW_MAX = 10
Private Const SW_MAXIMIZE = 3
Private Const SW_MINIMIZE = 6
Private Const SW_NORMAL = 1
Private Const SW_SHOW = 5
Private Const SW_SHOWDEFAULT = 10
Private Const SW_SHOWMAXIMIZED = 3
Private Const SW_SHOWMINIMIZED = 2
Private Const SW_SHOWMINNOACTIVE = 7
Private Const SW_SHOWNORMAL = 1
Private Const SW_SHOWNOACTIVATE = 4

Sub Drucken()
ShellExecute 0&, "Print", "c:\Eigene Dateien\Asdf.doc", _
vbNullString, vbNullString, SW_SHOWMINNOACTIVE
End Sub

Sub Öffnen()
ShellExecute 0&, "Open", "c:\Eigene Dateien\Asdf.doc", _
vbNullString, vbNullString, SW_SHOWNORMAL
End Sub

ShellExecute öffnet mit dem Programm, das in der Registy zu dieser
Dateinamenserweiterung eingetragenen wurde.



> Klappt noch nicht. Und diese Geschichte mit COMSPEC - wie binde ich
> das denn in mein Macro mit ein?

Warum dafür der Kommandozeileninterpreter notwendig sein soll,
erschließt sich mir momentan nicht.

Wenn man mit Shell arbeiten will, oder muss, weil man etwa auf das Ende
der gestarteten Anwendung warten möchte, könnte FindExecutable nützlich
sein. Damit wird das mit dieser Dateinamenserweiterung assoziierte
ausführbare Programm ermittelt.

Option Explicit
Private Declare Function FindExecutable _
Lib "shell32.dll" Alias "FindExecutableA" ( _


ByVal lpFile As String, _

ByVal lpDirectory As String, _

ByVal lpResult As String _
) As Long

Private Sub FindExe()
Dim strExe As String
Dim strFile As String

strFile = "C:\test.txt" ' Muss vorhanden sein
strExe = String(260, 32)

FindExecutable strFile, vbNullString, strExe
MsgBox Left(strExe, InStr(strExe, Chr(0)) - 1)

End Sub

MfG
Michael

--
Michael Schwimmer
Home : http://michael-schwimmer.de
Excel VBA ISBN 3-8273-2183-2

Rookie

unread,
Aug 23, 2005, 1:47:20 PM8/23/05
to
Hallo nochmal,

ich hab jetzt nocheinmal ein bischen geschaut. Herausgekommen ist folgendes
Listing:

Sub openpdf()

Dim Ergebnis
Dim pfadpdf
Dim pfadcmd
Dim pfad

pfadpdf = " /c " & ActiveWorkbook.Path & "\kdr_16.pdf"
pfadcmd = Environ("COMSPEC")
pfad = pfadcmd & pfadpdf
msg = MsgBox(pfad)
On Error GoTo fehler
Ergebnis = Shell(pfad, vbMaximizedFocus)
Exit Sub
fehler:
msg = MsgBox("Entweder ist die Datei Hilfedatei nicht im Arbeitsverzeichnis
oder es ist kein Programm installiert, mit dem PDF-Dokumente gelesen werden
können. Bitte benachrichtigen Sie Ihren Administrator")
End Sub

Und es funktioniert NICHT. Ich weiss nicht weshalb...

Bis zur Ermittlung der Variablen 'pfad' ist alles i.O.:

C:\WINDOWS\system32\cmd.exe /c
D:\Arbeit\Reportservice\Produkte\TrägerBasis\KDR\Handbuch\KDR 1.6\kdr_16.pdf

Dann kommt ein kurzes Aufblitzen der CMD.exe und dann nichts. Wenn ich
probiere, über Start Ausführen die o.g. Befehlszeile auszuführen, kommt das
gleiche. Wenn ich über cmd.exe die Anweisung D:\Arbeit ... u.s.w. eingebe,
kommt eine eine Fehlermeldung:

C:\Dokumente und Einstellungen\Nico
Paul>D:\Arbeit\Reportservice\Produkte\TrägerBasis\KDR\Handbuch\KDR
1.6\kdr_16.pdf
Der Befehl "D:\Arbeit\Reportservice\Produkte\TrägerBasis\KDR\Handbuch\KDR"
ist entweder falsch geschrieben oder konnte nicht gefunden werden.
C:\Dokumente und Einstellungen\Nico Paul>

Die gleiche Fehlermeldung kommt, wenn ich vorher ins Wurzelverz. D: wechsele

Hat jemand eine Idee, was falsch läuft? Auch das Abkürzen des Pfads nach DOS
(...Arbeit\Produk~1\...) hab ich schon probiert. Auch nichts...

Vielen Dank, Nico Paul...


Herbert Taferner

unread,
Aug 23, 2005, 1:52:44 PM8/23/05
to
Hallo Rookie,
^^^^^^

D:\Arbeit\Reportservice\Produkte\TrägerBasis\KDR\Handbuch\KDR 1.6\kdr_16.pdf

mit dem Pfad wirst du warscheinlich nicht durchkommen
weil im letzten Verzeichnisname ein Punkt drinn ist
ich kann dir nur aus Erfahrung sagen das das mit Sicherheit Probleme macht

kopiere doch einfach einmal die Datei irgendwo hin z. B. nach C:\Test\
und dann schau das du das zum laufen bringst und erweiterst den Pfad
stückweise

mfg Herbert


Eric March

unread,
Aug 23, 2005, 2:55:12 PM8/23/05
to
Herbert Taferner schrieb:

Wollte ich auch nicht anzweifeln. Wahrscheinlich habe ich nur mal über
den Tellerrand rausgedacht.

--
Eric March - eric.march(spambremse)@gmx.net

Nico Paul www.reportservice.de

unread,
Aug 23, 2005, 3:12:37 PM8/23/05
to
Hallo Werner,

ich hab mal XLS und PDF nach D:\TEMP\ kopiert und siehe da - es
funktioniert.

es funktioniert auch, wenn sich beide Dateien im Verzeichnis:

D:\Arbeit\Reportservice\Produkte\TrägerBasis\KDR\Handbuch\

befinden. Es liegt also tatsächlich am Punkt(.).

Mann oh mann...

Naja, nun hab ich noch das Problem, dass sich das CMD Fenster erst
schliesst, wenn ich die PDF-Datei / die Anwendung Adobe Acrobat schließe und
dass die Fehlermeldung nicht aktiviert wird, wenn die PDF-Datei nicht
vorhanden ist. Hat da noch jemand eine Idee. Bin aber schon mal ein ganzen
Stück weiter... Danke bis hierhin an alle.

Hier nun noch eine Möglichkeit, die Sache über einen (temporären) Hyperlink
zu lösen. Man braucht dafür nur eine ungeschützte Zelle auf irgendeinem
Tabellenblatt:

>Private Sub TemporaererHyperlink_Click()
>
>Dim pfadpdf
>pfadpdf = ActiveWorkbook.Path & "\xy.pdf"
>ActiveSheet.Hyperlinks.Add Anchor:=Range("A10"), Address:=pfadpdf,
>TextToDisplay:=" "
>On Error GoTo fehler
>Hyperlinks(1).Follow NewWindow:=False, AddHistory:=False
>Hyperlinks(1).Delete
>Exit Sub
>fehler:
>Hyperlinks(1).Delete
>msg = MsgBox("Datei nicht im Verzeichnis der Excel-Datei oder PDF-Reader
>nicht installiert. Bitte wenden Sie sich an Ihren Administrator!", vbOKOnly
>+ >vbInformation, "Information zur Aktion")
>
>End Sub

Klappt dann auch mit dem punkt(.) und ohne CMD-Fenster. Ist vielleicht nicht
so kreativ, aber wirksam...

P.S.: Hab meinen Benutzernamen nun auch im OutlookExpressKonto angepasst.

MfG

Nico Paul.


Nico Paul www.reportservice.de

unread,
Aug 23, 2005, 3:22:23 PM8/23/05
to
Entschuldigung, Herbert,

wie komm ich nur auf Werner ??? Werner - Taferner ? Was weiss ich.

Nichts für ungut. Sammle gerade meine ersten Erfahrungen mit NewsForen. Bin
ein bischen aufgeregt und erstaunt, wie gut das hier so funktioniert.

Grosses Lob an alle Aktiven...

MfG

N. Paul.


Herbert Taferner

unread,
Aug 23, 2005, 3:17:27 PM8/23/05
to

Hallo Nico,

> Hallo Werner,
Herbert

> Es liegt also tatsächlich am Punkt(.).
>
> Mann oh mann...

ja das Gefühl kenne ich

> Naja, nun hab ich noch das Problem, dass sich das CMD Fenster erst schliesst,
> wenn ich die PDF-Datei / die Anwendung Adobe Acrobat schließe und dass die
> Fehlermeldung nicht aktiviert wird, wenn die PDF-Datei nicht vorhanden ist.
> Hat da noch jemand eine Idee. Bin aber schon mal ein ganzen Stück weiter...
> Danke bis hierhin an alle.

Bitte gern!

versuche vielleich noch die Variante
mit ShellExecute von Michael

> P.S.: Hab meinen Benutzernamen nun auch im OutlookExpressKonto angepasst.

dies ist hier üblich und wirkt auch freundlicher
das man sich mit dem Namen anspricht

mfg Herbert


Michael Yayannis

unread,
Aug 25, 2005, 6:26:20 AM8/25/05
to
Hallo Nico Paul!

Der Fehlermeldung

>Der Befehl "D:\Arbeit\Reportservice\Produkte\TrägerBasis\KDR\Handbuch\KDR"
>ist entweder falsch geschrieben oder konnte nicht gefunden werden.

nach liegt es am Lerrzeichen und nicht am Punkt!
Wenn du die Anweisung unter Start - Ausführen eingibst, mußt du hier wegen
dem Leerzeichen alles in Anführungszeichen setzen!

Der Pfad


> D:\Arbeit\Reportservice\Produkte\TrägerBasis\KDR\Handbuch\

funktioniert deshalb, da keine Leerzeichen darin sind. Punkte in
Verzeichnisnamen sind kein Problem und funktionieren!

"Nico Paul www.reportservice.de" <ma...@nicopaul.de> schrieb im Newsbeitrag
news:eRCrzaBq...@TK2MSFTNGP09.phx.gbl...

0 new messages