Word formular Pflichtfelder definieren?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Hallo,

du kannst per VBA den Speicher- bzw. Speichern-Unter-Befehl abfangen und dort die Felder überprüfen lassen, welche ausgefüllt sein sollen. Soweit wurde das hier ja schon beschrieben.

Gehen wir mal davon aus, du hättest dafür die Formularfelder aus den Vorversionen benutzt, denen man ja einen Textmarkennamen zuweisen kann, und über den dann das jeweilige Formularfeld in VBA angesprochen werden kann.

Dann gehst du folgendermaßen vor:

1. Ein Klassenmodul erstellen, um den Speicherbefehl abzufangen

Wechsel in den Entwicklertools in den VB-Editor (Alt + F11) und erstelle zunächst in deiner Projektvorlage ein Klassenmodul über Einfügen Klassenmodul, welches du zwingend in ThisApplication umbenennst.

In dieses Klassenmodul kommt der folgende Code:

Option Explicit

Public WithEvents oApp As Word.Application
'

Private Sub oApp_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As Boolean)

    With ActiveDocument
        If .FormFields("Feldname").Result = "" Then
            MsgBox "Bitte erst das Formularfeld " & ChrW(&H201E) & "Feldname" & ChrW(&H201C) & " ausfüllen!"
            Cancel = True
        ElseIf .FormFields("Feldname2").Result = "" Then
            MsgBox "Bitte erst das Formularfeld " & ChrW(&H201E) & "Feldname2" & ChrW(&H201C) & " ausfüllen!"
            Cancel = True
        End If
    End With

End Sub

Über diesen Code wird der Speicherbefehl abgefangen. Du musst natürlich im obigen Code Feldname und Feldname2 jeweils durch die Namen deiner Felder ersetzen. Ein Name kommt dabei immer zweimal vor: einmal als Textmarkenname (Bookmark) des Formularfeldes und einmal innerhalb der Meldung der Messagebox.

Die If-Funktion ist dabei durch ElseIf nach unten erweiterbar, wenn du noch weitere Felder zur Überprüfung hast.

2. Ein normales Modul erstellen

Danach erstellst du noch ein normales Modul. Der Name dieses Moduls ist egal. Hierein fügst du den folgenden Code ein:

Option Explicit

Dim oAppClass As New ThisApplication
'

Public Sub AutoOpen()

Set oAppClass.oApp = Word.Application

End Sub
3. Das Formular speichern

Jetzt kannst du das Formular mit leeren Feldern erstellen.

Wichtig ist, dass du das Ganze als Word-Dokument (nicht Vorlage!) mit Makros abspeicherst. Sobald du das Formular schließt und neu aufrufst, wird durch den Neustart das Makro automatisch aktiviert! Das heißt aber auch, dass du dein Formular nach einem Neustart nicht mehr mit leeren Feldern speichern kannst, da ab dann der Speicherbefehl abgefangen wird.

Solltest du also nochmal Veränderungen an deinem leeren Formular vornehmen wollen, müsstest du den Befehl Public Sub AutoOpen() übergangsweise in Public Sub AutoExec() umbenennen und speichern. Dadurch würde das automatische Abfangen des Speicherbefehls beim Start des Dokuments verhindert und du könntest das leere Formular bearbeiten und speichern. Wenn du mit dem Bearbeiten des leeren Formulars fertig bist, musst du die Subroutine dann aber wieder in Public Sub AutoOpen() umbenennen und speichern.

Außerdem müssen alle Feldnamen bzw. Textmarkennamen, die das Makro überprüfen soll, auch tatsächlich im Dokument existieren, sonst gibt es eine Fehlermeldung, sobald der Speichern-Befehl ausgelöst wird.

Alle Angaben ohne Gewähr. Die Verwendung der hier angebotenen VBA-Codes erfolgt auf eigenes Risiko des jeweiligen Endbenutzers. Ich übernehme keinerlei Haftung für jedwede Schäden, die aus der Verwendung der hier angebotenen VBA-Codes entstehen.

Eine Rückmeldung wäre nett und melde dich bitte bei Fragen!

Gruß, BerchGerch

Woher ich das weiß:eigene Erfahrung

Man kann IMHO keine Pflichtfelder definieren, aber du kannst beim Ereignis "Datei speichern" abfragen ob ein Feld noch leer ist.

maralla 
Fragesteller
 20.07.2018, 12:06

Ah okay, wie kann ich das einstellen? Kommt dann ein pop up Fenster und sagt "blabla Feld wurde nicht ausgefüllt"? Wenn ich mehrere Felder dafür definieren kann wäre das ja ein Anfang

0
ProRatione  20.07.2018, 12:11
@maralla

Für das Pop-Up-Fenster musst du selber sorgen, z.B. mit MsgBox "Bitte Feld 'Name' ausfüllen"

0