marcoborn
Goto Top

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:
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

Content-Key: 667527

Url: https://administrator.de/contentid/667527

Printed on: April 24, 2024 at 17:04 o'clock

Member: colinardo
Solution colinardo Jun 12, 2021 updated at 10:34:54 (UTC)
Goto Top
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:
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
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
Member: MarcoBorn
MarcoBorn Jun 12, 2021 at 10:59:20 (UTC)
Goto Top
Hallo Uwe,
ich habe den aufgezeichneten Code in ein neues Dokument eingefügt und dort getestet; dann traten diese Probleme auf. Deinen Code werde ich gleich übernehmen

Vielen Dank,
M. Born