ich habe eine Excel Anwendung in der über ein Makro ein pdf Dokument
geöffnet werden soll.
Ich habe untenstehendes gebastelt, leider funktioniert es aber nicht so wie
es soll.
Wer kann mir einen Tipp geben, warum es nicht geht und mir weiterhelfen?
Eigentlich soll nur die Datei geöffnet werden und der Arobat Reader sollte
sich maximieren, so dass das Dokument sofort gelesen werden kann.
Hier der Code:
Sub Leitbild()
x = "Y:\Dateien\Alle\Leitbild\Test.pdf"
Call DateiOeffnen_PDF(x)
End Sub
Sub DateiOeffnen_PDF(x)
On Error Resume Next
If Dir(x, vbDirectory) = "" Then
MsgBox ("Sie haben keine Zugriffsrechte für diese Berichte.")
Else
ChDrive "y:\"
ChDir x
x = Application.GetOpenFilename
If Dir("C:\Programme\Adobe\Reader", vbDirectory) = "" Then
If Dir("C:\Programme\Adobe\Acrobat 6.0", vbDirectory) = "" Then
Shell "C:\Programme\Adobe\Acrobat 5.0\Reader\Acrord32.exe " & x
Else
Shell "C:\Programme\Adobe\Acrobat 6.0\Reader\Acrord32.exe " & x
End If
Else
Shell "C:\Programme\Adobe\Reader\Acrord32.exe " & x
Application.Dialogs(xlDialogOpen).Show x
End If
End If
End Sub
Danke für Eure Hilfe.
Viele Grüße, Klaus
der Aufruf mit der Shell funktioniert bei mir gut:
'____________________________________________
Sub test()
x = "C:\test.pdf"
dummy = Shell("C:\Programme\Adobe\Acrobat 5.0\Reader\Acrord32.exe " _
& x, vbMaximizedFocus)
End Sub
'____________________________________________
Was genau funktioniert denn nicht bei dir?
Für den Pfad der AcrobatReaders verwende diese Funktion:
'____________________________________________
Function getPath(basePath As String, myFileName As String) As String
'12-2005
'E.Bimczok
Set fs = Application.FileSearch
With fs
.LookIn = basePath
.fileName = myFileName
.SearchSubFolders = True
If .Execute > 0 Then
Set a = .FoundFiles
If a.Count > 0 Then
getPath = a.Item(1)
Else
getPath = ""
End If
End If
End With
End Function
'____________________________________________
Sub testfunc()
a = getPath("C:\Programme\Adobe", "Acrord32.exe")
End Sub
'____________________________________________
Gruß
Eike
Klaus Fierenz schrieb:
Bisher hat sich die Datei nicht geöffnet, sondern es kam die Meldung, dass
ich keine Zugriffsrechte
auf die Datei hätte. Was ich aber habe.
Außerdem wurde der Acrobat Reader nie maximiert, sondern er blieb immer
klein in der Taskleiste
und mußte erst von dort maximiert werden.
Klaus
"Klaus Fierenz" schrieb:
> ich habe eine Excel Anwendung in der über ein Makro ein pdf Dokument
> geöffnet werden soll.
du kannst die API ShellExecute verwenden. Damit wird eine Datei mit dem
verknüpften Programm gestartet. Das heißt, wenn Dateien mit der Endung
.pdf mit dem Acrobat-Reader verknüpft sind, werden diese mit dem
Programm geöffnet oder auch gedruckt, je nach dem, welche Möglichkeiten
als Verben in der Registry hinterlegt sind.
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", "Y:\Dateien\Alle\Leitbild\Test.pdf" , _
vbNullString, vbNullString, SW_SHOWNORMAL
End Sub
MfG
Michael
--
Michael Schwimmer http://michael-schwimmer.de
Excel VBA ISBN 3-8273-2183-2
Excel Programmierung - Das Handbuch ISBN 3-8606-3548-4
danke für die Hilfe.
Also das Acrobat Fenster wird jetzt auf jeden Fall mal maximiert.
Aber was mir immer noch nicht gelingt ist, dass die Datei direkt geöffnet
wird.
Bei dem zweiten Vorschlag in der Gruppe geht es zwar, aber dort findet keine
Abfrage statt, dass immer die neueste Acrobat Reader Version geöffnet wird.
Habt ihr noch Ideen?
Danke.
Klaus
"Klaus Fierenz" schrieb:
> Also das Acrobat Fenster wird jetzt auf jeden Fall mal maximiert.
> Aber was mir immer noch nicht gelingt ist, dass die Datei direkt
> geöffnet wird.
ich habe das eben bei mir probiert, die PDF-Datei wird sofort mit dem
Acrobat-Reader geöffnet. Wenn ein Doppelklick auf die Datei klappt,
sollte auch ShellExecute funzen.
Hast du vielleicht Leerzeichen im Pfad, dann setze den doch mal zwischen
zwei Anführungszeichen, obwohl das bei mir auch ohne funzt.
ShellExecute 0&,"Open","""C:\Pfad X\LM386.pdf""", _
vbNullString, vbNullString, SW_SHOWNORMAL
MfG
"Klaus Fierenz" schrieb:
> Also das Acrobat Fenster wird jetzt auf jeden Fall mal maximiert.
> Aber was mir immer noch nicht gelingt ist, dass die Datei direkt
> geöffnet wird.
du könntest mal nachschauen, was in der Registry unter
HKEY_CLASSES_ROOT\AcroExch.Document\shell\open\command
eingetragen ist.
Bei mir steht der Pfad und dahinter
"C:\Programme\Adobe\Acrobat 5.0\Reader\AcroRd32.exe" "%1"
Wichtig ist hier "%1"
Zu finden auch im Explorer unter Extras/Ordneroptionen/Dateitypen
"Bearbeiten" anklicken, "Open" markieren und "Bearbeiten".
> Bei dem zweiten Vorschlag in der Gruppe geht es zwar, aber dort
> findet keine Abfrage statt, dass immer die neueste Acrobat Reader
> Version geöffnet wird.
Da würde ich aber auch nicht immer das Dateisystem nach der Exe von
Acrobat durchsuchen.
Private Declare Function FindExecutable _
Lib "shell32.dll" Alias "FindExecutableA" ( _
ByVal lpFile As String, _
ByVal lpDirectory As String, _
ByVal lpResult As String _
) As Long
Private Const MAX_PATH = 260
Private Const ERROR_FILE_NOT_FOUND = 2&
Private Const ERROR_PATH_NOT_FOUND = 3&
Private Const ERROR_BAD_FORMAT = 11&
Public Function GetExe(strPath As String) As String
Dim strBuffer As String
strBuffer = String(MAX_PATH, 0)
Select Case FindExecutable(strPath, vbNullString, strBuffer)
Case 0
' MsgBox "The system is out of memory or resources)"
Case 31
' MsgBox "There is no association for the specified file type"
Case ERROR_FILE_NOT_FOUND
' MsgBox "The specified file was not found"
Case ERROR_PATH_NOT_FOUND
' MsgBox "The specified path was not found"
Case ERROR_BAD_FORMAT
' MsgBox "The .exe file is invalid"
Case Else
GetExe = Left(strBuffer, InStr(1, strBuffer, Chr(0)) - 1)
End Select
End Function
Wenn du die Fehlerbehandlung weglässt, wird die Funktion noch etwas
kürzer (aber nicht schneller)
Um die Nachfragen zu beseitigen, müsste man wissen, was für
Befehlszeilenparameter Acrobat akzeptiert und die entsprechenden bei
Shell und Shellexecute mitsenden.