Wie kann man eine Word-Datei im Bericht anzeigen zu lassen? Also beispielsweise eine zweiseitige?
Carl
Hallo,
wozu, weshalb, wofür?
http://www.access-o-mania.de/forum/index.php?topic=16222.msg134288#msg134288
okay, vielen Dank.
Hätte das einen Vorteil gegenüber einem OLE-Objekt, ohne den framer? Ich meine, weil es ja wirklich nur angezeigt werden soll. Ich hab mir überlegt, die erste Seite reicht auch aus.
Man könnte sich Word-Dokumente ja auch durchaus in Word anzeigen lassen - oder spricht etwas dagegen?
Oder nochmal so: Ich habe in einem Bericht ein ungebundenes OLE-Objekt und möchte darin die Datei anzeigen, auf die das Feld [Pfad] aus der Abfrage verweist.
im Eigenschaftsblatt kann man aber keine Quellen zum Herkunftsdokument als Felder eintragen
Herkunftsdokument: [abfrage].[Pfad]
geht nicht.
Was muss man tun?
Carl
Zitat von: Lachtaube am Dezember 17, 2017, 17:25:00
Man könnte sich Word-Dokumente ja auch durchaus in Word anzeigen lassen - oder spricht etwas dagegen?
Das soll nicht sein, weil die Anwender sonst durcheinander kommen mit anderen offenen Word-Dateien, die ähnlich aussehen. Es geht immer um Berichte über Patienten und da soll man nicht aus Versehen was in den falschen File reinschreiben können.
Carl
Hallo,
ist der Bericht für's Ausdrucken gedacht oder wird er in der Berichtsansicht geöffnet?
Handelt es sich (nur) um Doc(x)-Dateien oder sind das evtl. PDF-Dateien?
Ansonsten hast Du den Link nicht genau genug gelesen.
ZitatWas muss man tun?
das DSOFramer-OCX verwenden!
Vielen Dank für Deine Antwort.
Ich kann in der betreffenden Umgebung die DSOFramer_moss.ocx nicht registrieren und muss eine andere Lösung suchen.
Mit den folgenden Anforderungen:
* Bericht oder Formular
* es geht ausschließlich um word.docx-Dokumente
* die erste Seite reicht
* es soll nichts editiert werden
* nur anzeigen
* es soll nicht druckbar sein (das drucken soll über einen Button erfolgen, der die Originaldatei druckt)
Der Link zur Datei wird in einer Abfrage berechnet und befindet sich im Feld [Pfad_zur_datei]
Carl
Hallo,
Du musst das OCX richtig registrieren:
Führe die Eingabeaufforderung (CMD) als Administrator aus.
Gebe folgenden Befehl ein:
C:\Windows\Syswow64\Regsvr32 C:\DeinVerzeichnis\DSOFramer_moss.ocx
"DeinVerzeichnis" ist der Ordner, in dem sich die ocx-Datei befindet.
Siehe Anhang.
... und das Original gibt's noch unter: https://github.com/shines77/DsoFramer
PS: das Control wäre dann im Formular zu verwenden, wozu es auch gedacht ist.
Genauso gut könnte man auch im Formular einem ungebundenen Objektrahmen ein Word-Dokument unterjubeln - in einem Bericht dürfte das außerhalb des Entwurfsmodus nicht möglich sein.
Einige Abseitsüberlegungen, die aber Einfluss auf die Gesamtumsetzung der Aufgabe mit entsprecheenden Strukturen und Maßnamen erfordern.
- In eine Datei schaut man oft hinein, um sich den Inhalt grob zu erschließen. Verwendet man einen sprechenden Namen für die Datei, kann sich die explizite Anzeige erübrigen.
- Wenn die Dateien nicht nur durch die DB-Anwendung verwaltet, sondern z.B. auch erzeugt werden, würde man folgerichtig deren Daten in der Datenbank vorhalten und dort mit den üblichen Mitteln anzeigen können.
Ich habe keine Adminrechte und es geht hier in Access nur, was an Bordmitteln verfügbar ist.
Zitat von: Lachtaube am Dezember 20, 2017, 09:44:19
Genauso gut könnte man auch im Formular einem ungebundenen Objektrahmen ein Word-Dokument unterjubeln - in einem Bericht dürfte das außerhalb des Entwurfsmodus nicht möglich sein.
Könntest Du bitte mal sagen, wie ich in einem ungebundenen Objektrahmen in einem Formular ein Dokument anzeigen lasse, dessen Pfad im Feld [PfadzurDatei] liegt?
Carl
Hallo,
ZitatIch habe keine Adminrechte
Du sollst ja das auch nur
als Admin ausführen.
Tippe im Cortana-Suchfeld "cmd" ein, wobei danach "Eingabeaufforderung" erscheint. Darauf Rechtsklick und auf "Als Administrator ausführen" klicken.
In einem Formular sollte das in etwa so möglich sein.Private Sub ShowDocxAsLink(DeinPadZumDocx As String)
With Me.DeinUngebundenerOLERahmen
' ggf. aktivieren
.Enabled = True
' ggf. entsperren
.Locked = False
.OLETypeAllowed = acOLELinked
' OLE server angeben
.Class = "Word.Document"
' Dateipfad angeben
.SourceDoc = DeinPadZumDocx
' Objekt erstellen
.Action = acOLECreateLink
'sperren
.Locked = True
'deaktivieren
.Enabled = False
End With
End Sub
I habs noch nicht hin gekriegt.
Also beispielsweise:
Mein ungebundenes Objektfeld heißt "OLEInstruktionsdatei" und das Feld, das den Pfad enthält, heißt [PfadInstruktion]
Wenn ich das in die VBA-Seite kopiere, tut sich ganrichts, nicht mal ne Fehlermeldung. Was habe ich falsch gemacht?
Private Sub ShowDocxAsLink(PfadInstruktion As String)
With Me.OLEInstruktionsdatei
' ggf. aktivieren
.Enabled = True
' ggf. entsperren
.Locked = False
.OLETypeAllowed = acOLELinked
' OLE server angeben
.Class = "Word.Document"
' Dateipfad angeben
.SourceDoc = [PfadInstruktion]
' Objekt erstellen
.Action = acOLECreateLink
'sperren
.Locked = True
'deaktivieren
.Enabled = False
End With
End Sub
Und: kann man nicht einfach das Feld in der Option "Herkunftsdokument" im Eigenschaftsblatt angeben, wie in beiliegenden Bild?
vielen Dank für die Antwort
Carl
Es steht Dir frei ein Zip-Archiv mit einigen wenigen Worddokumenten und einer BeispielDB mit entsprechendem Formular hochzuladen - aus dem Bild-Anhang kann ich jedoch keine Lösung ableiten geschweige denn feststellen, wo der Hund begraben liegt.
Ich versuche Deinen VBA zu verstehen und sehe gerade, dass es ohnehin nicht ginge, weil sich beispielsweise OLE server verändern könnten. Ich kann hier nur so programmieren, dass es keinen größeren Wartungsaufwand erzeugt und auch keine anderen Rechte gebraucht werden, wenn Links nicht mehr gehen. Wahrscheinlich muss ich ne andere Architektur nehmen.
Ich habe aber nochmal eine konkretere Frage:
Schau bitte nochmal genau auf das Bild. Kann man an die Stelle mit dem roten Pfeil nicht statt eines konkreten Links auf ein Dokument ein Feld eintragen, aus dem der Link für das anzuzeigende Dokument entnommen wird? Das wäre doch ne gute Lösung.
Carl
AFAIK geht das nicht. Andererseits verstehe ich nicht, warum mein Code nicht zum Erfolg führt. :-\
Hallo,
im Formular funktioniert die Anzeige mit der oben beschriebenen Methode einwandfrei. :)
Allerdings habe ich im Internet bislang keine Möglichkeit gefunden, ein ungebundenes OLE-Feld im Report anzuzeigen. :(
Eine "gute" Zusammenfassung liefert:
https://www.experts-exchange.com/questions/23377679/How-to-Change-SourceDoc-for-Unbound-Object-Control-in-MS-Access-2003-Report.html
"> I thought that it was best practice to avoid OLE fields in tables
Absolutely! OLE is a terrible technology when applied to databases. I certainly hope that you maintain your file paths externally, and only create the OLE fields on the fly (in a temporary table?) when needed for reporting."
Dort wird ein Verfahren vorgeschlagen, ein gebundenes OLE-Feld zu verwenden, dass z.B. im Formular via
Private Sub Form_Current()
Me.Feld_ole.SourceDoc = Me.Feld1
Me.Feld_ole.Action = acOLECreateEmbed
End Sub
gefüllt wird, um es dann im Bericht einfach ohne jeglichen VBA-Anteil zu verwenden.
Das wird allerdings dazu führen, dass die Datenbank sich aufblähen wird. :'(
Da auch ich an diesem Thema interessiert bin, bin ich für jeden Vorschlag dankbar, wie ole in den Griff zu bekommen ist.
Harald
Lachtaube, kannst Du bitte nochmal schauen auf Post #14? Ist da alles richtig eingetragen? [PfadInstruktion] ist mein Feld mit dem Link.
Wo muss man denn den code einfügen, unter "beim Laden"?
Was bedeutet ShowDocxAsLink? Ist das ein von Dir selbst vergebener Name?
Carl
Einem Programmierer ist es freigestellt, eigene Methoden zu erstellen (ich hätte mir z. Bsp. auch den deutchen Namen ZeigeDokumentAlsVerknuepfung einfallen lassen können, oder die Methode gleichwertig HauMichBlau taufen können) - nur wenn man diese Methode(n) dann nirgendwo aufruft, passiert erwartmäßig natürlich auch nichts.
Ohne Grundlagenkenntnisse zu VBA kommen dann Fragen wie Was bedeutet XYZ auf. Ich empfehle Dir deshalb, entweder Literatur anzuschaffen oder zumindest ein Tutorium wie z. Bsp. Das Programmieren mit der Programmiersprache VBA (VBA-Kurs) – Die absoluten Grundlagen (http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/vba-kurs) (davon lassen sich mehrere gleichwertige im WWW finden) durchzuarbeiten.
Unabhängig davon kann man in der Access OL-Hilfe nachlesen, welche Ereignisse wann ausgelöst werden. Das Beim Laden Ereignis eines Formulars wäre recht statisch, weil es halt eben nur einmal beim Laden des Formulars eintritt.