{"id":1532,"date":"2013-08-28T15:01:43","date_gmt":"2013-08-28T13:01:43","guid":{"rendered":"http:\/\/www.ramses.de\/?p=1532"},"modified":"2013-08-28T15:01:43","modified_gmt":"2013-08-28T13:01:43","slug":"faq-word-liste-aller-querverweise-drucken","status":"publish","type":"post","link":"https:\/\/www.ramses.de\/?p=1532","title":{"rendered":"FAQ Word &#8211; Liste aller Querverweise drucken"},"content":{"rendered":"<h2><strong>Problem <\/strong><\/h2>\n<p>In umfangreichen Dokumenten mit vielen Textmarken und Querverweisen verliert man mit der Zeit leicht die \u00dcbersicht, wie viele und welche Querverweise auf welche Textmarken verweisen.<\/p>\n<p>Gibt es eine M\u00f6glichkeit, alle Querverweise mit den dazugeh\u00f6rigen Zielen aufzulisten?<\/p>\n<h2><strong>L\u00f6sung <\/strong><\/h2>\n<p>Word selbst besitzt keinen eigenen Befehl f\u00fcr diesen Zweck. Mit einem VBA-Makro k\u00f6nnen Sie aber selbst die fehlende Funktionalit\u00e4t hinzuf\u00fcgen. Die im Anschluss vorgestellte L\u00f6sung durchsucht das aktive Dokument nach Querverweisen und erstellt dann in einem neuen Dokument eine \u00dcbersicht, in der die Position des Querverweises, das Ziel &#8211; also der Name der Textmarke &#8211; sowie die Position des Ziels genannt werden. Um das Makro in Word zu integrieren, gehen Sie wie folgt vor:<\/p>\n<p>1. Dr\u00fccken Sie in Word die Tastenkombination Alt+F11, um den Visual Basic-Editor zu \u00f6ffnen.<\/p>\n<p>2. Klicken Sie im Projekt-Explorer, der auf der linken Seite des Visual Basic-Editor-Fensters angezeigt wird, den Eintrag &#8222;Normal&#8220; an. So markieren Sie das Projekt der Standardvorlage NORMAL.DOT.<\/p>\n<p>3. W\u00e4hlen Sie das Men\u00fc Einf\u00fcgen-Modul an.<\/p>\n<p>4. In das daraufhin angezeigte Codefenster geben Sie folgende Prozedur ein:<\/p>\n<p>Sub ListAllRefs()<br \/>\nDim objTestDoc As Document, objOutputDoc As Document<br \/>\nDim objField As Field<br \/>\nDim objRefRange As Range<br \/>\nDim strRef As String, strPRef As String<br \/>\nDim lngFldType As Long<br \/>\nDim strFldCode As String<br \/>\nDim intFldLen As Integer<br \/>\nDim strMessage As String<br \/>\nDim strBookmark As String<br \/>\nOn Error GoTo ListRef_Error<br \/>\nApplication.ScreenUpdating = False<br \/>\nstrRef = &#8220; REF &#8220;<br \/>\nIf Val(Application.Version) &lt; 9 Then<br \/>\nstrPRef = &#8220; SEITENREF &#8220; Else strPRef = &#8220; PAGEREF &#8220;<br \/>\nEnd If<br \/>\nSet objTestDoc = ActiveDocument<br \/>\nSet objOutputDoc = Application.Documents.Add()<br \/>\nobjOutputDoc.Paragraphs.Last.Range.InsertAfter _<br \/>\n&#8222;Dokument &#8220; &amp; objTestDoc.Name &amp; _<br \/>\n&#8220; enth\u00e4lt folgende Querverweise:&#8220; &amp; vbCr objOutputDoc.Paragraphs.Last.Range _<br \/>\n.InsertParagraphAfter<br \/>\nFor Each objField In objTestDoc.Fields<br \/>\nlngFldType = objField.Type<br \/>\nstrFldCode = objField.Code<br \/>\nIf lngFldType = wdFieldRef _ Or lngFldType = wdFieldPageRef Then<br \/>\nobjField.Select<br \/>\nSelect Case lngFldType<br \/>\nCase wdFieldRef intFldLen = Len(strRef) + 1 strMessage = strRef &amp; &#8222;-Feld &#8220;<br \/>\nCase wdFieldPageRef intFldLen = Len(strPRef) + 1 strMessage = strPRef &amp; &#8222;-Feld &#8220;<br \/>\nEnd Select<br \/>\nstrBookmark = _<br \/>\nMid(strFldCode, intFldLen, _<br \/>\nInStr(intFldLen + 1, strFldCode, &#8220; &#8222;) _<br \/>\n&#8211; intFldLen) With ActiveDocument.Bookmarks<br \/>\nIf .Exists(strBookmark) Then<br \/>\nSet objRefRange = .Item(strBookmark).Range strMessage = strMessage &amp; &#8222;auf Seite &#8220; &amp; _<br \/>\nSelection.Information(wdActiveEndPageNumber) &amp; _<br \/>\n&#8220; in Zeile &#8220; &amp; _ Selection.Information( _<br \/>\nwdFirstCharacterLineNumber) &amp; _<br \/>\nvbCr &amp; &#8222;verweist auf die Textmarke &#8220; &amp; _<br \/>\nstrBookmark &amp; vbCr &amp; &#8222;auf Seite &#8220; &amp; _<br \/>\nobjRefRange.Information( _<br \/>\nwdActiveEndPageNumber) &amp; _<br \/>\n&#8220; in Zeile &#8220; &amp; _<br \/>\nobjRefRange.Information( _<br \/>\nwdFirstCharacterLineNumber) &amp; _<br \/>\nvbCr objOutputDoc.Paragraphs.Last.Range.InsertAfter _<br \/>\nstrMessage objOutputDoc.Paragraphs.Last._<br \/>\nRange.InsertParagraphAfter<br \/>\nEnd If<br \/>\nEnd With<br \/>\nEnd If<br \/>\nNext objField<br \/>\nobjOutputDoc.Activate<br \/>\nListRef_End:<br \/>\nSet objRefRange = Nothing<br \/>\nSet objField = Nothing<br \/>\nSet objOutputDoc = Nothing<br \/>\nSet objTestDoc = Nothing<br \/>\nApplication.ScreenUpdating = True<br \/>\nExit Sub<br \/>\nListRef_Error:<br \/>\nMsgBox &#8222;Fehler bei der Ausgabe der Querverweise.&#8220; &amp; _ vbCr &amp; &#8222;Fehler-Nr. &#8220; &amp; Err.Number &amp; &#8222;:&#8220; &amp; vbCr &amp; _ Err.Description<br \/>\nResume ListRef_End<br \/>\nEnd Sub<\/p>\n<p>Verlassen Sie den Visual Basic-Editor, indem Sie im Men\u00fc Datei den Befehl Schlie\u00dfen und zur\u00fcck zu Microsoft Word anw\u00e4hlen.<\/p>\n<p>Jetzt k\u00f6nnen Sie ein Dokument mit Querverweisen laden und die Funktionsweise des VBA-Makros ausprobieren. Zum Aufruf des Makros dr\u00fccken Sie Alt+F8, womit Sie ein Dialogfenster mit allen verf\u00fcgbaren Makros \u00f6ffnen. In der angezeigten Liste doppelklicken Sie auf den Makronamen &#8222;ListAllRefs&#8220;.<\/p>\n<p>Das Makro legt daraufhin ein neues Dokument an, in dem es die Details aller Querverweise ausgibt. Ein einzelner Eintrag k\u00f6nnte wie folgt aussehen:<\/p>\n<p>REF -Feld auf Seite 3 in Zeile 9verweist auf die Textmarke _Ref76099323auf Seite 5 in Zeile 22<\/p>\n<p>Falls Sie das Ausgabeformat \u00e4ndern wollen oder zus\u00e4tzliche Informationen ben\u00f6tigen, hier ein paar Details des Programmcodes:<\/p>\n<p>Am Anfang \u00fcbergibt die Prozedur die Feldnamen der Querverweise an die Variablen &#8222;strRef und &#8222;strPRef&#8220;. Verweise auf Inhalte werden als REF-Felder notiert, w\u00e4hrend Seitenverweise in ein PAGEREF- bzw. in Word 97 in ein SEITENREF-Feld integriert werden.<\/p>\n<p>Anschlie\u00dfend legt das Makro das Ausgabedokument an, in das es eine erl\u00e4uternde 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\u00fchrt werden, wenn es sich um REF- oder PAGEREF-Felder handelt:<br \/>\nIf lngFldType = wdFieldRef _Or lngFldType = wdFieldPageRef Then<br \/>\nDen Namen der Textmarke, auf die sich der Querverweis bezieht, ermitteln Sie anschlie\u00dfend in folgender Codezeile:<\/p>\n<p>strBookmark = _Mid(strFldCode, intFldLen, _InStr(intFldLen + 1, strFldCode, &#8220; &#8222;) _- intFldLen)<\/p>\n<p>So k\u00f6nnen Sie schlie\u00dflich die Informationen wie Seiten- und Zeilennummer mit Hilfe von Information-Eigenschaften auslesen &#8211; einmal f\u00fcr den Bereich der Ziel-Textmarke (&#8222;objRefRange&#8220;) und einmal f\u00fcr das aktuelle REF\/PAGEREF-Feld, das Sie zuvor markiert hatten und auf das Sie sich somit mit dem &#8222;Selection&#8220;-Objekt beziehen k\u00f6nnen. Die Angaben werden in der Textvariablen &#8222;strMessage&#8220; zusammengefasst, sodass sie sich per &#8222;InsertAfter&#8220; in das Ausgabedokument schreiben lassen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Problem In umfangreichen Dokumenten mit vielen Textmarken und Querverweisen verliert man mit der Zeit leicht die \u00dcbersicht, wie viele und welche Querverweise auf welche Textmarken &#8230; <a title=\"FAQ Word &#8211; Liste aller Querverweise drucken\" class=\"read-more\" href=\"https:\/\/www.ramses.de\/?p=1532\" aria-label=\"Mehr Informationen \u00fcber FAQ Word &#8211; Liste aller Querverweise drucken\">Weiterlesen &#8230;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[43,44],"tags":[72,68],"class_list":["post-1532","post","type-post","status-publish","format-standard","hentry","category-faq","category-word","tag-verlinkung","tag-word-2003"],"_links":{"self":[{"href":"https:\/\/www.ramses.de\/index.php?rest_route=\/wp\/v2\/posts\/1532","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ramses.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ramses.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ramses.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ramses.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1532"}],"version-history":[{"count":1,"href":"https:\/\/www.ramses.de\/index.php?rest_route=\/wp\/v2\/posts\/1532\/revisions"}],"predecessor-version":[{"id":1533,"href":"https:\/\/www.ramses.de\/index.php?rest_route=\/wp\/v2\/posts\/1532\/revisions\/1533"}],"wp:attachment":[{"href":"https:\/\/www.ramses.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1532"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ramses.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1532"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ramses.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1532"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}