Ich möchte in eine Excel-Tabelle Pflichtfelder erstellen, sobald in einer Zelle ein Wert eingetragen ist?
Sobald man z.B. in die Zelle A1 einen Wert eingetragen hat, müssen zwingendermaßen auch die Zellen C1, E1, F1 und H1 ebenfalls befüllt werden. Das ganze müsste für das ganze Tabellenblatt gelten: z.B. Wert wird in A2 eingetragen - dann müssen ebenfalls die Zellen C2, E2, F2 und H2; Wert wird in A3 eingetragen - dann müssen ebenfalls die Zellen C4, E4, F3 und H3; Wert wird in A... eingetragen - dann müssen ebenfalls die Zellen C..., E..., F... und H...; usw.
Sollte eine Zelle, zu einem Pflichtfeld geworden, beim Speichern noch nicht befüllt sein, sollte ein Fehlermeldung ausgegeben werden - Speichern nicht möglich!
Vielleicht kann man das über VBA machen.
Kann mir hier evtl. jemand weiter helfen?
Vielen Dank im Voraus!
Viele Grüße Python1860
2 Antworten
Musst du das in Excel machen? MS Access wäre besser für so etwas geeignet.
Hallo Helfenderuser,
Vielen Dank für den Hinweis.
Pflichtfelder definieren würde sicher mit Access besser funktionieren. Ich möchte aber das Excel gerne als Template per Mail verschicken, die Anwender sollen es dann ausfüllen und wieder zurück schicken.
Vielen Dank nochmals!
Viele Grüße Python1860
Prüfe im Ereignishandler Workbook_BeforeSafe auf die Bedingungen und setze ggf. den Parameter Cancel auf True.
Da die Zellen sich aber in einer Arbeitsmappe befinden, würde ich es für guten Stil halten, die Prüfung auch hier vorzunehmen, aber hier stelle ich eine einfache Lösung vor.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim zeile As Long, OK As Boolean
OK = True
For zeile = 1 To Tabelle1.Cells.SpecialCells(xlCellTypeLastCell).Row
If Tabelle1.Cells(zeile, 1).Value <> "" Then
If Tabelle1.Cells(zeile, 3).Value = "" Then OK = False 'Spalte C
If Tabelle1.Cells(zeile, 5).Value = "" Then OK = False 'Spalte E
If Tabelle1.Cells(zeile, 6).Value = "" Then OK = False 'Spalte F
If Tabelle1.Cells(zeile, 8).Value = "" Then OK = False 'Spalte H
End If
Next
If Not OK Then
MsgBox "Speichern nicht möglich - nicht alle Pflichtfelder ausgefüllt"
Cancel = True
End If
End Sub
Möglicherweise musst du noch ein Trim um die Tabelle1.Cells(...).Value wickeln, damit eine Reihe von Leerzeilen als leer gilt.
Man könnte noch anzeigen lassen, welche Pflichtzellen nicht ausgefüllt sind und die erste dieser Zellen auswählen und noch viele andere Verfeinerungen.
Denk dran, dass der Benutzer das Ausführen von Makros unterbinden kann.
Dim ersteZuFüllendeZelle As Range 'einen Typ für einzelne Zellen gibt's leider nicht; wir müssen Range nehmen
Set ersteZuFüllendeZelle = Nothing
For [alle Pflichtfeldprüfungen] - Code wie vorher
'in zeile und spalte stehen die Koordinaten der gerade geprüften Zelle
If PflichtfeldFehlt Then
If ersteZuFüllendeZelle Is Nothing Then Set ersteZuFüllendeZelle = Tabelle1.Cells(zeile, spalte) 'Wenn wir noch keine falsch gefüllte Zelle gefunden haben, merken wir uns die aktuell geprüfte Zelle
[Meldungen usw. zusammenstellen wie vorher]
Tabelle1.Cells(zeile, spalte).Interior.ColorIndex = 38 'Hintergrundfarbe hellrosa als Markierung für fehlende / falsche Füllung (kann natürlich angepasst werden)
Else
Tabelle1.Cells(zeile, spalte).Interior.ColorIndex = xlNone 'Standardhintergrundfarbe
End If
Next
If Not (ersteZuFüllendeZelle Is Nothing) Then ersteZuFüllendeZelle.Select
Hallo PWolff,
besten Dank, für die Super schnelle Hilfe funktioniert bestens.
Du hast noch geschrieben, dass man nicht ausgefüllte Pflichtfelder markieren und gleich die erste Zelle Auswählen kann.
Könntest du mir das evtl. bitte auch kurz schreiben wie man das macht?
Vielen Dank im Voraus!
Viele Grüße Python1860