# Word: Textmarken mit Formatierung übernehmen



## DrMueller (13. November 2009)

Hi Leute,
ich hab den Auftrag bekomnen, per Code ein Word-File zu öffnen, nach einer Textmarke zu durchsuchen und dann diesen Text auszugeben.
Klappt soweit, aber leider bekomme ich weder Formatierungen noch z.B. Tabellen etc.
Zurzeit siehts so aus:


```
Set wd = getWordObject(tmpPath)
      Dim ii As Integer
      For ii = 1 To wd.activedocument.bookmarks.Count
        If wd.activedocument.bookmarks(ii).Name = "AntragText" Then
          getAktDocText = wd.activedocument.bookmarks(ii).range
          Exit For
        End If
      Next ii
      wd.activedocument.Close
      DoEvents
```


Kann man das überhaupt so formatiert rauslesen?


----------



## Drogist (13. November 2009)

Moin DrMueller,

so ganz verstehe ich nicht, was du erreichen willst. Auf der einen Seite "flöhst" du alle Textmarken durch und auf der anderen Seite wertest du offensichtlich nur eine aus. Und dann noch die Frage, wie/worin willst du die Fundstelle auswerten -> anzeigen?

Hast du einmal darüber nachgedacht, einfach die entsprechende _bookmark_ komplett zu markieren, in die Zwischenablage zu kopieren und dann entsprechend weiter zu verwerten?


----------



## DrMueller (16. November 2009)

Nun um vielleicht etwas weiter auszuholen:
Auf einem Dokument kann (muss aber nicht) die Textmarke "AntragText" vorhanden sein, darum suche ich danach und schaue, ob sie vorhanden ist.

Wenn ich sie finde, lese ich den Text aus und gebe ihn per Funktion zurück.

Komplett markieren und direkt in ein Control zu geben, wäre auch möglich, aber wie markiere ich denn die Textmarke komplett? Ich habe bei google nur diese "Range" Funktion gefunden. Sollte diese die Formatierungen auch mitliefern?


----------



## Drogist (16. November 2009)

Moin DrMueller,

schau mal hier:

```
Option Explicit

Sub MyMakro1()
   Dim Bm As Bookmark
   Dim Such As String
   Dim Inhalt As String
   
   Such = "AntragText"
   
   With ActiveDocument
      If .Bookmarks.Exists(Such) = True Then
          .Bookmarks(Such).Select
          Inhalt = Selection
          MsgBox Inhalt
      End If
   End With
End Sub
```
Vielleicht hilft das weiter. Bei mir hat das gut geklappt ...


----------



## DrMueller (18. November 2009)

hm


```
If wd.activedocument.bookmarks(ii).Name = "AntragText" Then
          'mm 13.11.2009 - 1611642
          'getAktDocText = wd.activedocument.bookmarks(ii).range
          Call wd.activedocument.bookmarks(ii).Select
          getAktDocText = wd.activedocument.selection
          MsgBox getAktDocText
          Exit For
        End If
```

Du hast kein Punkt bei Selection, daher nehme ich an, dass es ein ActiveDocument Property ist

leider erscheint bei mir kein Text.


----------



## Drogist (18. November 2009)

Ups ...


> leider erscheint bei mir kein Text


Ich denke mal, dass du diesen Effekt auch mit "original" meinem Makro hast. Diesen Effekt kann ich nur nachvollziehen, wenn die Textmarke keinen Inhalt hat.

Stell doch das Dokument einmal so ein, dass die Textmarkenzeichen zu sehen sind. Wenn es nur ei Zeichen ist, was so wie ein I (mit "Füßchen"/Serifen) aussieht, dann ist es eine reine Sprungmarke ohne Inhalt. Sind es jedoch zwei eckige Klammern ([ ]), dann muss es klappern .


----------



## DrMueller (23. November 2009)

hm klappt gar nix was ich bis jetzt gefunden habe.
Ich brauche den Text im RTF-Format, ich habs auch mit Clipboard versucht, aber auch hier Fehlanzeige.

Muss doch möglich sein RTF-Text auszulesen, sonst wärs doch sinnlos.


----------



## Drogist (23. November 2009)

Stell doch mal ein "harmloses" Beispiel hier herein, vielleicht kommen wir dann weiter.


----------



## DrMueller (24. November 2009)

Kein Problem, hab ein kleines Testprogramm geschrieben.

Als RTF-Feld kann man irgendwas nehmen, oder man fragt den Text via Messagebox ab, man sieht ja sofort ob Formatieren drin sind oder nicht.


```
Option Explicit

Private Sub Form_Load()
  Dim BM As Object
  Dim rng As Object
  Dim wd As Object
  Dim ii As Integer
  
  Set wd = getWordObject
  
  For ii = 1 To wd.activedocument.bookmarks.Count
    If wd.activedocument.bookmarks(ii).Name = "AntragText" Then
      Set BM = wd.activedocument.bookmarks(ii)
      Set rng = BM.range
      RTF1.TextRTF = rng.formattedtext
      Exit For
    End If
  Next ii
  
End Sub

'mm 03.11.2009 - 1607113
Private Function getWordObject() As Object
  On Error Resume Next

  Dim wd As Object
  Dim www As Object
  Set www = GetObject(, "Word.Application")
  DoEvents
  Dim filename As String
  filename = "C:\Dokumente und Einstellungen\Administrator\Desktop\test\Test123.docx"
  If Err <> 0 Then
    Err.Clear
    Set www = Nothing
  End If

  If www Is Nothing Then
    Err.Clear
    Set www = CreateObject("Word.Application")
    If Err <> 0 Then
      Err.Clear
      Set www = Nothing
      DoEvents
      Set wd = CreateObject("Word.Basic")
      If Err <> 0 Then
        Err.Clear
        Exit Function
      Else
        wd.dateiöffnen Chr$(34) & filename & Chr$(34)
      End If
    End If
  End If
  
  www.Visible = False
  Call www.Documents.Open(filename, ReadOnly:=True)
  If Not www Is Nothing Then
    If Not wd Is Nothing Then Set wd = Nothing
    Set wd = www
    Set www = Nothing
  End If
  
  Set getWordObject = wd
  wd = Nothing

End Function
```


----------



## Drogist (24. November 2009)

Sorry,

da habe ich mich nicht so ganz glücklich ausgedrückt. Ich meinte die komplette Word-Datei(en) mit allem Drum und Dran. Also in der Form, wie du es im Endeffekt brauchst.


----------



## DrMueller (25. November 2009)

Das ist leider nicht möglich, denn das ganze ist auch nur ein ganz kleiner Teil eines Moduls, welches wiederum nur mit dem Hauptprogramm zusammen läuft.
Auch die Word-Datei ist Malz wie Hopfen, du kannst auch irgend eine beliebige Textmarke nehmen, das spielt absolut keine Rolle.
Am Hauptproblem. nämlich Text in formatiertem Format aus einem Word-Dokument zu lesen, ändert sich ja dadurch absolut nichts.


----------

