ich möchte gerne PDF-Dateien, welche in einem festgelegten Verzeichnis
gespeichert sind, über ein Access-Formular anzeigen lassen. Hat hier jemand
Erfahrungen mit dieser Thematik? Es ist mir im Prinzip egal, ob die
PDF-Anzeige im Formular "eingebettet" ist (wäre mir zwar am liebsten), oder
ob ich die Dateien nur anklicken brauche und sie werden dann im Acrobat
Reader als eigenes Fenster angezeigt.
Würde mich über Ratschläge freuen!
Viele Grüße
Markus
Markus Misiak wrote:
> ich möchte gerne PDF-Dateien, welche in einem festgelegten Verzeichnis
> gespeichert sind, über ein Access-Formular anzeigen lassen. Hat hier
> jemand Erfahrungen mit dieser Thematik? Es ist mir im Prinzip egal,
> ob die PDF-Anzeige im Formular "eingebettet" ist (wäre mir zwar am
> liebsten), oder ob ich die Dateien nur anklicken brauche und sie
> werden dann im Acrobat Reader als eigenes Fenster angezeigt.
Application.FollowHyperlink PfadUndNameDerPdfDatei
Gruß
Und falls dich die dann in Access und z.T. auch im PDF-Reader
auftauchenden Web-Symbolleisten stören, verwende ShellExecute:
http://www.mvps.org/access/api/api0018.htm
--
HTH
Karl
********* Ich beantworte keine Access-Fragen per Email. *********
Access-FAQ: http://www.donkarl.com
Datenbank-Profis: http://www.dbdev.org
Schöner wäre es für mich, wenn das pdf-Dokument im Formular "eingebettet"
wäre. Ich habe hierfür mal ein Adobe Acrobat Control for ActiveX Object
eingefügt, aber irgendwie komme ich damit nicht klar. Soweit ich
herausbekommen habe, kann man diesem Objekt mit der .scr Eigenschaft die
Datei angeben. Irgendwie funktioniert das aber nicht. :-(
Hat jemand Erfahrungen mit diesem Weg und kann mir mal den Code hier
einstellen?
Viele Grüße
Markus
"Karl Donaubauer" <NoS...@donkarl.com> schrieb im Newsbeitrag
news:3vt1p6F...@individual.net...
> Schöner wäre es für mich, wenn das pdf-Dokument im Formular "eingebettet"
> wäre. Ich habe hierfür mal ein Adobe Acrobat Control for ActiveX Object
> eingefügt, aber irgendwie komme ich damit nicht klar. Soweit ich
> herausbekommen habe, kann man diesem Objekt mit der .scr Eigenschaft die
> Datei angeben. Irgendwie funktioniert das aber nicht. :-(
Nee, das geht eigentlich einfach per DeinObject.Loadfile "DeineDatei".
Wenn ich mich richtig entsinne, gab es hier aber vor ein paar Monaten
allerdings einen Thread, in dem es um die Schwierigkeiten mit der neuesten
Acrobat-Version ging, die auch das OCX btrifft. Kriege den Zusammenhang
nicht mehr ganz auf die Reihe, entweder fehlte das Ding oder die Datei
wurde nicht geladen. Bei Adobe gabs dazu, glaube ich, auch eine Anmerkung.
Hab den Thread jetzt so spontan leider nicht mehr gefunden. Vielleicht
entsinnt sich ja noch jemand besser daran.
Viele Grüße
Jörg Ostendorp
Jörg Ostendorp <Vorname...@gmx.de> schrieb:
ich glaube, da kann ich helfen....
Schau mal auf meiner HP unter Access / Tipps und Tricks. Dort findet sich
ein Artikel mit dem Namen "Access und Adobe Reader 7".
Der genannte Thread findet sich hier:
http://groups.google.de/group/microsoft.public.de.access/browse_thread/thread/5f127e664cc78aa4/0633e72e067cd4cc?lnk=st&q=Access+adobe+group%3Amicrosoft.public.de.access+author%3AThomas+author%3AM%C3%B6ller&rnum=3&hl=de#0633e72e067cd4cc
HTH
--
Thomas
Homepage: www.Team-Moeller.de
TM-DateiFunktionen: Update auf Version 1.2 (seit 08.11.05)
Funktion "GetSpecialFolder" hinzugefügt.
>>> Schöner wäre es für mich, wenn das pdf-Dokument im Formular
>>> "eingebettet" wäre. Ich habe hierfür mal ein Adobe Acrobat Control
>>> for ActiveX Object eingefügt, aber irgendwie komme ich damit nicht
>>> klar. Soweit ich herausbekommen habe, kann man diesem Objekt mit der
>>> .scr Eigenschaft die Datei angeben. Irgendwie funktioniert das aber
>>> nicht. :-(
>> Nee, das geht eigentlich einfach per DeinObject.Loadfile "DeineDatei".
>>
>> Wenn ich mich richtig entsinne, gab es hier aber vor ein paar Monaten
>> allerdings einen Thread, in dem es um die Schwierigkeiten mit der
>> neuesten Acrobat-Version ging, die auch das OCX btrifft. Kriege den
>> Zusammenhang nicht mehr ganz auf die Reihe, entweder fehlte das Ding
>> oder die Datei wurde nicht geladen. Bei Adobe gabs dazu, glaube ich,
>> auch eine Anmerkung. Hab den Thread jetzt so spontan leider nicht
>> mehr gefunden. Vielleicht entsinnt sich ja noch jemand besser daran.
> ich glaube, da kann ich helfen....
>
> Schau mal auf meiner HP unter Access / Tipps und Tricks. Dort findet sich
> ein Artikel mit dem Namen "Access und Adobe Reader 7".
habe gerade Deinen Artikel gelesen und mal ein klein wenig rumprobiert.
Evtl. könnte man als Alternative zum OCX auch einfach das Adobe
Applikationsfenster per SetParent in ein Formular einfügen. Scheint bei mir
problemlos zu funktionieren. Noch ein wenig am Style rumbasteln und das
ganze sieht auch optisch ganz ok aus.
> Der genannte Thread findet sich hier:
> http://groups.google.de/group/microsoft.public.de.access/browse_thread/thread/5f127e664cc78aa4/0633e72e067cd4cc?lnk=st&q=Access+adobe+group%3Amicrosoft.public.de.access+author%3AThomas+author%3AM%C3%B6ller&rnum=3&hl=de#0633e72e067cd4cc
Ja, genau den meinte ich, hatte nur in den Artikeln der letzten sechs
Monate gesucht. Hach, wie die Zeit vergeht.. ;-)
Viele Grüße
Jörg Ostendorp
Jörg Ostendorp <Vorname...@gmx.de> schrieb:
>> [Probleme mit Adobe OCX]
> habe gerade Deinen Artikel gelesen und mal ein klein wenig
> rumprobiert. Evtl. könnte man als Alternative zum OCX auch einfach
> das Adobe Applikationsfenster per SetParent in ein Formular einfügen.
> Scheint bei mir problemlos zu funktionieren. Noch ein wenig am Style
> rumbasteln und das ganze sieht auch optisch ganz ok aus.
das klingt interessant. Allein ich verstehe noch nicht ganz genau, wie Du
das realisierst. Kannst Du das bitte noch etwas ausführlicher beschreiben -
oder hast Du gar ein Beispiel?
TIA
>>> [Probleme mit Adobe OCX]
>> habe gerade Deinen Artikel gelesen und mal ein klein wenig
>> rumprobiert. Evtl. könnte man als Alternative zum OCX auch einfach
>> das Adobe Applikationsfenster per SetParent in ein Formular einfügen.
>> Scheint bei mir problemlos zu funktionieren. Noch ein wenig am Style
>> rumbasteln und das ganze sieht auch optisch ganz ok aus.
>
> das klingt interessant. Allein ich verstehe noch nicht ganz genau, wie Du
> das realisierst. Kannst Du das bitte noch etwas ausführlicher beschreiben -
> oder hast Du gar ein Beispiel?
hier mal ein kleines Beispiel, wie ich mir das ungefähr dachte.
Problematisch ist bei mir, daß extern geöffnete pdfs nun im Formular
angezeigt werden, dh. man müßte noch entweder für mehrere Adobe-Instanzen
sorgen oder das Fenster rechtzeitig wieder freigeben. Am Style kann man
natürlich auch noch ein wenig rumspielen z.B. mit einem Access-Rahmen statt
des WS-DLGFRAMEs. (Und wenn mans ordentlich machen will, gehört das Fenster
natürlich in den Detailbereich, nicht direkt aufs Formular..)
Aber wie gesagt, ist ja nur ein erster Test.
Viele Grüße
Jörg Ostendorp
'--------------------------------------------------------------------------
'Code ins Formular
Option Compare Database
Option Explicit
Private Declare Function FindWindow _
Lib "user32.dll" _
Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String _
) As Long
Private Declare Function FindWindowEx _
Lib "user32.dll" _
Alias "FindWindowExA" ( _
ByVal hWnd1 As Long, _
ByVal hWnd2 As Long, _
ByVal lpsz1 As String, _
ByVal lpsz2 As String _
) As Long
Private Declare Function GetClassName _
Lib "user32.dll" _
Alias "GetClassNameA" ( _
ByVal hwnd As Long, _
ByVal lpClassName As String, _
ByVal nMaxCount As Long _
) As Long
Private Declare Function GetWindow _
Lib "user32.dll" ( _
ByVal hwnd As Long, _
ByVal wCmd As Long _
) As Long
Private Declare Function SendMessage _
Lib "user32.dll" _
Alias "SendMessageA" ( _
ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Any _
) As Long
Private Declare Function SetParent _
Lib "user32.dll" ( _
ByVal hWndChild As Long, _
ByVal hWndNewParent As Long _
) As Long
Private Declare Function SetWindowLong _
Lib "user32.dll" _
Alias "SetWindowLongA" ( _
ByVal hwnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long _
) As Long
Private Declare Function SetWindowPos _
Lib "user32.dll" ( _
ByVal hwnd As Long, _
ByVal hWndInsertAfter As Long, _
ByVal x As Long, _
ByVal y As Long, _
ByVal cx As Long, _
ByVal cy As Long, _
ByVal wFlags As Long _
) As Long
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 Long _
) As Long
Private Declare Function ShowWindow _
Lib "user32.dll" ( _
ByVal hwnd As Long, _
ByVal nCmdShow As Long _
) As Long
Private Const GW_CHILD = 5
Private Const GW_HWNDNEXT = 2
Private Const GWL_STYLE As Long = -16
Private Const SW_MAXIMIZE As Long = 3
Private Const SWP_SHOWWINDOW As Long = &H40
Private Const WM_CLOSE As Long = &H10
Private Const WS_CHILD As Long = &H40000000
Private Const WS_CLIPSIBLINGS As Long = &H4000000
Private Const WS_DLGFRAME As Long = &H400000
Private Const WS_OVERLAPPED As Long = &H0&
Private Const WS_VISIBLE As Long = &H10000000
Dim hApp As Long 'Applikationsfenster
Dim hMDI As Long ' mdi-fenster
Dim hW As Long ' Datei-Fenster
'Aufruf per Button
Private Sub Command0_Click()
ShowPDF "MeinPfad mit abschließendem \", "Meine Datei"
End Sub
Private Sub ShowPDF(strPath As String, strFile As String)
Dim strCaption As String
Dim i As Long
ShellExecute Me.hwnd, "open", strPath & strFile, _
vbNullString, vbNullString, 0
'Warten bis handle erstellt ist, hier mal provisorisch per
'doevents
For i = 1 To 2000
DoEvents
Next i
hApp = FindWindow(vbNullString, "Acrobat Reader")
strCaption = strFile
'Nix gefunden weil Dateifenster maximiert ist (=andere Caption)
If hApp = 0 Then
strCaption = "Acrobat Reader - [" & strFile & "]"
hApp = FindWindow(vbNullString, strCaption)
End If
If hApp <> 0 Then
'Das Dateifenster soll maximiert angezeigt werden, daher
'muß erstmal dessen Handle ermittelt werden
'Handle MDI-Fenster
hMDI = GetMDI(hApp)
'Handle Dateifenster
hW = FindWindowEx(hMDI, ByVal 0&, vbNullString, strFile)
'Applikationsfenster einfangen
SetParent hApp, Me.hwnd
'Style verändern
SetWindowLong hApp, GWL_STYLE, WS_VISIBLE Or _
WS_CHILD Or _
WS_CLIPSIBLINGS Or _
WS_OVERLAPPED Or _
WS_DLGFRAME
'Positionieren/Style aktivieren
SetWindowPos hApp, 0, 100, 50, 500, 400, SWP_SHOWWINDOW
'Dateifenster maximieren
ShowWindow hW, SW_MAXIMIZE
'Das automatische Neuzeichnen der Toolbars klappt nicht so
'recht, daher hier mal ohne weiteren Aufstand:
Application.Echo False
DoCmd.Minimize
DoCmd.Restore
Application.Echo True
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
'Acrobat wieder freigeben
SetParent hApp, 0
'und Fenster schließen
SendMessage hApp, WM_CLOSE, 0, 0
End Sub
Private Function GetMDI(hwnd As Long) As Long
Dim chwnd As Long
chwnd = GetWindow(hwnd, GW_CHILD)
Do
If fGetClassName(chwnd) = "MDIClient" Then
GetMDI = chwnd
Exit Function
End If
chwnd = GetWindow(chwnd, GW_HWNDNEXT)
Loop While chwnd <> 0
GetMDI = 0
End Function
Private Function fGetClassName(hwnd As Long)
Dim strBuffer As String
Dim lngLen As Long
Const MAX_LEN = 255
strBuffer = Space$(MAX_LEN)
lngLen = GetClassName(hwnd, strBuffer, MAX_LEN)
If lngLen > 0 Then fGetClassName = Left$(strBuffer, lngLen)
End Function
Jörg Ostendorp <Vorname...@gmx.de> schrieb:
>>>> [Probleme mit Adobe OCX]
>>> habe gerade Deinen Artikel gelesen und mal ein klein wenig
>>> rumprobiert. Evtl. könnte man als Alternative zum OCX auch einfach
>>> das Adobe Applikationsfenster per SetParent in ein Formular
>>> einfügen. Scheint bei mir problemlos zu funktionieren. Noch ein
>>> wenig am Style rumbasteln und das ganze sieht auch optisch ganz ok
>>> aus.
>>
>> das klingt interessant. Allein ich verstehe noch nicht ganz genau,
>> wie Du das realisierst. Kannst Du das bitte noch etwas ausführlicher
>> beschreiben - oder hast Du gar ein Beispiel?
>
> hier mal ein kleines Beispiel, wie ich mir das ungefähr dachte.
> Problematisch ist bei mir, daß extern geöffnete pdfs nun im Formular
> angezeigt werden, dh. man müßte noch entweder für mehrere
> Adobe-Instanzen sorgen oder das Fenster rechtzeitig wieder freigeben.
> Am Style kann man natürlich auch noch ein wenig rumspielen z.B. mit
> einem Access-Rahmen statt des WS-DLGFRAMEs. (Und wenn mans ordentlich
> machen will, gehört das Fenster natürlich in den Detailbereich, nicht
> direkt aufs Formular..)
vielen, vielen Dank für dieses Beispiel.
Ich habe mir den Code gesichert. Wenn ich das Projekt wieder in den Fingern
habe werde ich mir die Sache genauer anschauen.
THX
vielen Dank für Deine Hilfe.
">
> Nee, das geht eigentlich einfach per DeinObject.Loadfile "DeineDatei".
Ich glaube ich stelle mich einfach zu dumm an. Ich habe den Arcrobat Reader
7.05 installiert und habe in einem Formular das ActiveX-Steuerelement "Adobe
Acrobat 7.0 Browser Document" eingebunden. Irgendwie krieg ich den VBA-Code
nicht hin um per Button ein bestehendes PDF-File anzeigen zu lassen. Könnte
mir hier jemand unter die Arme greifen bzw. gibt es eigentlich eine
"aussagekräftige" Beschreibung für die PDFLib?
Viele Grüße
Markus
>> Nee, das geht eigentlich einfach per DeinObject.Loadfile "DeineDatei".
>
> Ich glaube ich stelle mich einfach zu dumm an. Ich habe den Arcrobat Reader
> 7.05 installiert und habe in einem Formular das ActiveX-Steuerelement "Adobe
> Acrobat 7.0 Browser Document" eingebunden. Irgendwie krieg ich den VBA-Code
> nicht hin um per Button ein bestehendes PDF-File anzeigen zu lassen. Könnte
> mir hier jemand unter die Arme greifen bzw. gibt es eigentlich eine
> "aussagekräftige" Beschreibung für die PDFLib?
Private Withevents objPDF as AcroPDF
Private Sub DeinButton_Click()
Set objPDF = Me!DeinPDFControl.Object 'bzw. im Form_Load
objPDF.LoadFile "DeineDatei.pdf"
End Sub
Hinsichtlich der Beschreibung für die PDFLib ist mir nichts bekannt, würde
mir einfach mal die Metoden im Objektexplorer anschauen, die meisten sind
ja recht aussagekräftig benamst. Ansonsten schau mal direkt auf der
Adobe-Seite, denke schon, daß es da irgendetwas gibt.
Du solltest Dir aber auch unbedingt den Artikel von Thomas durchlesen!
Viele Grüße
Jörg Ostendorp
Private Sub ShowPDF(strPath As String, strFile As String)
...
If hApp <> 0 Then
lStyle = GetWindowLong(hApp, GWL_STYLE)
....
end sub
Private Sub Form_Unload(Cancel As Integer)
SetParent hApp, 0
'Style zurücksetzen
SetWindowLong hApp, GWL_STYLE, lStyle
SendMessage hApp, WM_CLOSE, 0, 0
End Sub
(Ist sowieso besser, falls die Sendmessage fehlschlägt. Dann kann der
Nutzer das zumindest noch von Hand schließen).
Viele Grüße
Jörg Ostendorp
"Markus Misiak" <markus...@mpf-ag.de> schrieb im Newsbeitrag
news:dnjj9q$6uf$1...@online.de...
ich habe es so gelöst:
stAppName = LesePfad & " " & VarLese & Me!DateiName
'Anmerkung "C:\Programme\Adobe\Acrobat 7.0\Reader\AcroRd32.exe"
"C:\PDFDatei\Sicherung\novell.pdf"
Call Shell(stAppName, 3)
mit dem Parameter /t wird der ausdruck sofort gestartet.
Gruß
Christian