当您开发供其他人使用的工作表时,您可能需要确保在允许他们关闭工作簿之前,他们填写了某些单元格。 Excel中没有内置函数可以执行此操作,但是您可以创建一个进行必要检查并停止用户继续操作的宏。这可以是一个相当简单的宏,与BeforeClose事件关联。

每当以任何方式关闭工作簿时,BeforeClose均会触发。技巧是在事件处理程序中设置Cancel属性。将“取消”设置为True将停止工作簿的关闭,并且使其保持不变,将导致工作簿正常关闭。

例如,下面的宏检查单元格A1中是否有任何内容;如果是这样,则关闭工作簿。如果不是,则通知用户缺少某些内容,并取消关闭。

Private Sub Workbook_BeforeClose(Cancel As Boolean)

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

Cancel = True     End If End Sub

如果需要,可以创建更多详细的宏。例如,您可能需要检查几个不同的单元格。下面的版本检查一个名为“必填”的范围,以查看该范围中的每个单元格是否包含某些内容。如果任何单元格为空,则无法保存或关闭工作簿。 (此宏不仅在BeforeClose事件期间触发,而且还在BeforeSave事件期间触发。)这两个事件处理程序被放入工作簿的代码中,而ForceDataEntry宏则放置在常规宏模块中。

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

您应该注意,任何需要宏的实现(像这样)都存在一个潜在的问题-用户可以决定在加载工作簿时不启用宏。如果他们在禁用宏的情况下运行工作簿,则他们仍将能够保存工作簿,而所有必填单元格均不包含值。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(9572)适用于Microsoft Excel 97、2000、2002和2003。可以在以下功能区中为Excel的功能区界面(Excel 2007及更高版本)找到本技巧的版本: