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.
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
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
> 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
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.
"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]
"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
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...
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
Wollte ich auch nicht anzweifeln. Wahrscheinlich habe ich nur mal über
den Tellerrand rausgedacht.
--
Eric March - eric.march(spambremse)@gmx.net
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.
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.
> 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
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...