Riley hat ein Arbeitsblatt, mit dem er jeden Freitag arbeiten muss. Dieses Arbeitsblatt basiert auf einer Vorlage, und es müssen mindestens fünf Zellen im Bereich C4: C8 ausgefüllt werden. Wenn er mit dem Arbeitsblatt beginnt, sind diese Zellen leer. Riley fragt sich, ob es eine Möglichkeit gibt, zu verhindern, dass das Arbeitsblatt gespeichert und / oder geschlossen wird, bis er alle fünf dieser Zellen ausgefüllt hat.

Es gibt eine Möglichkeit, dies zu tun, aber es werden Makros verwendet. Excel unterstützt das Konzept der Ereignishandler. Dies bedeutet, dass Sie Makros entwickeln können, die automatisch ausgeführt werden, wenn bestimmte Ereignisse auftreten. Zwei Ereignisse, für die Sie spezielle Ereignishandler erstellen können, sind BeforeClose (dh bevor die Arbeitsmappe geschlossen wird) und BeforeSave (bevor die Arbeitsmappe gespeichert wird).

Angenommen, das Arbeitsblatt mit dem zu überprüfenden Bereich (C4: C8) heißt „MyData“. Sie können diesen Code zum ThisWorkbook-Modul hinzufügen:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim rng As Range     Dim iCount As Integer     Dim sTemp As String

Set rng = Worksheets("MyData").Range("C4:C8")

iCount = Application.WorksheetFunction.CountBlank(rng)

If iCount <> 0 Then         sTemp = rng.Address & " has blank cells. " & vbCrLf         sTemp = sTemp & "The workbook will not be closed."

MsgBox sTemp         Cancel = True     End If End Sub

Beachten Sie, dass das Makro auf der CountBlank-Arbeitsblattfunktion basiert, um festzustellen, ob Leerzeichen im Zellenbereich vorhanden sind. Wenn leere Cekks erkannt werden (iCount ist größer als 0), zeigt das Makro dem Benutzer eine Meldung an und die Variable Abbrechen wird auf True gesetzt, wodurch das Schließen der Arbeitsmappe tatsächlich verhindert wird.

Sie können ein ähnliches Makro für das BeforeSave-Ereignis folgendermaßen verwenden:

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

Dim rng As Range     Dim iCount As Integer     Dim sTemp As String

Set rng = Worksheets("MyData").Range("C4:C8")

iCount = Application.WorksheetFunction.CountBlank(rng)

If iCount <> 0 Then         sTemp = rng.Address & " has blank cells. " & vbCrLf         sTemp = sTemp & "The workbook will not be saved."

MsgBox sTemp         Cancel = True     End If End Sub

Wenn Sie sicherstellen möchten, dass die Routine die Zellen auswählt, in denen die Eingabe erforderlich ist (als letzter Schritt), können Sie beiden Makros direkt nach der Zeile, in der die Variable Abbrechen auf True gesetzt ist, die folgende Zeile hinzufügen:

rng.Select

Denken Sie auch daran, dass Ihre Arbeitsmappe, da sie auf einer Vorlage basiert, als makrofähige Vorlage gespeichert werden muss, damit sie ordnungsgemäß funktioniert.

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

Dieser Tipp (4364) gilt für Microsoft Excel 2007, 2010, 2013 und 2016.