Wenn Sie ein Arbeitsblatt entwickeln, das von anderen Personen verwendet wird, sollten Sie sicherstellen, dass diese bestimmte Zellen ausfüllen, bevor sie die Arbeitsmappe schließen dürfen. In Excel gibt es hierfür keine integrierte Funktion. Sie können jedoch ein Makro erstellen, das die erforderliche Überprüfung durchführt und den Benutzer anhält, um fortzufahren. Dies kann ein ziemlich einfaches Makro sein, das an das BeforeClose-Ereignis gebunden ist.

Das BeforeClose-Ereignis wird immer dann ausgelöst, wenn eine Arbeitsmappe auf irgendeine Weise geschlossen wird. Der Trick ist die Einstellung der Cancel-Eigenschaft im Event-Handler. Wenn Sie Abbrechen auf True setzen, wird das Schließen der Arbeitsmappe gestoppt, und wenn diese unverändert bleibt, wird die Arbeitsmappe normal geschlossen.

Das folgende Makro prüft beispielsweise, ob in Zelle A1 etwas enthalten ist. Wenn dies der Fall ist, wird die Arbeitsmappe geschlossen. Ist dies nicht der Fall, wird der Benutzer darüber informiert, dass etwas fehlt, und das Schließen wird abgebrochen.

Private Sub Workbook_BeforeClose(Cancel As Boolean)

If Cells(1, 1).Value = "" Then         MsgBox "Please fill cell A1"

Cancel = True     End If End Sub

Auf Wunsch können aufwendigere Makros erstellt werden. Beispielsweise müssen möglicherweise mehrere verschiedene Zellen überprüft werden. Die folgende Version überprüft einen Bereich mit dem Namen „Obligatorisch“, um festzustellen, ob jede Zelle im Bereich etwas enthält. Wenn eine der Zellen leer ist, kann die Arbeitsmappe nicht gespeichert oder geschlossen werden. (Dieses Makro wird nicht nur während des BeforeClose-Ereignisses, sondern auch während des BeforeSave-Ereignisses ausgelöst.)

Diese beiden Ereignishandler sollten in das Codeblatt für die Arbeitsmappe eingefügt werden:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Cancel = ForceDataEntry()

End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _   Cancel As Boolean)

Cancel = ForceDataEntry()

End Sub

Beachten Sie, dass die Ereignishandler die ForceDataEntry-Funktion aufrufen. Diese Funktion sollte in einem regulären Makromodul platziert werden:

Function ForceDataEntry() As Boolean     Dim rng As Range     Dim c As Variant     Dim rngCount As Integer     Dim CellCount As Integer

Set rng = Range("Mandatory")

rngCount = rng.Count

CellCount = 0     For Each c In rng         If Len(c) > 0 Then             CellCount = CellCount + 1         End If     Next c     ForceDataEntry = False     If CellCount <> rngCount Then ForceDataEntry = True End Function

Sie sollten beachten, dass jede Implementierung, für die Makros erforderlich sind (wie diese), ein potenzielles Problem aufweist: Benutzer können entscheiden, Makros beim Laden der Arbeitsmappe nicht zu aktivieren. Wenn sie die Arbeitsmappe mit deaktivierten Makros ausführen, können sie die Arbeitsmappe weiterhin speichern, ohne dass alle obligatorischen Zellen Werte enthalten.

_Hinweis: _

Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der ExcelTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.

ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.

Dieser Tipp (9574) gilt für Microsoft Excel 2007, 2010, 2013, 2016, 2019 und Excel in Office 365. Eine Version dieses Tipps für die ältere Menüoberfläche von Excel finden Sie hier: