要求输入(Microsoft Excel)
当您开发供其他人使用的工作表时,您可能需要确保在允许他们关闭工作簿之前,他们填写了某些单元格。 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及更高版本)找到本技巧的版本:
需要输入。