要求输入(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事件期间触发。)
这两个事件处理程序应放在工作簿的代码表中:
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
请注意,事件处理程序将调用ForceDataEntry函数。此函数应放在常规宏模块中:
Function 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 Function
您应该注意,任何需要宏的实现(像这样)都存在一个潜在的问题-用户可以决定在加载工作簿时不启用宏。如果他们在禁用宏的情况下运行工作簿,则他们仍将能够保存工作簿,而所有必填单元格均不包含值。
注意:
如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。
_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。
本技巧(9574)适用于Office 365中的Microsoft Excel 2007、2010、2013、2016、2019和Excel。您可以在此处找到适用于Excel的较早菜单界面的本技巧的版本:
需要输入。