Beitrag aus SmartTools Access Weekly
Absätze per VBA aus einem Word-Dokument lesen und aktualisieren
Access 365 2024 2021 2019 2016 2013 2010
FRAGE Für meine Datenbank-Anwendung möchte ich per VBA aus Access heraus Absätze aus einem Word-Dokument lesen und zur Aktualisierung auch in ein Dokument zurückschreiben. Bisher schaffe ich es allerdings nur, Textmarken (Bookmarks) für die virtuelle Positionierung und Auswahl zu verwenden. Im Praxiseinsatz ist das aber zu unflexibel. Ich möchte an beliebigen Stellen Text einfügen, ohne dass Textmarken vorhanden sein müssen.
Diverse Anfragen
ANTWORT Für den Zugriff auf Word-Texte verwenden Sie am besten die Methode "Selection", die sich auf die aktuelle Markierung im Dokument bezieht. Wenn wir davon ausgehen, dass Sie über eine Variable "objWord" eine Verbindung zu Word mit einem geöffneten Dokument hergestellt haben, können Sie gezielt einen Absatz wie folgt auslesen:
Dim strText As String
.....
With objWord.Selection
.HomeKey Unit:=wdStory
.WholeStory
strText = .Paragraphs(1).Range.Text
End With 'objWord.Selection
"1" ersetzen Sie durch die Nummer des Absatzes, den Sie auslesen möchten. Diese Anweisungen setzen den Cursor zunächst an den Anfang des Dokumentes und markieren dann den kompletten Text. Darin kann per "Paragraphs(n)" auf einen beliebigen Absatz und per "Range.Text" auf den enthaltenen Text zugegriffen werden.
Um alle Absätze des Dokumentes in einer Schleife auszulesen, zu bearbeiten und zu aktualisieren, verwenden Sie eine Konstruktion wie die folgende:
Dim strText As String
Dim p As Word.Paragraph
.....
With objWord.Selection
.HomeKey Unit:=wdStory
.WholeStory
For Each p In .Paragraphs
strText = p.Range.Text
'Text in "strText" bearbeiten...
p.Range.Text = strText
Next
End With 'objWord.Selection
In einer For Each-Schleife werden alle Absätze des markierten Textes über eine Laufvariable "p" ausgelesen und der Text in die Variable "strText" übertragen. Nachdem er dort verarbeitet wurde, können Sie den Text mit der Zuweisung "Range.Text = strText" im Dokument aktualisieren.
Um Text an beliebiger Stelle einzufügen, nutzen Sie eine Konstruktion wie die folgende:
.....
With objWord.Selection
.HomeKey Unit:=wdStory
.WholeStory
.Start = .Paragraphs(3).Range.Start
.End = .Starts
.TypeText "Testtext"
.TypeParagraph
End With 'objWord
Hier wird der Cursor zunächst an den Anfang von Absatz 3 positioniert, dort per "TypeText" der Text "Testtext" eingefügt und mit "TypeParagraph" um ein Absatzendezeichen ergänzt. Anstelle eines konstanten Textes können Sie auch den Namen einer Variablen angeben, deren Inhalt dann per "TypeText" eingefügt wird.
Unser neuestes E-Book bietet eine Fülle von weiteren Lösungen für den schnellen und komfortablen Datenaustausch sowie zahlreiche Tipps & Tricks für das Zusammenspiel zwischen Word und Access. Beheben Sie häufig auftretende Probleme und reduzieren Sie lästige Aufgaben auf wenige Mausklicks:
E-Book 'Access und Word optimal zusammen einsetzen' mit 50% Rabat vorbestellen