Januar 20, 2022, 03:31:02

Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!


Speichern eines Serienbriefpfads mit vordefiniertem Titel in eine AccessTabelle.

Begonnen von derArb, September 05, 2021, 11:41:34

⏪ vorheriges - nächstes ⏩

derArb

September 05, 2021, 11:41:34 Letzte Bearbeitung: September 05, 2021, 12:00:38 von derArb Grund: kleine Edits
Fortsetzung von https://www.access-o-mania.de/forum/index.php?topic=25710.0

Hallo,
ich möchte einen Word-Serienbrief als doc File abspeichern.
Gleichzeitig möchte ich in Access den Pfad dieses doc Files in einer Tabelle abspeichern.
Ich hab dazu 2 Versionen erstellt, welche beide meinem Wunsch nicht entsprechen,
den doc Filenamen im Vorhinein festlegen zu können.
Im Anhang liegt eine Accessversion inkl. 2 Wordvorlagen zum testen.

Version1 erstellt eine Inputbox, deren Ergebnis aber nicht wirklich als doc Serienbrief abgespeichert wird,
wodurch beim Aufruf wieder nach einer Datenquelle gefragt wird.

Version2 öffnet einen Filedialog, in welchem der Dateiname des dot Files als default angeboten wird.
Ich kann den Namen ändern und als doc File abspeichern. Allerdings fehlt mir die Möglichkeit, diesen
Namen mir per VBA "greifen" zu können, um ihn in einer Tabelle abspeichern zu können.

Am liebsten wäre mir die Möglichkeit, über eine Inputbox den neuen doc Filenamen definieren zu können,
der dann, ohne einen FileDialog bemühen zu müssen, als Pfad in einer Tabelle gespeichert wird.

Die Ereigniscodes sind:
In UFO_Kunden
Private Sub btnSerienbrief_Click()
...
End Sub

In modSerienbrief
Public Sub WordMailMerge()
...
End Sub

DF6GL

Hallo der Arb,


so genau versteh ich es nicht genau...


Geht es nur um das Abspeichern des manuell definierten Namens in einer Tabelle oder um das Eingeben des Dateinamens über eine Inputbox?

Oder um Beides?

Warum soll der Filedialog nicht verwendet werden?


Anbei eine Umsetzung mit Inputbox und Speicherung des definierten Dateinamens in Tabelle tbl_KundenSerienbrief.SBrief  .


Zudem würde ich auf Formularverweise in Public-Subs/Functions verzichten und die Werte per Argument übergeben.

Weiterhin:  Die Template-Dateien nur während der "Entwicklung" als Serienbrief (wegen des Einfügens der Mailmerge-Felder) definieren, später aber auf "normalen Brief" zurückstellen.

derArb

vielen Dank DF6GL,
ich werd mal zeitnah versuchen, mich etwas genauer zu formulieren.
Im Endeffekt denke ich dabei darüber nach, wie man Deinen Vorschlag (siehe vorausgehender Thread-Link) der nachträglichen Bearbeitungsmöglichkeit so realisieren kann, dass man eine erstellte und schon als *.doc File
abgespeicherte Version verändern kann und dann inkl. Änderungsdatum in einer Tabelle dokumentierend übertragen kann.
Das Einfachste wäre, dass man einen Zugriff auf den FileDialog und dem dort verwendeten default - oder veränderten
Filenamen haben könnte

Ziemlich wirr, denke ich mal und werde in mich gehen und ......sorry, Deine Zeit unnötig belastet zu haben.
Deinen Vorschlag werde ich natürlich intensiv durchwälzen. Das vorgeschlagene Ergebnis ist allerdings auch
nicht geeignet, um nachträgliche Änderungen festhalten zu können.

DF6GL

Hallo,


irgendwie verwirrst Du mich....

Wenn ich Deine Beiträge in anderen Foren lese, kann ich diese Frage :

Zitatdass man eine erstellte und schon als *.doc File
abgespeicherte Version verändern kann und dann inkl. Änderungsdatum in einer Tabelle dokumentierend übertragen kann.


nicht verstehen..

Du nutzt doch mit der MAilMerge-Funktion schon Word-Automation,  also öffne  die gespeicherte Doc-Datei in Word, editiere sie und speichere  mittels einer Aktualisierungs-Abfrage (Update...)  das aktuelle Datum beim Datensatz des betreffenden Doc-Dateinamens ab.


Diese Methode  registriert nur das Datum der letzten Änderung.  Wenn eine Änderungs-Historie erwünscht wird,  muss eine weitere Tabelle herhalten, die für jede Änderung das aktuelle Datum erfasst (Insert...)


ZitatDas Einfachste wäre, dass man einen Zugriff auf den FileDialog und dem dort verwendeten default - oder veränderten
Filenamen haben könnte

Und warum machst Du das nicht?

Nutze einen API-Filedilog oder den Application.Filedialog wähle oder bestimme vor dem Öffnen von Word  einen Dateinamen, und lege den in einer Variablen ab, die als Parameter an die entspr. Word-Automatisierungs-Funktion übergeben wird.

derArb

Hallo,
...Nutze einen API-Filedilog oder den Application.Filedialog wähle oder bestimme vor dem Öffnen von Word  einen Dateinamen, und lege den in einer Variablen ab, [color=red]die als Parameter an die entspr. Word-Automatisierungs-Funktion übergeben wird[/color]....Genau danach suche ich und weiss nicht, wie es programmiertechnisch erreichbar ist.
Meine Version2 öffnet einen Filedialog mit einem default doc Namen, den ich dann verändern kann und
dann auch das gewünschte doc File inkl. der übernommenen Daten abspeichern kann.
Genau diesen default Namen will ich vorher bestimmen können über z.B. eine vorher erstellte globale Variable,
welche im FileDialog der WordMerge landet .( Meine Version1 inkl. Inputbox macht es falsch).
Die globale Variable kann ich im Vorfeld dann so gestalten, dass sie z.B. ein Datum/Uhrzeit enthält, welches
dann natürlich im doc Filetitel erscheint. Natürlich ist es mir klar, dass für eine Historie eine weitere
Tabelle notwendig (***) sein wird. Das wird kein Problem für mich sein.

Wenn nun die WordMailmerge FileDialog Funktion alles so macht, wie ich es mir wünsche, könnte man doch darüber nachdenken, sich das Ganze mit dieser FileDialog Funktion zu sparen und das doc File mit dem vorbestimmten globalen Wert gleich direkt zu speichern.

Hoffentlich hast Du noch etwas Geduld.







DF6GL

Hallo,

ZitatGenau danach suche ich und weiss nicht, wie es programmiertechnisch erreichbar ist.



es gibt doch massenweise Beispiele im Netz, sogar von MS:

https://docs.microsoft.com/de-de/office/vba/api/access.application.filedialog

Und vergiss grundsätzlich den Word-Filedialog...



ZitatWenn nun die WordMailmerge FileDialog Funktion alles so macht, wie ich es mir wünsche, könnte man doch darüber nachdenken, sich das Ganze mit dieser FileDialog Funktion zu sparen und das doc File mit dem vorbestimmten globalen Wert gleich direkt zu speichern.


?? ??
warum willst Du den "WordMailmerge FileDialog" (der mit Mailmerge nichts zu tun hat und lediglich einen an Word-Logik angepasster normaler File-Dialog ist) überhaupt erst zum "Laufen" zu bringen und ihn anschließend wieder wegzuwerfen?


Meine gepostete Version fragt doch den gewünschten Dateinamen ab (Inputbox)und speichert den erzeugten Serienbrief ab, ohne einen Filedialog zu bemühen.

Wenn Du einen Filedialog zur Auswahl oder Eingabe eines Dateinamen wünscht, so ersetzte die Inputbox  durch einen Code wie oben mit dem Link gezeigt.

Zitatglobale Variable

vermeide globale Variablen soweit es geht und nutze Parameter zur Übergabe an die Argumente von Funktionen/Subs

derArb

Hallo,

ich versuche es nun mal vom Ergebnis her.
@DFGL:

Dein Zitat:
Zitat...Meine gepostete Version fragt doch den gewünschten Dateinamen ab (Inputbox)und speichert den erzeugten Serienbrief ab, ohne einen Filedialog zu bemühen....
Deine Version führt zu folgendem irritierendem Ergebnis, wenn ich das, über Deine Inputbox mit beliebig erzeugbarem Namen, gespeicherte doc Wordfile starte.
siehe das Beispiel im Anhang: Geburtstagsgruß_Inputbox_DFGL.doc
Es ist letztendlich nur eine leere Hülle, welche unsinnig ist, abzuspeichern. Das entspricht auch fast identisch meiner Version1 (mit Inputbox).
Wie ich damit z.B. nachträgliche Änderungen, so wie Du es vorgeschlagen hast, erzeugen und inkl. aller sonstigen vorhanden gespeicherten Werte
individuell nacheditieren will, steh ich doch
Meine gesendete DB mit aktivierter Version2 ergibt mein gewünschtes Ergebnis, welches jeden Brief inkl. der Daten in einem doc(x) File speichert und
bei nachträglichem Aufruf auch wieder inkl. Inhalte zum Nacheditieren öffnet.
Diese Version2 ermöglicht es mir aber nicht, den im dortigen FileDialog vorgeschlagenen Dateinamen in einer globalen Variable, TempVar, Property,
etc. so zu übernehmen, dass ich daraus in der Access DB diesen Namen in eine Tabelle insertieren kann.
Ich kann natürlich diese Word doc Datei ao abspeichern (klappt ja auch).
Um sie dann aus dem entsprechenden ORdner in eine Accesstabelle als Pfad inkl. Name abzuspeichern, muss ich dann umständlich über FileDialogPicker
die gespeicherte Datei mit z.B. dem neuesten Datum und Uhrzeit ermitteln und Access Tabellenfeldern wieder "zuführen" .

Bevor ich hier auf den Wecker gehe, frage ich Dich, ob ich meine Problematik mit Deiner Erlaubnis in den Foren http://www.office-loesung.de/p
oder https://www.ms-office-forum.net/forum/forumdisplay.php?f=60
auch veröffentlichen darf, denn ich kenne natürlich auch die Crossposting Problematik.

Auf jeden Fall bist Du ein sehr geduldiger Profi, von dem ich hier mitlesend so einiges in den Jahren auch gelernt und übernommen habe.

DF6GL

Hallo,

aaah, ich verstehe das jetzt....


Es wird nicht der erzeugte Serienbrief abgespeichert, sondern das Hauptdokument, was Du als "leere Hülle" bezeichnest.


Melde mich später, habe im Moment wenig Zeit.

derArb

Hallo,
danke für die Geduld. Ich warte dann einfach mal hier und streue es nicht in Crosspostings hinein.
Aus irgendwelchen Gründen heraus bekomme ich halt keine E-Mail Informationen über neue Posts.
Egal...ich schau halt täglich ein paar mal ins Forum und sehe es ja auch so.

DF6GL

Hallo,

naja, Tage dauert es nicht...

siehe anbei...


Eingabe des Serienbriefnamens mittels Inputbox und Speicherung des Serienbrief-Dokumentes im DB-Verzeichnis. Zusätzlich Ablage des Dateinamens und Gererierungsdatums in tbl_Kundenserienbrief.Sbrief / SDatum



der Hinweis, die Dot-Dateien nach dem Einfügen der Mailmerge-Felder wieder in einen "Normalen Brief" zurückzusetzen, gilt immer noch.

derArb

Hallo DFGL,
danke, das ging ja schnell und ist auch noch so simpel. Da wird man ja rot vor Scham.
Ich hab noch einen Flüchtlingsfehler meinerseits korrigiert.
Name:=db.Name, statt
Name:=CurrentDb.Name, Nun kann ich weitermachen und kann Dank Dir anderen Hilfesuchenden den Link zu diesem Thread geben.

DF6GL

Hallo,

und weil es so schön ist  ;D , hier noch eine Version mit einem Form-Textfeld zur direkten Eingabe eines Serienbrief-Dateinamens  (als Inputbox-Ersatz). Wenn das Feld leer gelassen wird, wird zur Auswahl eines Dateinamens der Office-Filedialog geöffnet. Gibt es die gewünschte Datei noch nicht, kann eine neue Doc-Datei im Filedialog erzeugt und anschließend gewählt werden.


derArb

Hallo,
erstmal danke dafür, aber:
Wenn das Textfeld 'SbFile' leer bleibt, öffnet sich ein FileDialog, wie Du sagtest.
Ich kann da aber nicht unter einem neuen Namen speichern, sondern nur dort schon vorhandene überschreiben.
Gebe ich einen neuen Namen ein, dann kommen weitere diverse Fehlermeldungen.

Deine Änderung im Tabellenmodell hab ich bemerkt. Es braucht natürlich erst einmal keine neue Tabelle, sondern
nur ein zusätzliches Feld in 'tbl_KundenSerienbrief'. Im 'UFO_KundenSerienbrief' muss ich dann auch noch etwas aufräumen (Mixmatch Steuerelementname und Steuerelementherkunft).
Insgesamt hakt deine liebenswert nachgeschobene Luxusversion noch ein bisschen... diverse Fehlermeldungen.
Oder hab da etwas missverstanden?

LG
derArb

DF6GL

Hallo,

da verstehst Du was miss.


Ich habe geschrieben, dass, wenn eine Datei im Filedialog nicht existiert, diese erst im Filedialog erstellt  (Rechtsklick auf die Dateiliste, Neues Worddokument erstellen) und diese ausgewählt werden muss.

Die Meldungen sind korrekt, weil eine falsche Bedienung vorliegt.  Die Meldungen kannst Du ja per Errorhandler modifizieren, bzw. eine etwas andere Ablauflogik einbauen.


Solange Du keine genaue(!, schrittweise ) Ablaufsteuerung definierst, kann ich (oder Du) den Code nicht anpassen.

derArb