Office: Aus dem Index ins Dokument springen

Helfe beim Thema Aus dem Index ins Dokument springen in Microsoft Word Hilfe um das Problem gemeinsam zu lösen; Hallo zusammen, ich bin grad dabei, Indexeinträge in einem längeren Dokument einzupflegen. Dabei wäre es echt hilfreich, wenn man vom Index aus an... Dieses Thema im Forum "Microsoft Word Hilfe" wurde erstellt von BHM, 16. September 2011.

  1. BHM
    BHM Erfahrener User

    Aus dem Index ins Dokument springen


    Hallo zusammen,

    ich bin grad dabei, Indexeinträge in einem längeren Dokument einzupflegen. Dabei wäre es echt hilfreich, wenn man vom Index aus an die entsprechende Verankerung im Dokument springen könnte, z.B. um Ungereimtheiten durch verschiedene Schreibweisen zu korrigieren.

    Beim Inhaltsverzeichnis kann man ja mit Strg die Seitenzahlen anklicken und dann dahin springen. DAS geht beim Index so leider nicht. Weiß jemand ob (und wie!) das geht?

    Danke.
    Britta
     
  2. Exl121150 Erfahrener User
    Hallo Britta,
    Das geht nur, wenn man ein VBA-Makro installiert. Nachfolgend habe ich Dir ein solches gebastelt.

    Code:
    Public Sub Suchen_XE_Feld()
      Dim RgIndex As Range, SeiteNr As Long, IndexEintrag As String
      Dim Pg As Page, Rect As Rectangle
      Dim Fld As Field, RgFld As Range, FldEintrag$
      Dim Gefunden As Boolean
      
      'Ermittelt die selektierte Seitennummer
      Set RgIndex = Selection.Range
      With RgIndex
        Do While Trim(.Text) = ""
          .MoveEnd Unit:=wdWord, Count:=1
        Loop
        SeiteNr = .Text
      End With
      
      'Erweitert den Bereich bis an den Anfang des Indexeintragsabsatzes;
      'Ermittelt den Indexeintrag
      RgIndex.MoveStart Unit:=wdParagraph, Count:=-1
      Set RgIndex = RgIndex.Paragraphs(1).Range
      IndexEintrag = GetIndex(RgIndex)
      
      Gefunden = False
    Nxt_Indexsuche:
      Set Pg = ActiveDocument.ActiveWindow.Panes(1).Pages(SeiteNr)
      'Schaue in allen Textrechtecken der betreffende Seite nach:
      For Each Rect In Pg.Rectangles
        With Rect
          If .RectangleType = wdTextRectangle Then
            For Each Fld In .Range.Fields
              'Suche alle Felder, die Indexeinträge "XE" festlegen
              With Fld
                If .Type = wdFieldIndexEntry Then
                  Set RgFld = Fld.Code
                  FldEintrag$ = GetEintrag(RgFld)
                  'Vergleiche den gefundenen Feldindex mit dem Indexverz.index
                  If FldEintrag$ = IndexEintrag$ Then
                    'Markiere das Indexfeld und das davorliegende Wort
                    Fld.Select
                    Selection.MoveStart Unit:=wdWord, Count:=-1
                    Gefunden = True
                    Exit For 'Fld
                  End If
                End If
              End With
            Next Fld
          End If
        End With
        If Gefunden Then Exit For 'Rect
      Next Rect
      
      If Not Gefunden Then
        'Falls nichts gefunden, informiere und erfrage, ob Suche auf der Vorseite wiederholt werden soll:
        If MsgBox(Prompt:="Der Indexeintrag '" & IndexEintrag & "' wurde auf Seite " & SeiteNr & " nicht gefunden." _
                          & vbCrLf & vbCrLf & _
                          "Soll auf der davorliegenden Seite gesucht werden?", _
               Title:="Nicht gefundener Index", _
               Buttons:=vbQuestion + vbYesNo) = vbYes Then
           SeiteNr = SeiteNr - 1
           If SeiteNr > 0 Then GoTo Nxt_Indexsuche
        End If
      End If
      
    End Sub
    
    Private Function GetEintrag(Rg As Range, Optional Nr% = 1) As String
      GetEintrag = Split(Rg.Text, Chr$(34))(Nr%)
    End Function
    Private Function GetIndex(Rg As Range) As String
      Dim S$, I%, W$
      S$ = ""
      For I% = 1 To Rg.Words.Count
        W$ = Rg.Words(I%)
        If IsNumeric(W$) Or W$ = "," Or W$ = vbTab Then Exit For
        S$ = S$ & W$
      Next I%
      GetIndex = Trim$(S$)
    End Function
    Installation:
    Diesen Code markieren, kopieren und im VBA-Editor in ein 'ThisDocument'-Modul entweder der Normal.dot oder des Project einfügen.

    Anwendung:
    1) Im Indexverzeichnis die Seitennummer eines Indexeintrages markieren oder aber den Cursor unmittelbar vor die Seitennummer stellen.
    2) Die Tastenkombination Alt+F8 drücken, gefolgt von der EINGABE-Taste, um das Makro auszuführen.
    3) Daraufhin wird im Dokumenttext der betreffenden Seite der Indexfestlegung (XE-Feld) gesucht und dieses Feld zusammen mit dem Wort davor markiert.
    4) In manchen Fällen kann es sein, dass die Seitennummern des Indexverzeichnisses nicht exakt mit den Seitennummern des Dokumentes übereinstimmen. Dann fragt das Makro nach, ob die Suche auf der Vorseite fortgesetzt werden soll.
     
    Exl121150, 17. September 2011
    #2
  3. BHM
    BHM Erfahrener User
    Hallo Anton,

    ganz herzlichen Dank für Deine Mühe!

    Leider funktioniert das Makro so bei mir nicht:
    Erstmal findet es manche Indexeinträge nicht, wenn dieser Leerzeichen, Bindestriche oder sowas enthält, dann bleibt die Variable IndexEintrag leer. Merkwürdigerweise findet es "run-time error" aber "64 Bit integer" findet es nicht.
    Manche (die meisten, leider) Einträge findet es dann aber im Text trotzdem nicht, z.B. findet es den Indexeintrag "warranty", den Indexeintrag "XML" findet es aber nicht, auch nicht den schon erwähnten "run-time error".

    Woran kann das liegen?

    Trotzdem nochmal danke, so habe ich zumindest schonmal eine Grundlage.

    Gruß
    Britta
     
  4. Exl121150 Erfahrener User

    Aus dem Index ins Dokument springen

    Hallo Britta,

    das ist mir klar, die Ursache dafür ist der 64er am Anfang des Indexeintrages.
    Ein gewisses Problem stellte für mich dar, zu erkennen, wo ein Indexeintrag endet und wo die dazugehörige Seitennummernliste beginnt. Diesen Mechanismus habe ich in der folgenden Makroversion verbessert, ferner auch den Mechanismus, mit dem das Makro die tatsächlich zur Seitennummernliste passende Seite findet.

    Manchmal passiert es, dass der Cursor zwar an die gefundene Stelle im Text springt, das dazugehörige Wort aber nicht markiert ist - meist dann, wenn die Feldanzeige im Text ausgeschaltet ist.

    Auf eines ist aber auf jeden Fall zu achten: Dass im XE-Feld der in Anführungszeichen stehende Eintrag kein abschließendes Leerzeichen haben darf.
    Korrekt: { XE "Eintrag" ... }
    Falsch: { XE "Eintrag " ... }

    Ich hoffe, dass das Makro jetzt besser funktioniert.
    Code:
    Public Sub Suchen_XE_Feld()
      Dim RgIndex As Range, SeiteNr As Long, IndEintrag As String
      Dim Pg As Page, Rect As Rectangle, Pn As Pane
      Dim Fld As Field, RgFld As Range, FldEintrag$
      Dim Gefunden As Boolean, ShowModus As Boolean
      
      'Ermittelt die selektierte Seitennummer
      Set RgIndex = Selection.Range
      With RgIndex
        Do While Trim(.Text) = ""
          .MoveEnd Unit:=wdWord, Count:=1
        Loop
        SeiteNr = .Text
      End With
      
      'Erweitert den Bereich bis an den Anfang des Indexeintragsabsatzes;
      'Ermittelt den Indexeintrag
      RgIndex.MoveStart Unit:=wdParagraph, Count:=-1
      Set RgIndex = RgIndex.Paragraphs(1).Range
      IndEintrag = GetIndEintrag(RgIndex)
      
      'Schalte den Feldanzeige-Modus ein, falls er nicht eingeschaltet ist:
      Set Pn = ActiveDocument.ActiveWindow.ActivePane
      With Pn.View
        ShowModus = .ShowAll
        .ShowAll = True
      End With
      
      Gefunden = False
    Nxt_Indexsuche:
      Set Pg = ActiveDocument.ActiveWindow.ActivePane.Pages(SeiteNr)
      'Schaue in allen Textrechtecken der betreffenden Seite nach:
      For Each Rect In Pg.Rectangles
        With Rect
          If .RectangleType = wdTextRectangle Then
            For Each Fld In .Range.Fields
              'Suche alle Felder, die Indexeinträge "XE" festlegen
              With Fld
                If .Type = wdFieldIndexEntry Then
                  Set RgFld = Fld.Code
                  FldEintrag$ = GetFldEintrag(RgFld)
                  'Vergleiche den gefundenen Feldindex mit dem Indexverz.index
                  If FldEintrag$ = IndEintrag$ Then
                    'Markiere das Indexfeld und das davorliegende Wort
                    Fld.Select
                    Selection.MoveStart Unit:=wdWord, Count:=-1
                    Gefunden = True
                    Exit For 'Fld
                  End If
                End If
              End With
            Next Fld
          End If
        End With
        If Gefunden Then Exit For 'Rect
      Next Rect
      
      If Not Gefunden Then
        'Falls nichts gefunden, informiere und erfrage, ob Suche auf der Vorseite wiederholt werden soll:
        If MsgBox(Prompt:="Der Indexeintrag '" & IndEintrag & "' wurde auf Seite " & SeiteNr & " nicht gefunden." _
                          & vbCrLf & vbCrLf & _
                          "Soll auf der davorliegenden Seite gesucht werden?", _
               Title:="Nicht gefundener Index", _
               Buttons:=vbQuestion + vbYesNo) = vbYes Then
           SeiteNr = SeiteNr - 1
           If SeiteNr > 0 Then GoTo Nxt_Indexsuche
        End If
      End If
      
      With Pn.View
        'Stelle bezüglich Feldanzeige-Modus den ursprünglichen Zustand her
        If Not ShowModus Then .ShowAll = False
      End With
    End Sub
    '
    'Ermittelt den Indexeintrag in einem Indexeintragsabsatz:
    '  es wird vorausgesetzt, dass entweder durch ein Tab-Zeichen
    '  oder durch 2 Leerzeichen von der Seitennummernliste getrennt ist.
    '
    Private Function GetIndEintrag(Rg As Range) As String
      Dim IndEintrag$, PsTab&
      PsTab& = InStr(Rg.Text, vbTab)
      If PsTab& Then
        'Tabulator ist im Indexeintrag enthalten
        IndEintrag$ = Left(Rg.Text, PsTab& - 1)
      Else
        'Entfernen der Seitennummernaufzählungen
        PsTab& = InStrRev(Rg.Text, "  ")
        If PsTab& Then
          IndEintrag$ = Trim$(Left$(Rg.Text, PsTab& - 1))
        Else
          IndEintrag$ = Rg.Words(1).Text
        End If
      End If
      GetIndEintrag = Trim$(IndEintrag$)
    End Function
    '
    'Ermittelt den Feldeintrag in einem XE-Feld;
    '  es wird vorausgesetzt, dass er in "..." eingeschlossen ist.
    '
    Private Function GetFldEintrag(Rg As Range, Optional Nr% = 1) As String
      GetFldEintrag = Split(Rg.Text, Chr$(34))(Nr%)
    End Function
     
    Exl121150, 19. September 2011
    #4
  5. BHM
    BHM Erfahrener User
    Hallo Anton

    Suuuuper!!! :-D :-D :-D :-D :-D

    Jetzt geht's und das Makro hat alles gefunden!

    Vielen, vielen Dank!!!
    Du hast mich vor dem Wahnsinn gerettet!
    Liebe Grüße
    Britta
     
Thema:

Aus dem Index ins Dokument springen

Die Seite wird geladen...
  1. Aus dem Index ins Dokument springen - Similar Threads - Index Dokument springen

  2. Grauer Streifen nach Index einfügen (Word 365, Mac)

    in Microsoft Word Hilfe
    Grauer Streifen nach Index einfügen (Word 365, Mac): Hat schonmal jemand so etwas gehabt (siehe Anhang)? Danke im Voraus!
  3. Ergebnis aus INDEX und Vergleich Formel weiter Verwenden

    in Microsoft Excel Hilfe
    Ergebnis aus INDEX und Vergleich Formel weiter Verwenden: Hallo :-) Ich möchte ein Ergebnis aus einer Formel (Index/Vergleich) mit einer Wenn Funktion auswerten. Wenn sieht aber nicht das Ergebnis in dem Kästchen sondern nur die Formel!...
  4. Mehrere Begriffe in Register/Index unter einem Begriff?

    in Microsoft Word Hilfe
    Mehrere Begriffe in Register/Index unter einem Begriff?: Hi ihr Lieben! gibt es eine Möglichkeit in Word bei einem Register/Index mehrere Wörter unter einem Begriff zu markieren? Wie im Screenshot die Wörter "entgangener Gewinn/Gewinnausfall" (oder...
  5. Daten per Index-Funktion übertragen

    in Microsoft Excel Hilfe
    Daten per Index-Funktion übertragen: Hallo zusammen, ich stehe derzeit vor folgender Herausforderung: ich möchte Daten aus einer Martix per Index-Vergleich-Funktion in eine andere Matrix übertragen. Ich habe eine vereinfachte...
  6. Formel mit INDEX, MATCH und MAX gibt Fehler #NAME!

    in Microsoft Excel Hilfe
    Formel mit INDEX, MATCH und MAX gibt Fehler #NAME!: Hallo zusammen, ich habe mit Hilfe von Copliot eine Formel gebaut, die 2 Werte aus einer Tabelle 1 in einer Tabelle 2 prüfen soll und wenn die Konstellation vorkommt, soll das größte Wert dieser...
  7. Word 365 Index ohne Fußnoten

    in Microsoft Word Hilfe
    Word 365 Index ohne Fußnoten: Hallo! Ist es möglich in Word 365 einen Index (Namensverzeichnis) zu erstellen, der die Fußnoten nicht berücksichtigt? Wenn ja, wie?
  8. SUMMEWENN mit verschiedenen Kriterien

    in Microsoft Excel Hilfe
    SUMMEWENN mit verschiedenen Kriterien: Hallo, ein neuer Versuch. In der folgenden Tabelle habe Daten die mit SUMMEWENN verschieden WGR – Warengruppen zusammenzähle. Die Hardware WGR wird immer gezählt, die Spalte Zubehör nur wenn...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden