PDF-basierte Hilfe

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Zu vielen Access-Anwendungen gibt es Beschreibungen und Dokumentationen, eine integrierte Online-Hilfe jedoch nur selten. Warum funktionieren Sie nicht die schon vorhandene Programmbeschreibung zum Hilfetext um Diesen Hilfetext lassen Sie sich dann kontextsensitiv anzeigen. Wie Sie diese Idee mit einem PDF-Dokument umsetzen, zeigt dieser Beitrag.

Wenn Sie eine PDF-basierte Hilfe umsetzen wollen, sollten Sie sich mit folgenden Fragen beschäftigen:

  • Wie öffnen Sie ein PDF-Dokument per VBA
  • Wie erreichen Sie, dass ein PDF-Dokument nach dem öffnen eine bestimmte Seite anzeigt
  • Wie stellen Sie eine Verknüpfung zwischen dem Hilfethema und der Seitenzahl im PDF-Dokument her
  • Wie sieht die Funktion zum Aufruf Ihrer Hilfe aus

Ein PDF-Dokument öffnen

Als Erstes ist die Frage zu klären, wie Sie ein PDF-Dokument öffnen. Bei der Suche nach einer Lösung stoßen Sie ganz schnell auf die Funktion FollowHyperlink. Mit dieser Funktion können Sie auf einfache Art ein PDF-Dokument öffnen:

Dim strPfad As String
Dim strDok As String
strPfad = CurrentProject.Path
strDok = strPfad & "\" & "Hilfe.pdf"
Application.FollowHyperlink strDok

Der Vorteil dieser Funktion liegt in ihrer Einfachheit. Darin besteht aber auch gleichzeitig ihr Nachteil. Sie haben keine Kontrolle über die Ausführung der Funktion oder die Anwendung, die das Dokument öffnen soll. Sie können nur den Pfad zum Dokument übergeben. Die Angabe weiterer Parameter, die im Folgenden benötigt werden, ist nicht möglich. Wozu Sie diese weiteren Parameter brauchen, erfahren Sie später im Text.

Eine andere Funktion, die Ihnen hilft, ein PDF-Dokument anzuzeigen, finden Sie unter den API-Funktionen. Es ist die Funktion ShellExecute [1].

Mit dieser Funktion starten Sie jede beliebige externe Anwendung. Außerdem können Sie beliebige Dokumente mit dem dafür vorgesehenen Programm öffnen oder drucken. Damit Sie die Funktion ShellExecute verwenden können, müssen Sie diese zuerst in einem Modulkopf deklarieren:

Private 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 SW_Show) As Long

Tab. 1 gibt einen überblick über die verwendeten Parameter und ihre Bedeutung.

Parameter

Erläuterung

hWnd

Verweis auf das Fenster des startenden Programms.

lpOperation

Welche Aktion soll ausgeführt werden Mögliche Werte sind etwa “open”, “print” oder “edit”.

lpFile

Welche Datei soll geöffnet werden

lpParameters

Wenn in lpFile der Pfad zu einer Anwendung angegeben ist, können hiermit Parameter an das Programm übergeben werden.

lpDirectory

Arbeitsverzeichnis des Programms.

nShowCmd

Konstante, die angibt, wie das Programm angezeigt werden soll. 1 bedeutet “normal”, also sichtbar.

Tab. 1: Parameter für die Funktion ShellExecute

Für den Parameter nShowCmd ist eine Vielzahl von Werten möglich. Bei Interesse können Sie diese in der Beispieldatenbank nachlesen.

Der Aufruf der Funktion erfolgt ähnlich einfach wie bei FollowHyperlink:

Dim strPfad As String
Dim strDok As String
strPfad = CurrentProject.Path
strDok = strPfad & "\" & "Hilfe.pdf"
ShellExecute Me.hwnd, "Open", _
 strDok, vbNullString, "C:\", _
 SW_SHOWNORMAL

Mit Hilfe dieser Funktion sind Sie in der Lage, ein beliebiges PDF-Dokument mit dem Adobe Reader aus einem Formular heraus zu öffnen. Leider können Sie auf diesem Weg nur das Dokument als Ganzes öffnen. Dabei wird Ihnen immer die erste Seite des Dokuments angezeigt.

Ein PDF-Dokument an einer bestimmten Stelle öffnen

Seit der Version 6 des Adobe Readers ist es möglich, einem PDF-Dokument beim öffnen einen oder mehrere Parameter zu übergeben. Mit Hilfe dieser Parameter lässt sich unter anderem steuern, welche Seite nach dem öffnen angezeigt werden soll. Die Dokumentation dieser Parameter finden Sie auf den Webseiten der Firma Adobe [2], [3] und [4]. Die Dokumentationen und damit auch die Parameter unterscheiden sich teilweise voneinander. Die in diesem Beitrags verwendeten Parameter funktionieren aber unverändert mit allen Versionen seit Adobe Reader 6.

Was bewirken diese Parameter nun In der Dokumentation von Adobe finden Sie folgende Erläuterung:

<path to Acrobat> 
/A "<open parameter>=OpenActions"
"<path to PDF file>"

Dazu gibt es folgendes konkretes Beispiel:

Acrobat.exe 
/A "zoom=1000=OpenActions"
"C:\example.pdf"

Damit Sie einen Open-Parameter verwenden können, benötigen Sie folgende drei Informationen:

  • den Pfad zu Acrobat.exe
  • den Open-Parameter selber
  • den Pfad und den Namen des PDF-Dokuments

Wie passen diese Informationen nun zur Funktion ShellExecute Sie übergeben der Funktion ShellExecute den Pfad zu AcroRd32.exe (Reader) oder Acrobat.exe (Acrobat Vollversion) als Parameter lpFile. Für den Parameter lpParameters übergeben Sie den Text für den Open-Parameter und den Pfad zum PDF-Dokument.

Als Open-Parameter verwenden Sie den Wert page. Damit können Sie angeben, welche Seite nach dem öffnen des PDF-Dokuments angezeigt werden soll. Der komplette Text für den Open-Parameter sieht so aus:

/A "page=3=OpenActions" 

In diesem Beispiel wird nach dem öffnen die dritte Seite des PDF-Dokuments angezeigt:

Dim strExe As String
Dim strPfad As String
Dim strDok As String
Dim lngSeite As Long
strPfad = CurrentProject.Path
strDok = strPfad & "\" & "Hilfe.pdf"
strExe = GibExe(strDok)
lngSeite = Me!cboSeite
ShellExecute Me.hwnd, "Open", _
   strExe, " /A ""page=" & _
   lngSeite & "=OpenActions"" """ & _
   strDok & """", CurrentProject.Path, SW_SHOWNORMAL

Ein Problem gibt es mit der bisher beschriebenen Lösung noch – der Pfad zu Acrobat.exe. Sie können den Pfad für Ihr System ermitteln und in den VBA-Code einfügen. Wenn Sie aber die nächste Version des Adobe Readers installieren, wird der Pfad nicht mehr stimmen und Sie müssen Ihren Code anpassen.

Noch viel problematischer wird es, wenn Sie Ihre Datenbank an Dritte weitergeben. Dann haben Sie keine Kontrolle mehr darüber, wo der Adobe Reader installiert wurde.

Auch dieses Problem können Sie mit einer API-Funktion lösen. Die Funktion heißt FindExecutable [5]. Dieser Funktion übergeben Sie den Pfad zu einem Dokument. Als Ergebnis erhalten Sie den Namen und den Pfad der mit dieser Datei verknüpften Anwendung.

Eine Funktion, der Sie einen Dateinamen übergeben und als Ergebnis den Pfad zur verknüpften Exe-Datei erhalten, finden Sie in folgendem Listing:

Private Function GibExe(strFile As String) _
As String 'Variablen deklarieren Dim intI As Integer Dim strBuffer As String 'Buffer füllen strBuffer = String(MAX_FILENAME_LEN, 32) 'Exe-Datei zum übergebenen Dokument ermitteln intI = FindExecutable(strFile, vbNullString, _
strBuffer) If intI > 32 Then GibExe = Left$(strBuffer, InStr(strBuffer, _
Chr$(0)) - 1) Else MsgBox "Keine verknüpfte Anwendung gefunden" End If End Function

Vom Hilfethema zur Seitenzahl

Sie sind jetzt in der Lage, ein PDF-Dokument zu öffnen und eine beliebige Seite anzeigen zu lassen. Was jetzt noch fehlt, ist die Verknüpfung zwischen dem anzuzeigenden Hilfethema und der entsprechenden Seite im PDF-Dokument.

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar