PDF-Datei in ACCESS öffnen

Hallo,

in ACCESS möchte ich PDF-Dateien mittels des PDF-XChange-Viewers (PDFXView.exe) öffnen.
Die Codezeile FollowHyperlink „D:\test.pdf“
benutzt zum öffnen aber stets den Acrobat Reader. Deshalb habe ich versucht, die Standard-Zuweisung gemäß Hilfe (WINDOWS Vista) foldendermaßen zu ändern:

  • Rechsklick auf eine .pdf-Datei
  • Öffnen mit … und dann den PDF-XChange-Viewer gewählt
  • Dateityp immer mit dem ausgewählten Programm öffnen aktiviert.

Bei Doppeklick auf eine .pdf-Datei wird die Datei nun auch mit dem gewünschten Viewer geöffnet, FollowHyperlink in ACCESS startet aber weiterhin den Acrobat-Reader. An welcher Schraube muß ich noch drehen, damit auch ACCESS den gewünschten Viewer startet?

Meine Versuche mit shell scheitern übrigens daran, daß ich zwar die pdfxview.exe starten kann, aber wie übergebe ich hier den Namen der zu öffnenden Datei?

cadder

Hallo,

Bei Doppeklick auf eine .pdf-Datei wird die Datei nun auch mit
dem gewünschten Viewer geöffnet, FollowHyperlink in ACCESS
startet aber weiterhin den Acrobat-Reader. An welcher Schraube
muß ich noch drehen, damit auch ACCESS den gewünschten Viewer
startet?

eine Möglichkeit: den Acrobat Reader deinstallieren

Meine Versuche mit shell scheitern übrigens daran, daß ich
zwar die pdfxview.exe starten kann, aber wie übergebe ich hier
den Namen der zu öffnenden Datei?

dafür gibt es Handbücher http://safemanuals.com/user-guide-instructions-owner…

Grüße aus Rostock
Wolfgang
(Netwolf)

Hallo,

ich empfehle die Shellexecute-Funktion anstelle von Followhyperlink…

siehe Weiteres hier:

http://support.microsoft.com/kb/238245/de

und evtl. die Zuordnung von PDF unter „Windows-Explorer/Extras/Ordneransicht/Dateitypen“ anders festlegen. (So bei WinXP, Bei Vista gibt es möglicherweise kleine Unterschiede im Windows-Explorer)

Viele Grüße vom Bodensee
Franz, DF6GL

und evtl. die Zuordnung von PDF unter
„Windows-Explorer/Extras/Ordneransicht/Dateitypen“ anders
festlegen. (So bei WinXP, Bei Vista gibt es möglicherweise
kleine Unterschiede im Windows-Explorer)

Genau diese Stelle (…Extras/Ordneransicht/Dateitypen) habe ich in Vista nicht finden können und in der Hilfe nur das oben beschriebene Verfahren gefunden. Gibt es in Vistaa noch eine andere (und auch von ACCESS erkennbare) Möglichkeit, den Dateitypen ein Standardprogramm zuzuordnen?

Werde ich mich doch mal mit ShellExecute beschäftigen müssen…

Werde ich mich doch mal mit ShellExecute beschäftigen
müssen…

Nach mehrstündigem Herumexperimentieren muß ich nun doch passen. Es gelingt mir nicht, ACCESS dazu zu bewegen, eine PDF-Datei mittels des PDFXChange-Viewers zu öffnen. Auch in WINDOWS XP, wo man das für einen bestimmten Dateityp zu verwendende Standard-Programm etwas anders festlegt (Extras-Ordneroptionen-Dateityp) funktioniert die neue Zuweisung zwar in WINDOWS, nicht aber innerhalb von ACCESS - der FollowHyperlink benutzt weiterhin stur den AcrobatReader. Daran lag’s also nicht.
Und mit ShellExecute komme ich gar nicht klar. Ich hoffte, damit eine Möglichkeit zu haben, ein Programm zu starten und diesem Programm einen Dateinamen als „Argument“ mitgeben zu können. Das will mir aber gar nicht gelingen. Weder die Online-Hilfe noch die verschiedensten von mir gefundenen Code-Beispiele haben mich wirklich erleuchtet. Kann mir bitte noch mal jemand auf die Sprünge helfen?

Danke
cadder

Hallo,

erleuchten kann man (ich) Dich aber nur, wenn Du genau(!) beschreibst, wo denn die Dunkelheit bei Dir nun herrscht… :wink:))

Viele Grüße vom Bodensee
Franz, DF6GL

erleuchten kann man (ich) Dich aber nur, wenn Du genau(!)
beschreibst, wo denn die Dunkelheit bei Dir nun herrscht…

Für mich stellt sich die Situation folgendermaßen dar:
FollowHyperlink benutzt zum öffnen von .pdf-Dateien den Acrobat-Reader. In WINDOW habe ich nun festgelegt, .pdf-Dateien sollen immer mit dem PDFXChange-Viewer geöffnet werden. Das klappt auch bei Doppelklick auf eine .pdf-Datei, nicht aber bei FollowHyperlink, hier wird von VBA weiterhin der Acrobat-Reader benutzt.
Nun habe ich mal das Verzeichnis, in dem der Acrobat-Reader liegt umbenannt, und - da funktioniert es auch innerhalb von ACCESS. Frage ich mich doch, wo steht, daß FollowHyperlink den Acrobat-Reader nehmen soll und wenn er ihn offenbar nicht mehr findet, dann doch den gewünschten Viewer verwendet? Bißchen unklar.
Nun habe ich es mit ShellExecute versucht. Ohne so richig zu begreifen was ich da eigentlich mache habe ich folgenden Code zusammengebastelt (besser gesagt: aus der Hilfe übernommen und ein kein wenig modifiziert):

Option Compare Database

Declare Function ShellExecute Lib „shell32.dll“ 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

Declare Function apiFindWindow Lib „User32“ Alias „FindWindowA“ _
(ByVal lpclassname As Any, ByVal lpCaption As Any) As Long

Global Const SW_SHOWNORMAL = 1

Sub ShellExecuteExample()
Dim hwnd
Dim StartDoc
hwnd = apiFindWindow(„F:\Programme\Tracker Software\PDF Viewer\PDFXCview.exe“, „0“)

StartDoc = ShellExecute(hwnd, „open“, „C:\test.pdf“, „“, _
„C:“, SW_SHOWNORMAL)
End Sub

Wenn in WINDOW der Acrobat-Reader wieder als Standardprogramm für das öffnen von PDF-Dateien festgelegt ist, benutzt diese Routine - Überraschung - den Acrobat-Reader (!!!). Obwohl doch wohl ausdrücklich geschrieben steht
„hwnd = apiFindWindow(„F:\Programme\Tracker Software\PDF Viewer\PDFXCview.exe“, „0“)“
Das begreife wer will. Oder habe ich da was mißverstanden?
Lege ich nun in WINDOW fest, das Standardprogramm für .pdf-Dateien soll der PDFXChange-Viewer sein, funktioniert es. Ich muß den Acrobat-Reader nicht in einem umbenannten Verzeichnis „verstecken“ wie bei FollowHyperlink. Für mich alles seehr mysteriös.

Nun gut, ich habe nun zwar eine Lösung die funktioniert (eigentlich sogar zwei), allerdings ohne zu begreifen warum (bzw. warum nicht, wenn Acrobat-Reader das StandardProgramm für .pdf-Dateien ist). Und dieser Zustand befriedigt mich keineswegs. Hat jemand (ist aber nun nicht mehr dringend, nur noch persönliches Interesse) vielleicht ein paar aufhellende Erklärungen?

Sorry, ist bißchen lang geworden. aber es wurde ja eine genaue(!) Beschreibung meiner Null-Ahnung angemahnt :wink: (Kann man „NULL“ eigentlich beschreiben?)

Danke
cadder

Hallo,

die Einstellungen des Standardprogramms passieren in der Windows-Registry. Dort ist auch neben der Assoziation mit der Dateiendung auch eine Prioritätsliste vorhanden, die die möglichen zuständigen Programme für die Dateiendung auflistet (OpenWithList). Followhyperlink scheint nun auf den ersten Eintrag in dieser Liste zuzugreifen und dort das Programm auszulesen, mit dem die Datei geöffnet wird, und nicht das definierte (andere) Standardprogramm

Findwindow brauchst Du nicht… Wenn das angegebene Programm nicht schon läuft, liefert FindWindow kein Handle.

Viele Grüße vom Bodensee
Franz, DF6GL

Findwindow brauchst Du nicht… Wenn das angegebene Programm
nicht schon läuft, liefert FindWindow kein Handle.

???
Ich habe die Argumente von
StartDoc = ShellExecute(hwnd, „open“, „C:\test.pdf“,…
so interpretiert:
Benutze das Programm „hwnd“, tu etwas („öffnen“), womit (mit Datei „C:\test.pdf“)

Und vorher wird mit hwnd = apiFindWindow(„F:\Programme\Tracker Software\PDF Viewer\PDFXCview.exe“, „0“)
ein Zeiger auf das gewünschte, das zu benutzende Programm zugewiesen.

Wenn Du nun sagst, FindWindow wäre gar nicht notwendig, habe ich
a) offensichtlich nichts verstanden
b) keine Ahnung, wie der Code nun korrekt aussehen sollte.

Aber ich habe Deine Geduld sicherlich schon zu sehr strapaziert. Ich werde wohl erst mal einen Grundkurs in VBA-Programmierung besuchen müssen.

Freundliche Grüße
(verbunden mit der stillen Hoffnung, daß Du vielleicht doch noch mal …?)

cadder

Hallo,

:wink:

Findwindow FINDET ein Fenster (bzw. liefert dessen Handle), in dem ein laufendes Programm angezeigt wird und demzufolge schon gestartet wurde…

Shellexecute STARTET ein Programm entspr. der angegebenen Parametern.

Bei ShellExecute kann der HWnd-Parameter auch 0 sein, so dass Du gar nicht merkst, dass FindWindow das angegebene Programm gar nicht „gefunden“ hat…

btw: das ist eigentlich kein (reines) VBA, sondern die Win32-API-Schnittstellenprogrammierung.
„Hwnd“ ist auch kein „Programm“, sondern lediglich das Handle (Windows-Kennungnummer, „Zeiger“) eines Fensters, in dem ein Programm läuft. Wenn man diese Kennung kennt, hat man auch Zugriff auf das Programm (aber auch nur über die API-Funktionen)

Viele Grüße vom Bodensee
Franz, DF6GL

Hallo,

danke für Deine Engelsgeduld. Ich werde noch ein wenig damit herumexperimentieren, wenn es die Zeit erlaubt. So wie ich es nun habe funktioniert es erst mal, spätere Verbesserungen kann ich immer noch einarbeiten. Damit will ich Dich/Euch nun nicht länger behelligen.

Schöne (Bald-)Feiertage

cadder