Word-VBA: 2. Index hinzufügen
Hallo Forum,
ich möchte gern per VBA 2 Indices zu einem Dokument hinzufügen. Dafür nutze ich folgenden Code:
Wenn ich den Code durch Aufzeichnen erhalte, habe ich anschließend die beiden Indices. Lasse ich den aufgezeichneten Code anschließend nochmal durchlaufen, wird der 1. Index immer (beim 2. Aufruf von .indexes.add) durch den 2. Index ersetzt und in der Zeile mit .Fields(2) bekomme ich eine Fehlermeldung, dass kein 2. Index vorhanden ist.
Beim manuellen Erstellen/Aufzeichnen werde ich gefragt, ob ich beim Erstellen des zweiten den ersten Index überschreiben will, aber dies scheint im Code nicht berücksicht zu werden. In der Hilfe gibt es auch keine Einstellung dazu.
Wie kann ich per VBA einen 2. Index anlegen?
Vielen Dank im voraus,
M. Born
ich möchte gern per VBA 2 Indices zu einem Dokument hinzufügen. Dafür nutze ich folgenden Code:
Sub Makro1()
With ActiveDocument
.Indexes.Add Range:=Selection.Range, HeadingSeparator:=wdHeadingSeparatorNone, Type:=wdIndexIndent, RightAlignPageNumbers:=True, NumberOfColumns:=2, IndexLanguage:=wdGerman
.Indexes(1).TabLeader = wdTabLeaderDots
.Fields(1).Code.Text = .Fields(1).Code.Text & "\f ""namen"""
End With
Selection.TypeParagraph
With ActiveDocument
.Indexes.Add Range:=Selection.Range, HeadingSeparator:=wdHeadingSeparatorNone, Type:=wdIndexIndent, RightAlignPageNumbers:=True, NumberOfColumns:=2, IndexLanguage:=wdGerman
.Indexes(1).TabLeader = wdTabLeaderDots
.Fields(2).Code.Text = .Fields(2).Code.Text & "\f ""orte"""
End With
Selection.MoveLeft Unit:=wdCharacter, Count:=1
End Sub
Wenn ich den Code durch Aufzeichnen erhalte, habe ich anschließend die beiden Indices. Lasse ich den aufgezeichneten Code anschließend nochmal durchlaufen, wird der 1. Index immer (beim 2. Aufruf von .indexes.add) durch den 2. Index ersetzt und in der Zeile mit .Fields(2) bekomme ich eine Fehlermeldung, dass kein 2. Index vorhanden ist.
Beim manuellen Erstellen/Aufzeichnen werde ich gefragt, ob ich beim Erstellen des zweiten den ersten Index überschreiben will, aber dies scheint im Code nicht berücksicht zu werden. In der Hilfe gibt es auch keine Einstellung dazu.
Wie kann ich per VBA einen 2. Index anlegen?
Vielen Dank im voraus,
M. Born
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 667527
Url: https://administrator.de/contentid/667527
Ausgedruckt am: 18.12.2024 um 01:12 Uhr
2 Kommentare
Neuester Kommentar
Servus Marco.
Deine Beschreibung ist leider etwas verwirrend. Du willst einen zweiten Index erstellen aber dein Code erstellt ja schon zwei Indexe, beim erneuten ausführen Hättest du ja dann derer 4!. Der VBA Code den man aufgezeichnet arbeitet hier meist mit festen Indizes, das ist im praktischen Einsatz meist zu starr und führt dann genau zu solchen Fehlern das auf die falschen oder nicht mehr existenten Objekte verwiesen wird.
Wenn du also bei jedem Ausführen deines Makros einen neuen Index einfügen möchtest geht das bspw. so:
Hier wird also nicht mit Objekt-Indizes (1) (2) usw, gearbeitet sondern der Index direkt über das bei der Add-Methode zurückgegebene Objekt bearbeitet, das ist bei dynamischen Arbeiten meist die bessere Wahl weil dann eindeutig das Objekt bearbeitet wird das man auch gerade erstellt hat.
Grüße Uwe
Deine Beschreibung ist leider etwas verwirrend. Du willst einen zweiten Index erstellen aber dein Code erstellt ja schon zwei Indexe, beim erneuten ausführen Hättest du ja dann derer 4!. Der VBA Code den man aufgezeichnet arbeitet hier meist mit festen Indizes, das ist im praktischen Einsatz meist zu starr und führt dann genau zu solchen Fehlern das auf die falschen oder nicht mehr existenten Objekte verwiesen wird.
Wenn du also bei jedem Ausführen deines Makros einen neuen Index einfügen möchtest geht das bspw. so:
Sub AddNewIndexAtSelection()
Dim idx As Index
With ActiveDocument
Set idx = .Indexes.Add(Range:=Selection.Range, HeadingSeparator:=wdHeadingSeparatorNone, Type:=wdIndexIndent, RightAlignPageNumbers:=True, NumberOfColumns:=2, IndexLanguage:=wdGerman)
idx.TabLeader = wdTabLeaderDots
End With
End Sub
Grüße Uwe