News

FAQ Word – Liste aller Querverweise drucken

Category:

FAQ, Word

0

Problem

In umfangreichen Dokumenten mit vielen Textmarken und Querverweisen verliert man mit der Zeit leicht die Übersicht, wie viele und welche Querverweise auf welche Textmarken verweisen.

Gibt es eine Möglichkeit, alle Querverweise mit den dazugehörigen Zielen aufzulisten?

Lösung

Word selbst besitzt keinen eigenen Befehl für diesen Zweck. Mit einem VBA-Makro können Sie aber selbst die fehlende Funktionalität hinzufügen. Die im Anschluss vorgestellte Lösung durchsucht das aktive Dokument nach Querverweisen und erstellt dann in einem neuen Dokument eine Übersicht, in der die Position des Querverweises, das Ziel – also der Name der Textmarke – sowie die Position des Ziels genannt werden. Um das Makro in Word zu integrieren, gehen Sie wie folgt vor:

1. Drücken Sie in Word die Tastenkombination Alt+F11, um den Visual Basic-Editor zu öffnen.

2. Klicken Sie im Projekt-Explorer, der auf der linken Seite des Visual Basic-Editor-Fensters angezeigt wird, den Eintrag „Normal“ an. So markieren Sie das Projekt der Standardvorlage NORMAL.DOT.

3. Wählen Sie das Menü Einfügen-Modul an.

4. In das daraufhin angezeigte Codefenster geben Sie folgende Prozedur ein:

Sub ListAllRefs()
Dim objTestDoc As Document, objOutputDoc As Document
Dim objField As Field
Dim objRefRange As Range
Dim strRef As String, strPRef As String
Dim lngFldType As Long
Dim strFldCode As String
Dim intFldLen As Integer
Dim strMessage As String
Dim strBookmark As String
On Error GoTo ListRef_Error
Application.ScreenUpdating = False
strRef = “ REF “
If Val(Application.Version) < 9 Then
strPRef = “ SEITENREF “ Else strPRef = “ PAGEREF “
End If
Set objTestDoc = ActiveDocument
Set objOutputDoc = Application.Documents.Add()
objOutputDoc.Paragraphs.Last.Range.InsertAfter _
„Dokument “ & objTestDoc.Name & _
“ enthält folgende Querverweise:“ & vbCr objOutputDoc.Paragraphs.Last.Range _
.InsertParagraphAfter
For Each objField In objTestDoc.Fields
lngFldType = objField.Type
strFldCode = objField.Code
If lngFldType = wdFieldRef _ Or lngFldType = wdFieldPageRef Then
objField.Select
Select Case lngFldType
Case wdFieldRef intFldLen = Len(strRef) + 1 strMessage = strRef & „-Feld “
Case wdFieldPageRef intFldLen = Len(strPRef) + 1 strMessage = strPRef & „-Feld “
End Select
strBookmark = _
Mid(strFldCode, intFldLen, _
InStr(intFldLen + 1, strFldCode, “ „) _
– intFldLen) With ActiveDocument.Bookmarks
If .Exists(strBookmark) Then
Set objRefRange = .Item(strBookmark).Range strMessage = strMessage & „auf Seite “ & _
Selection.Information(wdActiveEndPageNumber) & _
“ in Zeile “ & _ Selection.Information( _
wdFirstCharacterLineNumber) & _
vbCr & „verweist auf die Textmarke “ & _
strBookmark & vbCr & „auf Seite “ & _
objRefRange.Information( _
wdActiveEndPageNumber) & _
“ in Zeile “ & _
objRefRange.Information( _
wdFirstCharacterLineNumber) & _
vbCr objOutputDoc.Paragraphs.Last.Range.InsertAfter _
strMessage objOutputDoc.Paragraphs.Last._
Range.InsertParagraphAfter
End If
End With
End If
Next objField
objOutputDoc.Activate
ListRef_End:
Set objRefRange = Nothing
Set objField = Nothing
Set objOutputDoc = Nothing
Set objTestDoc = Nothing
Application.ScreenUpdating = True
Exit Sub
ListRef_Error:
MsgBox „Fehler bei der Ausgabe der Querverweise.“ & _ vbCr & „Fehler-Nr. “ & Err.Number & „:“ & vbCr & _ Err.Description
Resume ListRef_End
End Sub

Verlassen Sie den Visual Basic-Editor, indem Sie im Menü Datei den Befehl Schließen und zurück zu Microsoft Word anwählen.

Jetzt können Sie ein Dokument mit Querverweisen laden und die Funktionsweise des VBA-Makros ausprobieren. Zum Aufruf des Makros drücken Sie Alt+F8, womit Sie ein Dialogfenster mit allen verfügbaren Makros öffnen. In der angezeigten Liste doppelklicken Sie auf den Makronamen „ListAllRefs“.

Das Makro legt daraufhin ein neues Dokument an, in dem es die Details aller Querverweise ausgibt. Ein einzelner Eintrag könnte wie folgt aussehen:

REF -Feld auf Seite 3 in Zeile 9verweist auf die Textmarke _Ref76099323auf Seite 5 in Zeile 22

Falls Sie das Ausgabeformat ändern wollen oder zusätzliche Informationen benötigen, hier ein paar Details des Programmcodes:

Am Anfang übergibt die Prozedur die Feldnamen der Querverweise an die Variablen „strRef und „strPRef“. Verweise auf Inhalte werden als REF-Felder notiert, während Seitenverweise in ein PAGEREF- bzw. in Word 97 in ein SEITENREF-Feld integriert werden.

Anschließend legt das Makro das Ausgabedokument an, in das es eine erläuternde Textzeile mit dem Dateinamen schreibt. Danach werden alle Felder des Dokuments mit den Querverweisen in einer For Each-Next-Schleife durchlaufen, wobei weitere Aktionen nur durchgeführt werden, wenn es sich um REF- oder PAGEREF-Felder handelt:
If lngFldType = wdFieldRef _Or lngFldType = wdFieldPageRef Then
Den Namen der Textmarke, auf die sich der Querverweis bezieht, ermitteln Sie anschließend in folgender Codezeile:

strBookmark = _Mid(strFldCode, intFldLen, _InStr(intFldLen + 1, strFldCode, “ „) _- intFldLen)

So können Sie schließlich die Informationen wie Seiten- und Zeilennummer mit Hilfe von Information-Eigenschaften auslesen – einmal für den Bereich der Ziel-Textmarke („objRefRange“) und einmal für das aktuelle REF/PAGEREF-Feld, das Sie zuvor markiert hatten und auf das Sie sich somit mit dem „Selection“-Objekt beziehen können. Die Angaben werden in der Textvariablen „strMessage“ zusammengefasst, sodass sie sich per „InsertAfter“ in das Ausgabedokument schreiben lassen.

Tags: ,

Leave a Reply

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.