Thema Datum  Von Nutzer Rating
Antwort
14.12.2024 12:29:41 SaveTheQueen
NotSolved
14.12.2024 19:23:16 ralf_b
NotSolved
27.12.2024 08:43:31 ralf_b
NotSolved
Blau Problem mit füllen von Textmarken
25.12.2024 18:25:44 Gast59040
Solved

Ansicht des Beitrags:
Von:
Gast59040
Datum:
25.12.2024 18:25:44
Views:
31
Rating: Antwort:
 Nein
Thema:
Problem mit füllen von Textmarken

' Nachfolgend wird Word aus Access heraus gesteuert. Access übergibt in Formularfeldern gespeicherte Daten an Word.
' Die Kommunikation mit Word erfordert unter Extras/Verweise den Eintrag »Microsoft Word 16.0 Object Library«
' Der erläuterte Code wird in ein Access-Modul geschrieben. Modul = »modKommunikationMitWord«.   
' Das Word-Template und die Source bestehen aus den Komponenten a) - f)

' Komponente a): ein Word-Template, gespeichert im Format dotm, abgelegt im Ordner BausteinObjekte.
' Der Ordner BausteinObjekte befindet sich im gleichen Verzeichnis, wie die Access-db.
' Im Ordner BausteinObjekte befindet sich das Templates lautet: TemplateFuermodKommunikationMitWord.dotm
' Das Template enthält die Textmarken »bmkNameHinterbliebene« und »bmkAnschriftHinterbliebene«.

' Komponente b) Definiere Variablen im Header von »modKommunikationMitWord«.
Option Compare Database
Option Explicit
' Variable zur WordKommunikation global definieren
Dim objWord As Word.Application
    Dim objDoc As Word.Document
        Dim objSel As Word.Selection
' Formularvariable zur Kommunikation aus dem Access-Formular >frmPersonendaten< nach Word global definieren
 Dim FormAdressdaten As Form

' Komponente c) Eine Funktion, welche zuerst Word und folgend das mit Variablen zu füllende Template startet
Function StarteWordUndZentralesTemplate()
' Aufgabe dieser Function: Word wird gestartet und das zentrale Template wird gezeigt.
    
' Der Versuch, eine Referenz auf eine bereits laufende Instanz von Word zu setzen, kann zur Exception
' infolge Error 91 führen. Daher wird zum Start von Word auf einen ErrorHandler verzichtet.
    On Error Resume Next
' Das Template liegt im Ordner >>HiBiBausteinObjekte<<
    Dim strBausteinpfad As String
        strBausteinpfad = Left(CurrentDb.Name, Len(CurrentDb.Name) - Len(Dir(CurrentDb.Name))) & "BausteinObjekte\"

' Versuch, eine Referenz auf eine bereits laufende Instanz von Word zu setzen
    Set objWord = GetObject(, "Word.Application")
    
' Wenn keine Referenz ermittelt wird, dann eine neue Word-Instanz starten
    If Err <> 0 Then
      Err = 0
      Set objWord = CreateObject("Word.Application") ' neue Word-Instanz starten
    Else
' Wurde eine Referenz ermittelt, wird deren Eigenschaft geprüft
' Wenn Word unsichtbar läuft, dann läuft es entweder als E-Mail-Editor von
' Outlook oder es wird von anderer Seite per Office-Automation benutzt
        If Not objWord.Visible Then
            Err = 0        ' Error-Wert wieder auf Null setzen
            ' neue Word-Instanz starten, damit die laufende Instanz nicht gestört wird
            Set objWord = CreateObject("Word.Application")
         End If
    End If
         
' Word sichtbar machen, aktivieren und in den Vollbildmodus führen
      With objWord
        .Visible = True
        .Activate
        .WindowState = wdWindowStateMaximize
    End With

' Word ist gestartet. Ab hier unterstützt ein Fehlerbehandler.
    On Error GoTo ErrorHandler
 
 ' Starte jetzt das Template.
     Set objDoc = _
                objWord.Documents.Add(strBausteinpfad & "TemplateFuermodKommunikationMitWord.dotm")

Exit_StarteWordUndZentralesTemplate:
Exit Function

ErrorHandler:
    Select Case Err.Number
        Case 5174
' »modMessages« enthält Source zwecks Bearbeitens von Error-Numbers und wird hier nicht erklärt             
            modMessages.MessageExclamation ("Im Datenbankverzeichnis fehlt der Ordner >BausteinObjekte<" & vbCrLf & _
                "oder in diesem Ordner fehlt die Dokumentvorlage für den VA."): End
        Case Else
            MsgBox Err.Number & ", " & Err.Description
        End Select
            Call modKommunikationMitWord.EntwerteWordObjektVariable
                GoTo Exit_StarteWordUndZentralesTemplate
End Function

' Teste die Komponenten a - c. Starte dazu die die Function StarteWordUndZentralesTemplate().
' Folgendes Ergebnis wird erwartet: Word wird gestartet, das oben bezeichnete Template wird gestartet und mit der
' Bezeichnung »Dokument1« displayed

' Test okay? Dann weiter mit ...

' Komponenten zu d)
' Erstelle in der Access-db eine Tabelle, Name: »tbl_Personendaten«
' Feldnamen sind: NameHinterbliebene und AnschriftHinterbliebene
' Erfasse einige Testdatensätze
' Erstelle in der Access-db ein Formular, Name: »frmPersonendaten«
' Weise dem Formular die Datensatzquelle tbl_Personendaten zu.
' Definiere im Formular ein Textfeld NameHinterbliebene und ein Textfeld AnschriftHinterbliebene.
' Weise die Textfelder den dazugehörenden db-Feldern zu. Prüfe, ob dein Formular deine Testdatensätze zeigt.
' Definiere auf der Formularoberfläche zwei Befehlsschaltflächen:
' Beschrifte Befehlsschaltfläche #1 mit: StarteWordUndZentralesTemplate
' Weise dem Klickereignis folgenden Befehl zu: Call modKommunikationMitWord.StarteWordUndZentralesTemplate
' Beschrifte Befehlsschaltfläche #2 mit: Formulardaten_an_Word_Click
' Weise dem Klickereignis folgenden Befehl zu: Call modKommunikationMitWord.Formulardaten_an_Word_Click

' Komponente e) »modKommunikationMitWord« erhält eine Sub, welche nach Klick auf eine Formularschaltfläche
' Daten aus Textfeldern des Access-Formulars an das gestartete Template übergibt

Sub Formulardaten_an_Word_Click()
' Zuweisung des aufrufenden Formularobjektes zu einer Formularvariablen
' Dies erspart im weiteren unübersichtlichen Code.
' Mit Screen.ActiveForm wird das diese Source startende Access-Formular zugewiesen.
 Set FormAdressdaten = Screen.ActiveForm

' Der Name des aktuell auf dem Monitor befindlichen Dokus muss abgelegt werden, damit beim Einfügen
' von Variablen stets das >richtige< Doku bedient wird
Dim AktuellesDokument, strDokumentvorlage As String

' Variable für die Bausteinverarbeitung
Dim strWordObjektTraeger, strDokPfad, strBausteinpfad As String
' Ablage der Ermittlungsformulare im genannten Verzeichnis
        strDokPfad = Left(CurrentDb.Name, Len(CurrentDb.Name) - Len(Dir(CurrentDb.Name))) & "BausteinObjekte\"
' Ablage des Templates im genannten Verzeichnis
        strDokumentvorlage = "TemplateFuermodKommunikationMitWord.dotm"

' Der im Header definierten Objektvariablen von Word werden das Template und die Variablen zugewiesen
With objWord
' das Template starten: verwende den vollst. Pfad und den Namen des Templates
 .Documents.Add Template:=Chr(34) & strDokPfad & strDokumentvorlage & Chr(34)

' Zuweisen des aktiven Dokuments zur Variablen >AktuellesDokument<
     AktuellesDokument = .ActiveDocument.Name
        .Documents.Item(AktuellesDokument).Activate

With .Selection
           If objWord.ActiveDocument.Bookmarks.Exists("bmkNameHinterbliebene") = True Then
                .GoTo Name:="bmkNameHinterbliebene"
                .TypeText Text:=FormAdressdaten!txtNameHinterbliebene
            Else
                    Debug.Print ">bmkNameHinterbliebene< existiert nicht"
            End If

            If objWord.ActiveDocument.Bookmarks.Exists("bmkAnschriftHinterbliebene") = True Then
                 .GoTo Name:="bmkAnschriftHinterbliebene"
                 .TypeText Text:=FormAdressdaten!txtAnschriftHinterbliebene
            Else
                    Debug.Print ">bmkAnschriftHinterbliebene< existiert nicht"
            End If
End With
End With

End Sub

' Teste »frmPersonendaten«.
' Klick auf StarteWordUndZentralesTemplate: Word startet und zeigt das Template.
' Klick auf Formulardaten_an_Word_Click: Access übergibt die Variablen aus den Formularfeldern an das
' Template, dort an die durch Bookmarks gekennzeichneten Stellen.


' Komponente f)
Sub EntwerteWordObjektVariable()
    Set objWord = Nothing
        Set objDoc = Nothing
            Set objSel = Nothing
                End
End Sub


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
14.12.2024 12:29:41 SaveTheQueen
NotSolved
14.12.2024 19:23:16 ralf_b
NotSolved
27.12.2024 08:43:31 ralf_b
NotSolved
Blau Problem mit füllen von Textmarken
25.12.2024 18:25:44 Gast59040
Solved