Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Standardspeicherort für RTF Berichte

Begonnen von Dorian-1965, Dezember 25, 2020, 12:51:52

⏪ vorheriges - nächstes ⏩

Dorian-1965

Zitat von: DF6GL am Januar 12, 2021, 20:36:46Du könntest in der Db mittels Button ("btnWeitermachen") und Word-Automation auf die aktuelle Word-Instanz "aufschalten" und mit SaveAs das Word-Doc sichern, wenn gewünscht, oder ansonsten verwerfen und Word  mit Quit schließen

Genau das ist mein Ziel. Ich habe es mit
ActiveDocument.Close wdDoNotSaveChangesversucht, geht nicht. Dann mit
objWord.Quit
geht aber auch nicht ...

DF6GL

Hallo,

solche Codefragment bringen uns nicht weiter....


Zeige bitte die kompletten Prozeduren , die den Bericht exportieren und Word schließen sollen.


Dorian-1965

ActiveDocument.Close wdDoNotSaveChanges
objWord.Quit
DoCmd.OpenReport "Bericht_12", acViewPreview, , "ID = " & Me!ID
DoCmd.OutputTo acOutputReport, , acFormatRTF, "C:\Users\Dorian\Dokumente\Bericht.rtf",True
DoCmd.Close acReport, "Bericht_12"


Dorian-1965

Zitat von: DF6GL am Januar 14, 2021, 11:28:54eigentlich sagte ich KOMPLETT  ::)

 :-[  ... Das war komplett, ich sagte ja ich bräuchte Hilfe ...

und Word-Automation auf die aktuelle Word-Instanz "aufschalten" und mit SaveAs das Word-Doc sichern, wenn gewünscht, oder ansonsten verwerfen und Word  mit Quit schliessen.
ich habe es schon gelesen, aber das übersteigt leider meine Fähigkeiten ...

Dorian

DF6GL

Hallo,

naja, wenn diese paar Codezeilen komplett sind, dann fliegt Dir die DB um die Ohren...



Lad mal die Db hier hoch, komprimiert/repariert, kompiliert und gezippt...Sonst kommen wir nicht weiter.



Dorian-1965

Die DB ist viel zu umfangreich um sie hier hochzuladen...

Ich habe es nun so versucht. Geht leider auch nicht (Zuerst Word schließen):

Dim strRptName as String
strRptName= "Bericht_12"
DoCmd.Close strRptName
DoCmd.OpenReport strRptName, acViewPreview, , "ID = " & Me!ID
DoCmd.OutputTo acOutputReport, , acFormatRTF, "C:\Users\Dorian\Dokumente\" & strRptName,True
DoCmd.Close acReport


Ich möchte einfach:

1. Die mit Word geöffnete Datei "Bericht_12" schließen, falls sie noch geöffnet ist.
2. Den Bericht "Bericht_12" öffnen
3. Den Bericht als RTF Datei nach Word exportieren.

... und zwar genau in dieser Reihenfolge.

Ich möchte den Bericht & Export nach Word mehrfach nacheinander ausführen mit jeweils anderen Daten. Daher muss Word vor jedem neuen Bericht und Export immer zuerst geschlossen werden.

Ich hoffe nun ist klar, wann Access "Word" beenden soll und was ich überhaupt bezwecken möchte.

Dorian

PhilS

Zitat von: Dorian-1965 am Januar 22, 2021, 15:35:26Ich habe es nun so versucht. Geht leider auch nicht (Zuerst Word schließen):
"Geht leider nicht" ist als Problembeschreibung etwas dünn.

Ich sehe in deinem Code nichts, was mit dem "Word schließen"-Thema zu tun hat.
Falls dir dazu der Ansatz fehlt google mal nach Word Automation Getobject
Wenn du mit den gefunden Lösungsansätzen nicht weiter kommst, dann helfen wir dir hier gern weiter. - Bitte immer eine aussagefähige Problembeschreibung mitliefern. ;-)
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Dorian-1965

OK, ich bin immer noch nicht weiter...

Dieser Code funktioniert so wie ich es möchte:

Private Sub Befehl770_Click()
Dim strRptName As String
strRptName = "Bericht_1"
If IsNull(Me!MediaInfos) Then
DoCmd.OpenReport "Bericht_1", acViewPreview, , "ID = " & Me!ID
DoCmd.OutputTo acOutputReport, , acFormatRTF, "C:\Users\***\AppData\Local\Temp\Bericht_1.rtf", True
DoCmd.Close acReport, strRptName
Else
        MsgBox "Es sind Media Infos vorhanden!", vbInformation, ""
End If
End Sub

Es wird ein Bericht erstellt und mit Word geöffnet. Der Bericht wird wieder geschlossen und das Word Dokument bleibt geöffnet. Der Name des Word Dokuments ist "Bericht_1".
Klappt alles wunderbar.

Jetzt möchte ich ein anderen Datensatz aufrufen und damit auch den Bericht_1 erstellen.
Hier erscheint aber der Fehler, weil der Bericht_1 ist ja noch in Word geöffnet. Ich muß also
Nach Word wechseln und den geöffneten Bericht schließen. Dann wieder zu Access und den Bericht_1 erneut aufrufen.

Hier möchte ich gerne den o.a. Code erweitern. Access soll prüfen ob der Bericht_1 schon geöffnet ist und falls ja, das geöffnete Word Dokument Bericht_1 schließen und dann erst soll der o.a. Code ausgeführt werden.

Es ist vieleicht einfach nach Word zu wechseln und den Bericht selbst zu schließen. Aber wenn man häufig mit anderen Daten den Bericht erstellt wäre es schon eine enorme Erleichterung...

Ich habe es schon selbst versucht und auch Google bemüht, aber leider habe ich es nicht hinbekommen.

PhilS

Zitat von: Dorian-1965 am August 18, 2021, 15:10:12Jetzt möchte ich ein anderen Datensatz aufrufen und damit auch den Bericht_1 erstellen.
Hier erscheint aber der Fehler, weil der Bericht_1 ist ja noch in Word geöffnet.
Muss denn immer "Bericht_1" als Dateiname verwendet werden? Wäre es nicht sowieso schon sinnvoller, dort ein eindeutiges Merkmal aus dem Datensatz (ID, KDNR, Kundenname etc.) zu verwenden, um dem Benutzer auch den Zusammenhang zum jeweiligen Datensatz schon anhand des Dateinamens deutlicher zu machen? Das Problem mit der geöffneten Datei wäre dann automatisch nebenbei gelöst.

Zitat von: Dorian-1965 am August 18, 2021, 15:10:12Ich habe es schon selbst versucht und auch Google bemüht, aber leider habe ich es nicht hinbekommen.
Wie schon mehrfach angemerkt, wäre es hilfreich, wenn du kurz beschreiben würdest, was du versucht hast und warum es nicht funktioniert hat. Das macht es viel einfacher darauf basierend Alternativen oder Lösungen vorzuschlagen.

Wenn die o.a. Lösung mit eindeutigen Dateinamen aus Gründen nicht möglich ist, würde ich versuchen per VBA eine evtl. laufende Word-Instanz zu holen (Stichwort: GetObject) und sofern darin die betreffende Datei geöffnet ist, diese schließen.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Dorian-1965

Bericht_1 macht schon Sinn weil es sehr viele Berichte gibt.
Ich habe dafür eine separate Übersicht.
Verschiedene Berichte zu öffnen ist ja auch kein Problem.
Nur manchmal muss ich den selben Bericht mit anderen Daten mehrfach nach Word exportieren, dann wäre es hilfreich
mir von Access helfen zu lassen.

Mein letzter Versuch war:

Private Sub Befehl770_Click()
Dim objWord As Word.Application
Dim objDocument As Word.Document
AppActivate objDocument.Bericht_1
objWord.Quit
Set objWord = Nothing
Dim strRptName As String
strRptName = "Bericht_1"
If IsNull(Me!MediaInfos) Then
DoCmd.OpenReport "Bericht_1", acViewPreview, , "ID = " & Me!ID
DoCmd.OutputTo acOutputReport, , acFormatRTF, "C:\Users\Wchb\AppData\Local\Temp\Bericht_1.rtf", True
DoCmd.Close acReport, strRptName
Else
        MsgBox "Es sind Media Infos vorhanden!", vbInformation, ""
End If
End Sub

Quelle war: https://access-im-unternehmen.de/Word_automatisieren/

Fehler beim kompilieren. Benutzer defenierter Typ nicht definiert.

DF6GL

#41
Hallo,

der Code

Dim objWord As Word.Application
Dim objDocument As Word.Document
AppActivate objDocument.Bericht_1
objWord.Quit
Set objWord = Nothing

ist für sich gesehen nonsens an dieser Stelle.


Es nützt nichts, Codefragmente einfach aus einem anderen Kontext heraus und ohne Anpassungen zu kopieren...


Der Rest des Code erzeugt ein RTF-Dokument, das dann anschließend mit Word geöffnet wird  (..,True)




Mit separater Word-Automation könnte die RTF-Datei ebenfalls geöffnet werden:
(Verweis auf MS Word Object-Library setzen!):


Dim objWord As Word.Application
Dim objDocument As Word.Document
Set objWord = New Word.Application
Set objDocument = objWord.Documents.Open ("C:\Users\Wchb\AppData\Local\Temp\Bericht_1.rtf")
objWord.Visible = True
AppActivate objDocument.Name


Set objWord = Nothing
.
.
.

Dorian-1965

Zitat von: DF6GL am August 19, 2021, 19:30:20Der Rest des Code erzeugt ein RTF-Dokument, das dann anschließend mit Word geöffnet wird  (..,True)

Ja, klappt auch wunderbar. Nur wie kann ich dieses Dokument wieder schließen?

DF6GL

Hallo,

indem Du auf die Word-Instanz zugreifst (GetObject) und die SaveAs-Methode von Word benutzt

oder im aktuell geöffneten Word auf "Datei/schließen"  klickst.


Allerdings verstehe ich diese ganze Vorgehensweise nicht.  Warum öffnest Du überhaupt die generierte RTF-Datei, um sie anschließend gleich wieder zu schließen?

Zudem ist mir völlig unklar, warum es immer derselbe Dateiname sein muss, obwohl sich der Inhalt des Berichtes (Bericht_1) jedes Mal (vermutlich) ändert.


Entweder Du erklärst einmal schlüssig dieses Konzept oder Du überdenkst es nochmal intensiv.

PhilS

Zitat von: Dorian-1965 am August 19, 2021, 12:38:16Bericht_1 macht schon Sinn weil es sehr viele Berichte gibt.

Aha?
Warum macht da "Bericht_1" mehr Sinn, als "Bericht_1_Kunde_47110815_Max_Mustermann"?

Zitat von: Dorian-1965 am August 19, 2021, 12:38:16Quelle war: https://access-im-unternehmen.de/Word_automatisieren/

Die Quelle ist sehr gut, wenn man ein wenig weiter liest. ;-)

    Dim wordDoc As Object
    Set wordDoc = GetObject("C:\pfad\zu\deinem\Report1.rtf")
    wordDoc.Close False
   
    Set wordDoc = Nothing
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor