Textmarken in Word plazieren und speichern

Moderator: ModerationP

Textmarken in Word plazieren und speichern

Beitragvon Wolli25++ » 13. Jan 2020, 15:23

Hallo zusammen. Ich kopiere mittels Makro Daten aus einer Excel-Datei nach Word(gespeichert mit der Endung .dotm. Dabei sind im Word Vordruck die spalten mit Textmarken versehen.
Wenn ich nun die Werte im Word-Dokument lösche um sie mit anderen Werten zu befüllen, lösche ich ja jedes Mal auch die Textmarken. Was wiederum bedeutet, die Textmarken wieder neu einzuordnen.
Meine Frage nun: Kann man die Textmarken in den entsprechenden Spalten nicht so "markieren", das sie auf der Position "verankert" sind. Danke für Hinweise, Gruß Wolli
Wolli25++
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 376
Registriert: 19. Okt 2016, 18:40

Re: Textmarken in Word plazieren und speichern

Beitragvon theoS » 13. Jan 2020, 16:29

Hallo Wolli, hier drin findest du tausend Beiträge zu dem "Problem".
Word ersetzt den Range der TM durch das was du einfügst. Daher ist die TM auch weg, denn die hängt ja an dem Range.
Jetzt kannst du, je nach Art der TM zwei Sachen machen.
Ist die TM 1 Zeichen breit, kannst du den Range den du einsetzt danach oder davor einsetzen.
ist die TM breiter, dann bleibt dir nichts anderes übrig, als dir den Namen der TM in eine Variable zu holen und die im Anschluss an das Einfügen in den Range einsetzen, der jetzt nach dem Einfügen da ist.
Wie gesagt, quäl mal die Suche danach.

z.B. hier: viewtopic.php?f=162&t=704438&hilit=textmarke#p2916414
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 5196
Registriert: 19. Apr 2008, 00:14

Re: Textmarken in Word plazieren und speichern

Beitragvon Gast » 14. Jan 2020, 13:38

Danke erstmal. Habe den Code aus deiner Empfehlung genommen, wo ich glaube das darin auch für mein Anliegen die Lösung zu sehen ist. Eine TEXT Marke habe ich im Word-Dokument gesetzt.
Wenn ich nun das Makro aktiviere kommt gleich die blaue Markierung bei der Zeile:
Code: Alles auswählen
Dim Test As Word.Document

Benutzerdefinierter Typ nicht definiert. Frage: Mit dem "dd1" ist was genau gemeint? Ich habe angenommen es ist das Word-Dokument und habe anstelle dessen "TEST" als Word-Dokument eingesetzt.
Den Code überhaupt habe ich in EXCEl gestartet, so habe ich es jedenfalls verstanden.
Hier mal mein Versuch:
Code: Alles auswählen
Sub wod()

Dim Test As Word.Document, pfaD As String ' , TMrange As Range
' pfaD = "C:\Users\DEINEUSERNAME\Desktop\Lorem ipsum dolor sit amet.docx" 'der Pfad zu deinem Dokument
pfaD = "C:\Users\Besitzer\Desktop\Serienbrief\TEST.docx"
Set Test = GetObject(pfaD)
Test.Application.Visible = True 'wenn du zuschauen willst

 
      Dim TMrange As Word.Range
      TMName = "Anrede" 'das ist der Name deiner Textmarke die du verwenden willst.
       If Test.Bookmarks.Exists(TMName) Then 'überprüft ob die TM überhaupt existiert
      Set TMrange = Test.Bookmarks(TMName).Range 'das ist wichtig, denn hier wird die Position eingelesen
      TMrange.Text = "Wo ist die Marke?" 'hier setzt du den Text neu
      dd1.Application.ScreenRefresh 'dass du es auch siehst
     Test.Bookmarks.Add Name:=TMName, Range:=TMrange 'hier setzt das die Textmarke mit dem gleichen Namen an die alte Position
      End If

' dd1.Save
' dd1.Close 'hier kannst du auch die dd1.application abschießen
Set Test = Nothing
End Sub
Gast
 

Re: Textmarken in Word plazieren und speichern

Beitragvon Wolli25++ » 14. Jan 2020, 13:41

Sorry, wollte mich nicht verbergen! Gruß Wolli
Wolli25++
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 376
Registriert: 19. Okt 2016, 18:40

Re: Textmarken in Word plazieren und speichern

Beitragvon theoS » 14. Jan 2020, 17:02

Den Code überhaupt habe ich in EXCEl gestartet, so habe ich es jedenfalls verstanden.

Dann lies den Beitrag weiter, zu dem ich dich hingeschickt hab.
Das Ding funktioniert nur in Word. Wie das in Excel geht steht zwei drei Posts weiter unten.
Vor allem nicht den Verweis auf Word vergessen.
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 5196
Registriert: 19. Apr 2008, 00:14

Re: Textmarken in Word plazieren und speichern

Beitragvon Wolli25++ » 15. Jan 2020, 16:36

Danke für den Hinweis, habe den Code in Word aktiviert, und er führt die Textmarke aus. Jetzt möchte ich, weil ich mehrere Spalten kopieren will das folgende Makro in EXCEL starten, wobei mir ein Fehler in Zeile
Code: Alles auswählen
Set objDocument = objApp.Documents.Open(Filename:=strDoc)
angezeigt wird. Hinweis: Datei wurde nicht gefunden.
Mein Code (Anfangszeilen) womit ich aus EXCEL starte. Kann mir hier vielleicht jemand weiter helfen? Danke jetzt schon und Gruß Wolli
Code: Alles auswählen
 Option Explicit
 Const strBookmark1 As String = "Name"
 Const strBookmark2 As String = "Straße"
 Dim blnTMP As Boolean
Public Sub Main()
    Dim objWordRange As Object
    Dim objDocument As Object
    Dim objDialog As Object
    Dim objApp As Object
    Dim strDoc As String
    Dim blnTMP As Boolean
    On Error GoTo Fin
    strDoc = ThisWorkbook.Path & _
        Application.PathSeparator & "TEST.docx"
    Set objApp = OffApp("Word")
    Set objApp = OffApp("Word", False)
      If Not objApp Is Nothing Then
    ' Öffne das Worddokument, zugewiesen an die Objektvariable objDocument
    Set objDocument = objApp.Documents.Open(Filename:=strDoc)
    End If
    ' With für Schreibfaule :-) Alle Bezüge auf Tabelle1 müssen
    ' mit einem Punkt beginnen
    With ThisWorkbook.Worksheets("Tabelle1")
        ' Prüfe, ob die Textmarke vorhanden ist
       
         If objDocument.Bookmarks.Exists(strBookmark1) = True Then
            ' Schreibe den Wert von B2 in die Textmarke Name
            objDocument.Bookmarks(strBookmark1).Range = .Range("C2").Text    ' Ist Name
         '  End If
         Else
              If objDocument.Bookmarks.Exists(strBookmark1) = True Then
                objDocument.Bookmarks(strBookmark1).Range = .Range("D2").Text    ' Ist Straße

         End If
Wolli25++
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 376
Registriert: 19. Okt 2016, 18:40

Re: Textmarken in Word plazieren und speichern

Beitragvon theoS » 15. Jan 2020, 17:03

Lass dir mal mit debug.print den Dateinamen ausgeben
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 5196
Registriert: 19. Apr 2008, 00:14

Re: Textmarken in Word plazieren und speichern

Beitragvon theoS » 15. Jan 2020, 23:56

Hab jetzt erst gesehen, dass du ja die Fehlerbehandlung umgestellt hast. Das ist unglücklich, denn der Code gibt nur Fehler aus von der Ersten Zeile weg.
Was ist bitte eine OffApp?
Wenn du deinen Code verwenden möchtest, kein Problem, aber der ist so recht langsam.
Bau aber dann das Objekt richtig zusammen.
Code: Alles auswählen
        Set objApp = CreateObject("Word.Application")
'        Set objApp = OffApp("Word", False)  'was du damit wolltest ist mir ein Rätsel
          If Not objApp Is Nothing Then
        ' Öffne das Worddokument, zugewiesen an die Objektvariable objDocument
        Set objDocument = objApp.Documents.Open(Filename:=strDoc)
        objDocument.Windows(1).Visible = True   'das unbedingt machen, sonst bekommst du das Word-Doc u.U. beim normalen Öffnen mit ausgeblendetem 'Fenster

'zum Schluss diese nicht vergessen.
Set objDocument = Nothing
Set objApp = Nothing


Ich bevorzuge diese Methode:
Code: Alles auswählen
Dim dd1 As Object: Set dd1 = GetObject(Ordnerpfade)
dd1.Windows(1).Visible = True


Dann kannst du mit dem Objekt alles mögliche veranstalten...
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 5196
Registriert: 19. Apr 2008, 00:14

Re: Textmarken in Word plazieren und speichern

Beitragvon Gast » 16. Jan 2020, 17:10

Danke, habe deinen Code in das Makro übernommen. Es hackt allerdings noch etwas bei der Zeile:
Code: Alles auswählen
Set Test = objApp.Documents.Open ' (filename:=GetObject)  '  "TEST.docx")  '  strDoc)
Laufzeitfehler 449, Argument ist nicht optional!
Habe für die Zeile keine Lösung gefunden und hoffe auf Hilfe.
Anmerkung von mir: Habe "Test" der Name für das Word-Dokument im Code hoffentlich immer an der richtigen Stelle verwendet.
Der Code komplett sieht jetzt wie folgt aus:
Code: Alles auswählen
Option Explicit

Const strBookmark1 As String = "Name"
Const strBookmark2 As String = "Straße"
Dim blnTMP As Boolean
Public Sub Main()
    Dim objWordRange As Object, pfad As String
    Dim objDocument As Object
    Dim objDialog As Object
    Dim objApp As Object
    Dim strDoc As String
    Dim filename As String
   
    Dim Test As Object: Set Test = GetObject("C:\Users\Besitzer\Desktop\Serienbrief\TEST.docx")
        Test.Windows(1).Visible = True
       
    On Error GoTo Fin
               Set objApp = CreateObject("Word.Application")
      '  Set objApp = OffApp("Word", False)  'was du damit wolltest ist mir ein Rätsel
          If Not objApp Is Nothing Then
        ' Öffne das Worddokument, zugewiesen an die Objektvariable objDocument
         Set Test = objApp.Documents.Open ' (filename:=GetObject)  '  "TEST.docx")  '  strDoc)
        Test.Windows(1).Visible = True   'das unbedingt machen,
        ' sonst bekommst du das Word-Doc u.U. beim normalen Öffnen mit ausgeblendetem 'Fenster
        If Test.Bookmarks.Exists(strBookmark1) = True Then
            ' Schreibe den Wert von B2 in die Textmarke Name
            Test.Bookmarks(strBookmark1).Range = Range("C2").Text  '  Ist Name
        End If
        If Test.Bookmarks.Exists(strBookmark2) = True Then
            Test.Bookmarks(strBookmark2).Range = Range("D2").Text   ' Ist Straße
        End If
        If Test.Bookmarks.Exists(strBookmark1) = True Then
            Range("C1:D15").CopyPicture 1, 2
            Set objWordRange = Test.Bookmarks(strBookmark1).Range  ' objDocument
            objWordRange.Paste
            Set objWordRange = Nothing
        End If
        Application.CutCopyMode = True
        ' Objektvariable objWordRange leeren
        Set objWordRange = Nothing
    Else
        ' Ausgabe, wenn die Objektvariable objApp Nothing ist...
        MsgBox "Applikation nicht installiert!"
    End If
Fin:
    If Not objApp Is Nothing Then
        ' Wor war nicht offen, also...
        If blnTMP = True Then
            ' ... Word schliessen
'            objApp.Quit
            blnTMP = False
        End If
    End If
    ' Objektvariablen leeren
    Set objWordRange = Nothing
    Set objDocument = Nothing
    Set objApp = Nothing
    Application.CutCopyMode = True
    ' Wenn die Fehlernummer NICHT 0 ist, dann gib die Fehlernummer und die Fehlerbeschreibung aus
    If Err.Number <> 0 Then MsgBox "Fehler: " & _
        Err.Number & " " & Err.Description
End Sub
Private Function OffApp(ByVal strApp As String, _
    Optional blnVisible As Boolean = True) As Object
    Dim objApp As Object
    On Error Resume Next
    Set objApp = GetObject(, strApp & ".Application")
    Select Case Err.Number
        Case 429
            Err.Clear
            Set objApp = CreateObject(strApp & ".Application")
            blnTMP = True
            If blnVisible = True Then
                On Error Resume Next
                objApp.Visible = True
                Err.Clear
            End If
    End Select
    On Error GoTo 0
    Set OffApp = objApp
    Set objApp = Nothing
End Function

Gast
 

Re: Textmarken in Word plazieren und speichern

Beitragvon Wolli25++ » 16. Jan 2020, 17:49

Sorry, meine Anmeldung wohl abgelaufen als ich den Beitrag sendete. Gruß Wolli
Wolli25++
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 376
Registriert: 19. Okt 2016, 18:40

Re: Textmarken in Word plazieren und speichern

Beitragvon theoS » 16. Jan 2020, 18:01

Code: Alles auswählen
Option Explicit

Const strBookmark1 As String = "Name"
Const strBookmark2 As String = "Straße"
Dim blnTMP As Boolean
Public Sub Main()
    Dim objWordRange As Object, pfad As String
    Dim objDocument As Object
    Dim objDialog As Object
    Dim objApp As Object
    Dim strDoc As String
    Dim filename As String

 Set objDocument = GetObject("C:\Users\Besitzer\Desktop\Serienbrief\TEST.docx") 'mit der Zeile weist du der Objektvariablen schon gleich die Anwendung mit 'zu
        objDocument .Windows(1).Visible = True
       
    'On Error GoTo Fin 'mach das zumTesten erst mal aus

        If objDocument .Bookmarks.Exists(strBookmark1) = True Then
            ' Schreibe den Wert von B2 in die Textmarke Name
            objDocument .Bookmarks(strBookmark1).Range = Range("C2").Text  '  Ist Name


Hast du nicht ganz so verstanden, wie gemeint.
Das mit dem zuweisen zu einem Application-Objekt lese ich ab und zu, aber die Sache macht das GetObject einfacher. Da holt sich VBA gleich die Anwendung mit dazu, öffnet was Dok gleich (so vorhanden) und du musst nur noch das Window(1).visible = true machen
Dann kannst du mit dem Ding weiterarbeiten.
Lass den ganzen Kladderatsch einfach weg
Evtl. aufpassen wenn du benamste Word-Konstanten verwendest, dass du da entweder den Zahlenwert verwendest oder diese in Excel noch mal deklarierst.
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 5196
Registriert: 19. Apr 2008, 00:14

Re: Textmarken in Word plazieren und speichern

Beitragvon Wolli25++ » 17. Jan 2020, 10:48

Vielen Dank, habe den Code eingefügt, angepasst und es funktioniert, klasse.
Füge den Code aus Word mal an. Frage dazu: Wie lässt sich bereits befüllte Spalten löschen, damit neue Werte eingefügt werden können? Jetzt wird immer eine neue Tabelle dazu angefügt.
Kenne es bei EXCEL Tabellen, aber nicht in Word, wo ja in meinem Fall Textmarken vergeben sind. Vielleicht geht hierfür noch ein Beispiel? Gruß Wolli

Code: Alles auswählen
Option Explicit
Sub TEXTMarke()
Dim Test As Object
Dim pfaD As String
 Dim TMname As String  '  Range
pfaD = "C:\Users\Besitzer\Desktop\Serienbrief\TEST.docx"
Set Test = GetObject(pfaD)
Test.Application.Visible = True 'wenn du zuschauen willst
      Dim TMrange As Word.Range
      TMname = ("Name") & ("Straße") 'das ist der Name deiner Textmarke die du verwenden willst.
       If Test.Bookmarks.Exists(TMname) Then 'überprüft ob die TM überhaupt existiert
      Set TMrange = Test.Bookmarks(TMname).Range 'das ist wichtig, denn hier wird die Position eingelesen
      TMrange.Text = ("Name") & ("Straße")  '  **** "Wo ist die Marke?" 'hier setzt du den Text neu
      Test.Application.ScreenRefresh 'dass du es auch siehst
     Test.Bookmarks.Add Name:=TMname, Range:=TMrange 'hier setzt das die Textmarke mit dem gleichen Namen an die alte Position
      End If
Set Test = Nothing
End Sub
Wolli25++
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 376
Registriert: 19. Okt 2016, 18:40

Re: Textmarken in Word plazieren und speichern

Beitragvon theoS » 17. Jan 2020, 10:56

Verstehe ich jetzt nicht. Wo läuft der Code jetzt? In Word oder Excel?
Und was fügst du dann da ein? Kannst du mal ein Dokument hoch laden wo man erkennt was du machst?
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 5196
Registriert: 19. Apr 2008, 00:14

Re: Textmarken in Word plazieren und speichern

Beitragvon Wolli25++ » 18. Jan 2020, 12:01

Hallo, hänge mal meine Beispiele hier an. Ich würde gerne bevor neue Daten aus EXCEL in Word kopiert werden, die alten Daten (Word), so sie bereits bestehen, löschen und mit neuen Daten aktualisieren.
Die Auswahl der Daten geschieht im Makro (EXCEL). Nachdem Werden die Daten in Textmarken mittels Makro gesetzt. Gruß Wolli
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Wolli25++
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 376
Registriert: 19. Okt 2016, 18:40

Re: Textmarken in Word plazieren und speichern

Beitragvon theoS » 18. Jan 2020, 23:55

Also, ich hab dir im Dokument ein paar Änderungen angebracht.
Prinzipiell sieht der Code jetzt so aus:
Code: Alles auswählen
Public Sub Main()
        Dim objWordRange As Object  'für die Textmarke strBookmark2
        Dim objWordRangeBM1 As Object  'für die Textmarke strBookmark1
        Dim objDocument As Object
        Dim strDoc As String


       
' strDoc = "C:\Users\" & Environ("username") & "\Desktop\TEST.docx" 'hier liest man den Usernamen gleich aus dem Betriebssystem aus
 strDoc = ThisWorkbook.Path & "\TEST.docx"   'hier liest du den Pfad von deiner Exceltabelle aus
 Set objDocument = GetObject(strDoc) 'mit der Zeile weist du der Objektvariablen schon gleich die Anwendung mit zu
  If objDocument.ActiveWindow.Visible = False Then
   objDocument.Windows(1).Visible = True   'Wichtig!
  End If

       
'Was du jetzt damit willst, ist mir nicht klar, ich lass das mal, denn die TM gibts ja momentan nicht.
    If objDocument.bookmarks.Exists(strBookmark1) = True Then
                ' Schreibe den Wert von B2 in die Textmarke Name
        objWordRangeBM1 = objDocument.bookmarks(strBookmark1).Range
        objWordRangeBM1 = Range("C2").Text  '  Ist Name
        objDocument.bookmarks.Add Name:=strBookmark1, Range:=objWordRangeBM1
    End If
 
        If objDocument.bookmarks.Exists(strBookmark2) = True Then
            Range("C1:D15").Copy 'kopiert die Zellen aus Excel
            Set objWordRange = objDocument.bookmarks(strBookmark2).Range  ' hier wird der TM-Range eingelesen
             objWordRange.tables(1).Delete 'das löscht deine "alte Tabelle"
             objWordRange.PasteSpecial DataType:=wdPasteRTF  'das fügt die neuen Daten als Word-Tabelle ein
             objDocument.bookmarks.Add Name:=strBookmark2, Range:=objWordRange.tables(1).Range    'und hier wird die TM wieder gesetzt
        End If


    ' Objektvariablen leeren (machst du immer dann, wenn du die nicht mehr brauchst, in jedem Fall am Ende. Einmal reicht aber.
    Set objWordRange = Nothing
    Set objDocument = Nothing

End Sub

Dabei habe ich das Einfügen der Daten statt über ein Bild über die Word-Tabelle gemacht. Das hat so seine Vorteile.
Dann habe ich dir auch im Dokument ein paar Anmerkungen hinterlassen, denn die Textmarke sollte für den Zweck rund um die ganze Tabelle in Word gelegt sein. Du hattest da eine offene TM drin. ( http://www.office-loesung.de/ftopic353355_0_0_asc.php )
Probiers mal aus.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 5196
Registriert: 19. Apr 2008, 00:14

Nächste

Zurück zu Word Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 Gäste