Existenz eines benannten Textfeldes prüfen

Das Befüllen von Textfeldern (Shapes) mit VBA in Word lässt sich erleichtern, indem die Textfelder mit aussagekräftigen Namen versehen werden, denn die Default-Namen von Word (»Text Box 1«, »Text Box 2« usw.) sind nicht sonderlich hilfreich. Zudem erfolgt die Zählung eher zufällig. Besonders schwer wiegt jedoch, dass die Namen der Textfelder in ein und derselben Dokumentvorlage variieren, wenn die Vorlage in verschiedenen Word-Versionen genutzt wird.

In der Praxis kann es vorkommen, dass ein Nutzer (aus welchem Grund auch immer) eines der (benannten) Textfelder entfernt. Die Folge ist ein Laufzeitfehler. Word bietet für Shapes keine Funktion zur Existenzprüfung (wie etwa bei Bookmarks). Mit der folgenden Funktion lässt sich die Existenz eines bestimmten Textfeldes im Dokument prüfen. Falls das Textfeld nicht vorhanden ist, wird False zurückgegeben.


Public Function fktExistiertTextfeld(ByVal strTF As String) As Boolean  
' testet, ob ein übergebenes Textfeld im Dokument enthalten ist
' © Schreibbüro Nora Richter 

    Dim oStory As Word.Range

    fktExistiertTextfeld = False

    For Each oStory In ActiveDocument.StoryRanges
        If fktTextfeldVorhanden(strTF, oStory) Then
            fktExistiertTextfeld = True
            Exit For
        End If
        If oStory.StoryType <> wdMainTextStory Then
            Do While Not (oStory.NextStoryRange Is Nothing)
                Set oStory = oStory.NextStoryRange
                If fktTextfeldVorhanden(strTF, oStory) Then
                    fktExistiertTextfeld = True
                    Exit Do
                    Exit For
                End If
            Loop
        End If
    Next oStory
    Set oStory = Nothing

End Function  
Function fktTextfeldVorhanden(ByVal strShape As String, ByVal rngStory As Range) As Boolean ' testet, ob ein bestimmtes Textfeld im übergebenen StoryRange des Dokuments enthalten ist ' © Schreibbüro Nora Richter Dim strShapeText As String fktTextfeldVorhanden = False strShapeText = "" On Error Resume Next If rngStory.ShapeRange.Count > 0 Then strShapeText = rngStory.ShapeRange(strShape).TextFrame.TextRange.Text ' falls das Textfeld nicht vorhanden ist, tritt ein Laufzeitfehler auf, ' der abgefangen und "genutzt" wird If Err.Number <> 0 Then Exit Function Else fktTextfeldVorhanden = True End If End If End Function
Schreibbüro Richter, Georg-Schumann-Str. 8, 04105 Leipzig, Tel.: (03 41) 59 008 95