Erforderliche Eingabe (Microsoft Excel)
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: