Entwickler-Ecke

Alle Sprachen - Alle Plattformen - VBA Bookmarks funktionieren nicht


Kirk1701A - So 01.03.20 15:31
Titel: VBA Bookmarks funktionieren nicht
Hallo meine Freunde,

ich bin momentan an einem privaten VBA-Projekt, um meinen Briefkopf zu automatisieren, da der von mehreren Personen benutzt wird. Im Bild ist die leere Briefvorlage abgebildet. Die roten Rahmen umrahmen jeweils ein Bookmark, das ich in VBA ansprechen möchte. Aber leider wird der Wert nicht geschrieben. Hier mein Code, mit dem ich die String-Werte einsetze (es sind Variablen vom Typ "String"):


Quelltext
1:
ActiveDocument.Bookmarks("Handy").Range.InsertAfter = handy                    


Was mache ich falsch? Das nächste Problem ist, dass sich das VBA-Fenster auch nicht schließt, obwohl der Code "Unload Me" ausgeschrieben ist.

Ich hoffe, ihr könnt mir helfen.

LLAP
Euer Kirk


Gunther Troost - Mi 04.03.20 11:29

Lieber Kirk,

ich benutze für die Vorlage auch Bookmarks (Textmarken), und dabei springe ich mit folgender Prozedur zur Textmarke:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
Public Const einfachUnterstrichen = wdUnderlineSingle
Public Const mitAbsatz = True
Public Const ohneAbsatz = False
Public Const normal = 0
Public Const kursiv = 1
Public Const fett = 2
Public Const unterstrichen = 4
Public Const nichtUnterstrichen = wdUnderlineNone

Function GehezuTextmarke(ByVal Marke As String, Optional Expandiere = False, Optional GanzeMarke = False) As Boolean

    on Error GoTo GTFehler:
    Selection.ExtendMode = Expandiere
    Selection.GoTo What:=wdGoToBookmark, Name:=Marke
    If Not (GanzeMarke) Then Selection.MoveLeft Unit:=wdCharacter, Count:=1
    GehezuTextmarke = True
    Exit Function
    
GTFehler:
    GehezuTextmarke = False
       
End Function

Function Schreiben(Text As Variant, Optional ByVal Absatz As Boolean, Optional ByVal SchriftTyp As Integer = -1) As Boolean
    
    With Selection.Font
        If SchriftTyp <> -1 Then
            If SchriftTyp And fett Then .Bold = True
            If SchriftTyp And kursiv Then .Italic = True
            If SchriftTyp And unterstrichen Then .Underline = einfachUnterstrichen
        End If
        Selection.TypeText Text
        If SchriftTyp <> -1 Then
            .Bold = False
            .Italic = False
            .Underline = nichtUnterstrichen
        End If
    End With
    If Absatz Then
        Absaetze 1
    End If
    Schreiben = True

End Function


Der Aufruf erfolgt dann wie folgt:

Quelltext
1:
2:
3:
      if GeheZuTextMarke ("NameDerMarke", False, True) then
          Schreiben "Text für Marke"
      end if


Das sollte ohne Probleme funktionieren. Du musst in der Vorlage nur die entsprechenden Bereiche als Textmarke definieren. Am Besten mit einem Leerzeichen im Dokument, das die Textmarke umfasst.

Moderiert von user profile iconTh69: Vollzitat entfernt.