Word formular Pflichtfelder definieren?
Hallo zusammen, Kann mir vll wer sagen ob ich bei Word Formularen Pflichtfelder definieren kann und wenn ja wie? Ich hab jetzt schon länger gegoogelt aber find nichts vernünftiges dazu. Ich möchte Eigtl nur das man das word Dokument nicht speichern kann bevor nicht etwas in das Feld eingetragen wird
2 Antworten
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 abzufangenWechsel 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 erstellenDanach 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
Man kann IMHO keine Pflichtfelder definieren, aber du kannst beim Ereignis "Datei speichern" abfragen ob ein Feld noch leer ist.
Für das Pop-Up-Fenster musst du selber sorgen, z.B. mit MsgBox "Bitte Feld 'Name' ausfüllen"
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