Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1560to1564
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Word-Export: Textmarke nach einfügen erzeugen?!

Word-Export: Textmarke nach einfügen erzeugen?!
12.06.2017 17:56:12
Nils
Hallo liebe Excel-Freunde,
ich habe ein Word-Dokument mit Textmarken, dass ich aus Excel heraus befüllen möchte. Nur leider werden mir Textmarken gelöscht, welche einen Text enthalten, also zum Beispiel:
Zuerst: [Hier kommt der Text rein]
Nach Einfügen: Der neue Text (keine Textmarken mehr...)
Wie kann ich mir die Textmarke wieder anschließend erstellen? Ich brauche diese für Referencen im Word-Dokument

  • Dim Transfer(0 To 1) As Variant
    Set apWord = CreateObject("Word.Application")
    Transfer(0) = Array("Textmarke1", "X21")
    Transfer(1) = Array("Textmarke2", "AA21")
    With apWord.Documents(NameWordDokument)
    For k = 0 To UBound(Transfer)
    If .bookmarks.Exists(Transfer(k)(0)) Then
    .bookmarks(Transfer(k)(0)).Range.Text = ActiveSheet.Range(Transfer(k)(1))
    .bookmarks.Add (Transfer(k)(0))
    End If
    Next
    End With

  • 6
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: Word-Export: Textmarke nach einfügen erzeugen?!
    12.06.2017 19:11:04
    Nils
    Egal was ich versuche, ich bekomme es nicht hin :(
    Dieser Code hier tuts auch nicht. VB sagt immer TMRange = Nothing. Und dann passiert nichts. Dabei ist das der Code der im Internet kursiert und eine Textmarke anschließend wieder hinzufügen soll...
    
    Dim strVar As String, TM As String
    Dim TMRange As Range
    For k = 0 To UBound(Transfer)
    'Variablen mit Werten füllen
    strVar = ActiveSheet.Range(Transfer(k)(1))
    TM = Transfer(k)(0)
    'Textmarke füllen und neu setzen
    With apWord.Documents(NameWordDokument)
    If .Bookmarks.Exists(TM) Then
    Set TMRange = .Bookmarks(TM).Range
    'Rangeobjekt einen Wert zuweisen
    TMRange = strVar
    'Textmarke mit dem wert setzen
    .Bookmarks.Add TM, TMRange
    Else
    'Fehlermeldung, wenn es die Textmarke nicht gibt
    MsgBox "Textmarke konnte nicht gesetzt werden!"
    End If
    End With
    Next
    

    Anzeige
    AW: Word-Export: Textmarke nach einfügen erzeugen?!
    12.06.2017 21:34:39
    Luschi
    Hallo Nils,
    da Du 'Late Binding' (Set apWord = CreateObject("Word.Application")) benutzt, definiere die Variable so:
    Dim TMRange As Object
    denn TMRange ist ein Word.Range-Objekt, Du hast es aber Excel.Range-Objekt definiert.
    Gruß von Luschi
    aus klein-Paris
    AW: Word-Export: Textmarke nach einfügen erzeugen?!
    13.06.2017 08:16:47
    Nils
    Hallo Luschi,
    Jetzt erkennt er den Word-Range, setzt mir aber anstatt eine umhüllenden textmarke um den neuen Text eine offene Textmarke davor :(
    Also so:
    [Alter Text]
    ...vba Code läuft...
    ][Neuer Text
    ...statt...
    [Neuer Text]
    Ich bin am verzweifeln...
    Mache ich noch etwas falsch?
    Anzeige
    AW: Word-Export: Textmarke nach einfügen erzeugen?!
    13.06.2017 16:03:04
    Luschi
    Hallo Nils,
    erstaunlich, daß selbst in Vba-Handbüchern wie:
    Microsoft Word Programmierung – Das Handbuch
    von: Cindy Meister, Christian Freßdorf, Thomas Gahler
    nur die vereinfachte Variante erwähnt wird, so daß wie in Deinem Fall eine offene Textmarke statt einer geschlossenen TM entsteht. Hier ein Beispiel für die gewünschte geschlossene TM
    Dim appWord As Object, TMRange As Object
    Dim strVar As String, TM As String, NameWordDokument As String
    Dim j As Integer
    Dim Transfer(0 To 1) As Variant
    NameWordDokument = "sinnlos.docx"
    Set appWord = CreateObject("Word.Application")
    Transfer(0) = Array("Textmarke1", "X21")
    Transfer(1) = Array("Textmarke2", "AA21")
    With appWord.Documents(NameWordDokument)
    For k = 0 To UBound(Transfer)
    If .bookmarks.Exists(Transfer(k)(0)) Then
    'Textmarke selektieren, wichtig!
    .GoTo What:=-1, Name:=Transfer(k)(0)
    TMRange = Selection.Range
    'neuer TM-Text in Variable schreiben
    strVar = ActiveSheet.Range(Transfer(k)(1))
    'Länge des Inhaltes ermitteln
    j = Len(strVar)
    'TM -Inhalt ersetzen
    .bookmarks(Transfer(k)(0)).Range.Text = strVar
    'jetzt steht der Word-Markierungscursor an der 1. Stelle der ehemaligen Textmarke!
    'Cursor-Selektierung erweitern auf gerade eingefügten Text der Textmarke
    .Selection.MoveRight Unit:=1, Count:=j, Extend:=1
    Set TMRange = .Selection.Range
    'Textmarke neu erstellen
    .bookmarks.Add (Transfer(k)(0)), TMRange
    End If
    Next
    End With
    'und jetzt noch alle Objektvariablen auf Nothing setzen!
    Set TMRange = Nothing
    'usw.
    Gruß von Luschi
    aus klein-Paris
    Anzeige
    AW: Word-Export: Textmarke nach einfügen erzeugen?!
    13.06.2017 21:47:57
    Nils
    Ohh sehr cool!
    Probiere ich morgen direkt aus! Wenn das geht, dann bist du mein Held.
    Ist schon erstaunlich, dass gefühlt in jedem Forum auf dieser Welt der gleiche nicht funktionierende Code als Lösung verkauft wird. Scheint nie jemand ausprobiert zu haben.
    Danke Luschi
    Morgen gibts Feedback zu deinem Code!
    Grüße
    Nils
    AW: Word-Export: Textmarke nach einfügen erzeugen?!
    14.06.2017 09:46:46
    Nils
    Hallo Luschi,
    nach ein paar Anpassung funktioniert Deine Idee.
    .Selection.MoveRight muss sich auf die Applikation beziehen, sonst gehts nicht, ebenso .selection.range. Das habe ich glücklicherweise in einem anderen Forum gelesen.
    Der Code macht jetzut genau das was ich wollte:
    
    For k = 0 To UBound(Transfer)
    If .bookmarks.Exists(Transfer(k)(0)) Then
    'Textmarke selektieren, wichtig!
    .bookmarks(Transfer(k)(0)).Select
    'Textmarken-Inhalt ersetzen
    .bookmarks(Transfer(k)(0)).Range.Text = ActiveSheet.Range(Transfer(k)(1))
    'jetzt steht der Word-Markierungscursor an der 1. Stelle der ehemaligen  _
    Textmarke!
    'Cursor-Selektierung erweitern auf gerade eingefügten Text der Textmarke
    apWord.Selection.MoveRight 1, Len(ActiveSheet.Range(Transfer(k)(1))), 1
    'Textmarke neu erstellen
    .bookmarks.Add (Transfer(k)(0)), apWord.Selection.Range
    End If
    Next
    
    Danke für deine Hilfe!
    Grüße,
    Nils
    Anzeige

    303 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige