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 wird sogar 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 der Abschluss 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.) Die beiden Ereignishandler werden in den Code für die Arbeitsmappe eingefügt, und das ForceDataEntry-Makro wird in ein reguläres Makromodul eingefügt.

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
Sub 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 If End Sub

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 (9572) gilt für Microsoft Excel 97, 2000, 2002 und 2003. Eine Version dieses Tipps für die Multifunktionsleistenschnittstelle von Excel (Excel 2007 und höher) finden Sie hier: