PDA

Vollständige Version anzeigen : Bericht mit Pfad-gespeichertem Word-Dokument


Hausdrache
07.08.2004, 11:36
In einer Tabelle habe ich den Speicherort der relevanten Word-Dokumente hinterlegt.

Dok_ID // Dok_Titel // Dok_Pfad
------------------------------------------
1 // BWS-Befund // C:\TestDB\Dokumente\BWS_Befund.doc
2 // LWS-Befund // C:\TestDB\Dokumente\LWS_Befund.doc
........

Nun möchte ich mehrere Berichte anlegen und zwar so, dass ich im Vorschau-Modus die Berichte ansehen kann, allerdings ohne das ich dafür das Word-Programm öffnen muss. Wie kann ich da vorgehen. Über Tips, ZIPs oder Links würde ich mich wie immer freuen.

Der Hausdrachen

--> Windows ME, Access 2000

jmc
07.08.2004, 13:06
Hi Hausdrachen

...Berichte anlegen und zwar so, dass ich im Vorschau-Modus die Berichte ansehen kann, allerdings ohne das ich dafür das Word-Programm öffnen muss...
Nicht klar, was du da willst - Berichte hat ja mit Word noch nichts zu tun - oder meinst du, dass du die referenzierten Word-Dokumente anzeigen kannst - oder wie ist das genau zu verstehen ?

Hausdrache
07.08.2004, 20:09
Hallo jmc,

es geht mir eigentlich nur darum, aus einer DB heraus Dokumente (in diesem Fall Befundbögen) ausdrucken zu lassen.

Es gibt also keine Daten, aus welchen ein Bericht generiert werden soll. Natürlich könnte ich die Befundbögen auch einfach mit Word öffnen, Drucken und Word wieder schliessen. Doch dazu muß erst das Verzeichnis gesucht werden, wo die Bögen gespeichert sind, dann muß der Druckerdialog aufgerufen werden. Doch auch heute ist nicht jeder Mensch mit dem PC vertraut und läßt dann lieber "die Finger" davon.

Meine Idee ist die, dass ich ein Formular habe mit entsprechenden Button, mit welchen ich den Vorgang starten kann. So in der Form : Klick --> Befundbogen wird in der Vorschauansicht geöffnet --> ein vereinfachter Druckdialog öffnet sich (Anzahl der Kopien, evt. Druckerauswahl, Drucken, Abbrechen), Befundbogen schließt sich, wenn Druck abgeschlossen. Fertig.

Ich hoffe, dass die Sache jetzt etwas klarer ist.

Der Hausdrachen

Nouba
07.08.2004, 20:49
Dazu sollte die hier im Forum vielfach genannte ShellExecute Methode auch zum Drucken geeignet sein.

Hausdrache
07.08.2004, 22:04
Hallo Nouba,

Danke für den Tip. Wenn man weiss, wonach man suchen soll, siehst gleich etwas besser aus. Nun werde ich die Sachen mal ausprobieren.

Der Hausdrachen

Hausdrache
08.08.2004, 13:00
Hallo Forum, insbesondere Nouba,

habe die Sache mit "ShellExecute" ausprobiert und bin auch zu einem lauffähigen Ergebnis gekommen. Aber, und jetzt kommt der Haken, nur dann, wenn ich Sache von einem Formular aus über einen Button aufrufe. Doch eigentlich soll die Sache über einen Button in einer selbst definierten Commandbar laufen.
Dim cbr As CommandBar

Dim Menu1 As CommandBarControl
Dim UMenu11 As CommandBarControl

Dim UMenu11Btn01 As CommandBarButton


' ----------------------------------------------------------------------
' wird benötigt für den Aufruf von MS Word, um Dokumente zu drucken
' welche per Pfad in tbl_Formulare_Befunde hinterlegt sind

Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal Hwnd As Long, ByVal Ipoperation As String, _
ByVal Ipfile As String, ByVal Ipparameters As String, ByVal Ipdirectory As String, ByVal nshowcmd As Long) As Long


'-------------------------------------------------------------
' erstellt Menueleiste "Standart"

Function cbrStandartEinblenden()

Set cbr = CommandBars.Add("Standart", msoBarTop, True, True)
CommandBars("Standart").Visible = True

Set Menu1 = CommandBars("Standart").Controls.Add(msoControlPopup)
With Menu1
.BeginGroup = True
.Caption = "Standart - Vordrucke"
.TooltipText = "Diverse Vordrucke"
End With

Set UMenu11 = Menu1.Controls.Add(msoControlPopup)
With UMenu11
.Caption = "Befunde"
End With
Set UMenu11Btn01 = UMenu11.Controls.Add(msoControlButton)
With UMenu11Btn01
.Caption = DLookup("Befund_Name", "tbl_Formulare_Befunde", "Befund_Nummer=1")
.OnAction = "Formular01Druck" 'Funktion definieren
End With
'______________________________________________________
'die Funktion "Formular01Druck" habe ich im gleichen Modul hinterlegt:

Function Formular01Druck()

On Error Resume Next
Dim doopenfile As Long, openfilevar As String

openfilevar = DLookup("Befund_Pfad", "tbl_Formulare_Befunde", "Befund_Nummer=1")
doopenfile = ShellExecute(Me.Hwnd, vbNullString, openfilevar, vbNullString, vbNullString, 1)

End Function


"Klicke" ich nun auf den entsprechenden Button, kommt folgende Fehlermeldung:
"Fehler beim Kompilieren, unzulässige Verwendung des Schlüsselworts Me."



Wie komme ich da weiter?

der Hausdrachen



AD: Code-Tags korrigiert. S. dazu auch Darstellung von Code-Abschnitten (http://www.ms-office-forum.net/forum/showthread.php?s=&threadid=102899#usec).

jmc
08.08.2004, 14:34
Hi Hausdrache

"Me" geht nur in einem Formular und zeigt auf sich selbst, deshalb heisst es ja auch "Me" ... !

Wenn du das in einer Menuleiste generell halten willst, dann musst du zuerst feststellen, welches Formular gerade das aktive ist und ob es überhaupt das ist, welches in diesem Zusammenhang Sinn macht.

Welches Formular gerade das aktive ist, kannst du mit

Screen.ActiveForm.Name

ermitteln. Ich frage mich allerdings, ob eine Menubar das geschickteste ist, wenn du doch explizit in einem Formular den Namen für das Dokument hast ...
Du selbst hast ja geschrieben
Meine Idee ist die, dass ich ein Formular habe mit entsprechenden Button ...

Hausdrache
08.08.2004, 17:50
Hallo Jean,

das mit dem Formular war "nur" meine Grundlage, um mich dem Problem überhaupt zu nähern.

Mein Projekt ist so ausgelegt, dass die DB startet und gleich die eigene Menüleiste per VBA (siehe mein letzter Beitrag) erstellt und angezeigt wird. Was dann an Formularen etc. angezeigt wird, spielt beim Ausdruck der Befund-Bögen keine Rolle.

Das heißt, der Benutzer kann unabhängig davon, was er gerade macht oder welches Form er gerade geöffnet hat, auf der Menüleiste den Punkt "Standart-Vorlagen" und dort den Ordner "Befunde" anklicken und den Befund-Bogen"BWS-Befund" ausdrucken. Ich hoffe, dass ich nun etwas deutlicher erklärt habe.

Evt. fällt Dir/Euch dazu etwas ein.

der Hausdrache

jmc
08.08.2004, 21:37
Hi Hausdrache

ja gut - aber auf was soll sich dann "ME" beziehen ???

Hausdrache
09.08.2004, 07:47
Hallo Jean,

das ist eine gute Frage. Meine Hoffnung bestand/besteht ja darin, dass Ihr mir weiterhelfen könnt.

Die Sache läuft über ShellExecute und im Code dafür steht nun mal "(Me.Hwnd, VBNullstring etc.). Ich denke, dass sich "me" auf das Formular bezieht, aus welcher die Funktion/das Ereignis aufgerufen wird.
Nur geschieht das nun aus der Commandbar heraus. Der Funktionsaufruf muss also entsprechend angepasst werden. Und da weiss ich nicht weiter.

der Hausdrache

jmc
09.08.2004, 08:16
Hi Drache

also ohne gross zu hinterfragen und noch weniger getestet zu haben, versuchs mal - anstelle von Me.Hwnd - so:

Application.hWndAccessApp

Hausdrache
09.08.2004, 08:36
Hallo Jean,

ich habe Deinen Tip gleich mal ausprobiert und siehe da, es funktioniert einwandfrei (ich weiss zwar nicht wie bzw. warum - was manchmal Schade ist, schliesslich will man ja auch lernen dabei ;-) aber was soll´s)

Anbei noch der veränderte Code für die Funktion:

Function Formular01Druck()
On Error Resume Next
Dim doopenfile As Long, openfilevar As String

openfilevar = DLookup("Befund_Pfad", "tbl_Formulare_Befunde", "Befund_Nummer=1")
doopenfile = ShellExecute(Application.hWndAccessApp, vbNullString, openfilevar, vbNullString, vbNullString, 1)

Hausdrache
09.08.2004, 08:38
Hallo Jean,

ich habe Deinen Tip gleich mal ausprobiert und siehe da, es funktioniert einwandfrei (ich weiss zwar nicht wie bzw. warum - was manchmal Schade ist, schliesslich will man ja auch lernen dabei ;-) aber was soll´s)

Anbei noch der veränderte Code für die Funktion:

Function Formular01Druck()
On Error Resume Next
Dim doopenfile As Long, openfilevar As String

openfilevar = DLookup("Befund_Pfad", "tbl_Formulare_Befunde", "Befund_Nummer=1")
doopenfile = ShellExecute(Application.hWndAccessApp, vbNullString, openfilevar, vbNullString, vbNullString, 1)

End Function


Vielen Dank und bis zum nächsten Problem
der Hausdrachen