{"id":1491,"date":"2012-01-30T19:29:04","date_gmt":"2012-01-30T17:29:04","guid":{"rendered":"http:\/\/www.kastenmaier.de\/?p=1491"},"modified":"2019-09-20T16:47:54","modified_gmt":"2019-09-20T15:47:54","slug":"vsto-word-dokument-aktualisieren","status":"publish","type":"post","link":"https:\/\/www.kastenmaier.de\/?p=1491","title":{"rendered":"VSTO &#8211; Word: Dokument aktualisieren"},"content":{"rendered":"<h1><span style=\"font-size: large;\">Beschreibung<\/span><\/h1>\n<p>Wenn Dokumente mit Inhaltsverzeichnis, Textmarken usw. in Word aktualisiert werden m\u00fcssen, entdeckt man schnell, dass die einfache L\u00f6sung alles zu markieren (STRG-A) und anschlie\u00dfend zu aktualisieren (F9), nicht wirklich alles aktualisiert. Kopf- und Fu\u00dfzeilen sind von dieser Methoden ausgeschlossen. Au\u00dferdem muss anschlie\u00dfend nach fehlerhaften Verweisquellen usw. gesucht werden.&nbsp;<!--more-->Das folgende Makro hilft in diesem Fall weiter. Das Dokument wird vollst\u00e4ndig aktualisiert. Wird ein Fehler gefunden, bleibt der Cursor an der entsprechenden Stelle stehen, so &nbsp;dass man das Dokument korrigieren &nbsp;kann.<\/p>\n<p>Das Makro ist in VB.NET geschrieben, kann aber leicht in VBA portiert werden. Bei Fragen, einfach die Kommentarfunktion benutzen.<\/p>\n<p>Damit die Funktion funktioniert, wird dar\u00fcber hinaus die Funktion <a href=\"https:\/\/www.kastenmaier.de\/?p=1494\" target=\"_blank\" rel=\"noopener noreferrer\">fehlerhafte Verweisquellen finden<\/a> ben\u00f6tigt.<br \/>\n<img decoding=\"async\" title=\"Weiterlesen \u2026\" src=\"http:\/\/www.kastenmaier.de\/wp-includes\/js\/tinymce\/plugins\/wordpress\/img\/trans.gif\" alt=\"\"\/><\/p>\n<h1><span style=\"font-size: large;\">Sourcecode<\/span><\/h1>\n<pre class=\"brush: vbnet; gutter: true\">&#039; Word-Objekt\nPublic objWord As Microsoft.Office.Interop.Word.Application = Globals.Ribbon_Class.Application\n\n&#039; Dokument aktualisieren und beim Auffinden von fehlerhafte Verweisequellen an der entsprechenden Stelle stehenbleiben\nSub DokumentAktualisieren()\n    If Len(objWord.ActiveDocument.Name) &gt; 0 Then\n        Dim bState As Byte\n        &#039; bState-Werte:\n        &#039;   0: Initialisierung\n        &#039;   1: Ansichteinstellungen\n        &#039;   2: Kopf- und Fu\u00dfzeilen aktualisieren\n        &#039;   3: Verzeichnisse aktualisieren\n        &#039;   4: Fehlerhafte Verweisquellen im Text suchen\n        &#039;   5: Fehlerhafte Verweisquellen in Kopfzeile suchen\n        &#039;   6: Fehlerhafte Verweisquellen in Fu\u00dfzeile suchen\n        &#039;   7: Wechsel auf letzte Seite\n        &#039;   8: Keine Fehler gefunden\n        &#039;   9: Fehler gefunden\n        &#039;  10: Statemachine beenden\n\n        Dim bFoundError As Boolean\n        Dim iPage As Integer\n        Dim iCurViewType As Integer\n        Dim rCurPos As Word.Range\n        Dim bShowRevisionsAndComments As Boolean\n        Dim bRevisionsView As Byte\n        Dim bMaxState As Byte\n\n        bMaxState = 10\n        bState = 0\n\n        rCurPos = objWord.Selection.Range\n\n        While bState &gt;= 0 And bState &lt;= bMaxState\n            Select Case bState\n\n                Case 0\n                    &#039; Initialisierung\n\n                    Try\n                        &#039; Variablen initialisieren\n                        bFoundError = False\n                        iPage = 1\n\n                        &#039; Bildschirmaktualisierung abschalten\n                        objWord.Application.ScreenUpdating = False\n\n                        &#039; Aktuelle Postion zwischenspeichern\n                        rCurPos = objWord.Selection.Range\n\n                        &#039; Aktuelle Einstellung der Anzeige von \u00c4nderungsmarkierungen zwischenspeichern\n                        With objWord.ActiveWindow.View\n                            bShowRevisionsAndComments = .ShowRevisionsAndComments\n                            bRevisionsView = .RevisionsView\n                        End With\n\n                        &#039; In Zustand &quot;Ansichteinstellungen&quot; wechseln\n                        bState = 1\n                    Catch ex As Exception\n                        MsgBox(&quot;Fehler in Zustand &quot; &amp; bState &amp; &quot;:&quot; &amp; vbNewLine &amp; _\n                               ex.Message, _\n                               MsgBoxStyle.Critical, _\n                               &quot;Fehler&quot;)\n\n                        &#039; Funktion beenden und nicht in letzten Zustand springen, da die n\u00f6tigen Variablen evtl. nicht initialisiert wurden\n                        Exit Sub\n                    End Try\n\n                Case 1\n                    &#039; Ansichteinstellungen\n\n                    Try\n                        With objWord.ActiveWindow\n                            &#039; Ansicht pr\u00fcfen und gegebenenfalls wechseln (betrifft aufgesplittete Darstellung)\n                            If .View.SplitSpecial &lt;&gt; wdPaneNone Then\n                                .Panes(2).Close()\n                            End If\n\n                            With .ActivePane.View\n                                &#039; Ansicht zwischenspeichern\n                                iCurViewType = .Type\n                                If (.Type = wdNormalView Or _\n                                    .Type = wdOutlineView) Then\n                                    .Type = wdPrintView\n                                End If\n\n                                &#039; Darstellung der \u00c4nderungsmarkierungen abschalten und auf Endg\u00fcltige Darstellung wechseln\n                                .ShowRevisionsAndComments = False\n                                .RevisionsView = wdRevisionsViewFinal\n                            End With\n                        End With\n\n                        &#039; In Zustand &quot;Kopf- und Fu\u00dfzeilen aktualisieren&quot; wechseln\n                        bState = 2\n                    Catch ex As Exception\n                        MsgBox(&quot;Fehler in Zustand &quot; &amp; bState &amp; &quot;:&quot; &amp; vbNewLine &amp; _\n                               ex.Message, _\n                               MsgBoxStyle.Critical, _\n                               &quot;Fehler&quot;)\n\n                        &#039; In Zustand &quot;Statemachine beenden&quot; wechseln\n                        bState = bMaxState\n                    End Try\n\n                Case 2\n                    &#039; Kopf- und Fu\u00dfzeilen aktualisieren\n\n                    Try\n                        With objWord.ActiveDocument\n                            &#039; Wechsel in die Druckvorschau und zur\u00fcck um Kopf- und Fu\u00dfzeilen zu aktualisieren\n                            .PrintPreview()\n                            .ClosePrintPreview()\n                        End With\n\n                        &#039; In Zustand &quot;Verzeichnisse aktualisieren&quot; wechseln\n                        bState = 3\n                    Catch ex As Exception\n                        MsgBox(&quot;Fehler in Zustand &quot; &amp; bState &amp; &quot;:&quot; &amp; vbNewLine &amp; _\n                               ex.Message, _\n                               MsgBoxStyle.Critical, _\n                               &quot;Fehler&quot;)\n\n                        &#039; In Zustand &quot;Statemachine beenden&quot; wechseln\n                        bState = bMaxState\n                    End Try\n\n                Case 3\n                    &#039; Verzeichnisse aktualisieren\n\n                    Try\n                        With objWord.Selection\n                            &#039; Gesamtes Dokument markieren und alle Felder aktualisieren\n                            .WholeStory()\n                            .Fields.Update()\n                        End With\n\n                        &#039; Alle vorhandenen Verzeichnisse aktualisieren\n                        &#039; Inhaltsverzeichnis\n                        Dim oTOC As Word.TableOfContents\n                        For Each oTOC In objWord.ActiveDocument.TablesOfContents\n                            oTOC.Update()\n                        Next oTOC\n\n                        &#039; Abbildungsverzeichnis\n                        Dim oTOF As Word.TableOfFigures\n                        For Each oTOF In objWord.ActiveDocument.TablesOfFigures\n                            oTOF.Update()\n                        Next oTOF\n\n                        &#039; Rechtsgrundlagenverzeichnisse\n                        Dim oTOA As Word.TableOfAuthorities\n                        For Each oTOA In objWord.ActiveDocument.TablesOfAuthorities\n                            oTOA.Update()\n                        Next oTOA\n\n                        &#039; In Zustand &quot;Fehlerhafte Verweisquellen im Text suchen&quot; wechseln\n                        bState = 4\n                    Catch ex As Exception\n                        MsgBox(&quot;Fehler in Zustand &quot; &amp; bState &amp; &quot;:&quot; &amp; vbNewLine &amp; _\n                               ex.Message, _\n                               MsgBoxStyle.Critical, _\n                               &quot;Fehler&quot;)\n\n                        &#039; In Zustand &quot;Statemachine beenden&quot; wechseln\n                        bState = bMaxState\n                    End Try\n\n                Case 4\n                    &#039; Fehlerhafte Verweisquellen im Text suchen\n\n                    Try\n                        With objWord.Selection\n                            &#039; Nach fehlerhaften Verweisquellen im Text suchen\n                            &#039; Wechsel auf erste Seite\n                            .HomeKey(Unit:=wdStory)\n                            &#039; Nach fehlerhaften Verweisquellen im Text suchen\n                            bFoundError = findFehlerhafteVerweisquellen()\n                        End With\n\n                        If bFoundError Then\n                            &#039; In Zustand &quot;Fehler gefunden&quot; wechseln\n                            bState = 9\n                        Else\n                            &#039; In Zustand &quot;Fehlerhafte Verweisquellen in Kopfzeile suchen&quot; wechseln\n                            bState = 5\n                        End If\n                    Catch ex As Exception\n                        MsgBox(&quot;Fehler in Zustand &quot; &amp; bState &amp; &quot;:&quot; &amp; vbNewLine &amp; _\n                               ex.Message, _\n                               MsgBoxStyle.Critical, _\n                               &quot;Fehler&quot;)\n\n                        &#039; In Zustand &quot;Statemachine beenden&quot; wechseln\n                        bState = bMaxState\n                    End Try\n\n                Case 5\n                    &#039; Fehlerhafte Verweisquellen in Kopfzeile suchen\n\n                    Try\n                        With objWord.Selection\n                            &#039; Nach Fehlern in der Kopf- und Fu\u00dfzeile suchen\n                            If iPage = 1 Then\n                                &#039; Wechsel auf erste Seite\n                                .HomeKey(Unit:=wdStory)\n                            Else\n                                &#039; Wechsel auf letzte Seite\n                                .EndKey(Unit:=wdStory)\n                            End If\n\n                            Try\n                                &#039; In Kopfzeile wechseln\n                                objWord.ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader\n\n                                &#039; Wenn Kopfzeile vorhanden, gesamten Kopfzeilentext markieren und nach Fehlern suchen\n                                .WholeStory()\n                                &#039; Nach fehlerhaften Verweisquellen im Text suchen\n                                bFoundError = findFehlerhafteVerweisquellen()\n                            Catch ex As Exception\n                                &#039; In Zustand 6: &quot;Fehlerhafte Verweisquellen in Fu\u00dfzeile suchen&quot; wechseln\n                                bFoundError = False\n                            End Try\n\n                        End With\n\n                        If bFoundError Then\n                            &#039; In Zustand &quot;Fehler gefunden&quot; wechseln\n                            bState = 9\n                        Else\n                            &#039; In Zustand &quot;Fehlerhafte Verweisquellen in Fu\u00dfzeile suchen&quot; wechseln\n                            bState = 6\n                        End If\n                    Catch ex As Exception\n                        MsgBox(&quot;Fehler in Zustand &quot; &amp; bState &amp; &quot;:&quot; &amp; vbNewLine &amp; _\n                               ex.Message, _\n                               MsgBoxStyle.Critical, _\n                               &quot;Fehler&quot;)\n\n                        &#039; In Zustand &quot;Statemachine beenden&quot; wechseln\n                        bState = bMaxState\n                    End Try\n\n                Case 6\n                    &#039; Fehlerhafte Verweisquellen in Fu\u00dfzeile suchen\n\n                    Try\n                        &#039; In Fu\u00dfzeile wechseln und nach Fehlern suchen\n                        objWord.ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter\n\n                        With objWord.Selection\n                            &#039; gesamten Fu\u00dfzeilentext markieren und nach Fehlern suchen\n                            .WholeStory()\n                            &#039; Nach fehlerhaften Verweisquellen im Text suchen\n                            bFoundError = findFehlerhafteVerweisquellen()\n                        End With\n                    Catch ex As Exception\n                        &#039; In Zustand 7: &quot;Wechsel auf letzte Seite&quot; wechseln\n                        bFoundError = False\n                    End Try\n\n                    If bFoundError Then\n                        &#039; In Zustand &quot;Fehler gefunden&quot; wechseln\n                        bState = 9\n                    Else\n                        &#039; In Zustand &quot;Wechsel auf letzte Seite&quot; wechseln\n                        bState = 7\n                    End If\n\n                Case 7\n                    &#039; Wechsel auf letzte Seite\n\n                    Try\n                        &#039; wenn Position auf erster Seite, dann Wechsel auf letzte Seite\n                        If iPage = 1 Then\n                            iPage = 2\n                            &#039; Wechseln in das Dokument\n                            objWord.ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument\n\n                            &#039; In Zustand &quot;Fehlerhafte Verweisquellen in Kopfzeile suchen&quot; wechseln\n                            bState = 5\n                        Else\n                            &#039; In Zustand &quot;Keine Fehler gefunden&quot; wechseln\n                            bState = 8\n                        End If\n                    Catch ex As Exception\n                        MsgBox(&quot;Fehler in Zustand &quot; &amp; bState &amp; &quot;:&quot; &amp; vbNewLine &amp; _\n                               ex.Message, _\n                               MsgBoxStyle.Critical, _\n                               &quot;Fehler&quot;)\n\n                        &#039; In Zustand &quot;Statemachine beenden&quot; wechseln\n                        bState = bMaxState\n                    End Try\n\n                Case 8\n                    &#039; Keine Fehler gefunden\n\n                    Try\n                        With objWord.ActiveWindow.ActivePane.View\n                            &#039; Wechseln in das Dokument\n                            .SeekView = wdSeekMainDocument\n                            &#039; Wechsel auf erste Seite\n                            objWord.Selection.HomeKey(Unit:=wdStory)\n                            &#039; Ansicht wiederherstellen\n                            .Type = iCurViewType\n                            &#039; Aktuelle Postion wiederherstellen\n                            rCurPos.Select()\n                        End With\n\n                        &#039; In Zustand &quot;Statemachine beenden&quot; wechseln\n                        bState = bMaxState\n                    Catch ex As Exception\n                        MsgBox(&quot;Fehler in Zustand &quot; &amp; bState &amp; &quot;:&quot; &amp; vbNewLine &amp; _\n                               ex.Message, _\n                               MsgBoxStyle.Critical, _\n                               &quot;Fehler&quot;)\n\n                        &#039; In Zustand &quot;Statemachine beenden&quot; wechseln\n                        bState = bMaxState\n                    End Try\n\n                Case 9\n                    &#039; Fehler gefunden\n\n                    Try\n                        With objWord.ActiveWindow.ActivePane.View\n                            &#039; Ansicht wiederherstellen\n                            .Type = iCurViewType\n                        End With\n\n                    Catch ex As Exception\n                        MsgBox(&quot;Fehler in Zustand &quot; &amp; bState &amp; &quot;:&quot; &amp; vbNewLine &amp; _\n                               ex.Message, _\n                               MsgBoxStyle.Critical, _\n                               &quot;Fehler&quot;)\n                    End Try\n\n                    &#039; In Zustand &quot;Statemachine beenden&quot; wechseln\n                    bState = bMaxState\n\n                Case bMaxState\n                    &#039; Statemachine beenden\n\n                    &#039; Einstellung der Anzeige von \u00c4nderungsmarkierungen wiederherstellen\n                    With objWord.ActiveWindow.View\n                        .ShowRevisionsAndComments = bShowRevisionsAndComments\n                        .RevisionsView = bRevisionsView\n                    End With\n\n                    &#039; Bildschirmaktualisierung einschalten\n                    objWord.Application.ScreenUpdating = True\n\n                    Exit While\n            End Select\n        End While\n    End If\nEnd Sub<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Beschreibung Wenn Dokumente mit Inhaltsverzeichnis, Textmarken usw. in Word aktualisiert werden m\u00fcssen, entdeckt man schnell, dass die einfache L\u00f6sung alles zu markieren (STRG-A) und anschlie\u00dfend zu aktualisieren (F9), nicht wirklich alles aktualisiert. Kopf- und Fu\u00dfzeilen sind von dieser Methoden ausgeschlossen. Au\u00dferdem muss anschlie\u00dfend nach fehlerhaften Verweisquellen usw. gesucht werden.&nbsp;<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[29,45],"tags":[49,37,46,38],"class_list":["post-1491","post","type-post","status-publish","format-standard","hentry","category-startseite","category-vsto-word","tag-programmieren","tag-vba","tag-vsto","tag-word"],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p5LyzC-o3","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.kastenmaier.de\/index.php?rest_route=\/wp\/v2\/posts\/1491","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kastenmaier.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kastenmaier.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kastenmaier.de\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kastenmaier.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1491"}],"version-history":[{"count":16,"href":"https:\/\/www.kastenmaier.de\/index.php?rest_route=\/wp\/v2\/posts\/1491\/revisions"}],"predecessor-version":[{"id":2293,"href":"https:\/\/www.kastenmaier.de\/index.php?rest_route=\/wp\/v2\/posts\/1491\/revisions\/2293"}],"wp:attachment":[{"href":"https:\/\/www.kastenmaier.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1491"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kastenmaier.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1491"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kastenmaier.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1491"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}