Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 防止另存为(多个条件)_Vba_Excel - Fatal编程技术网

Vba 防止另存为(多个条件)

Vba 防止另存为(多个条件),vba,excel,Vba,Excel,我正在尝试构建一个宏,以防止在多个必填项未完成时保存工作簿 例如,在单元格D14中,用户应输入“是”或“否”,并且有一个下拉列表来帮助实现这一点。如果未填写单元格,则无法保存工作簿。我通过以下几点做到了这一点: Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) If IsEmpty(ThisWorkbook.Sheets(1).Range("D14")) Then Cancel = True

我正在尝试构建一个宏,以防止在多个必填项未完成时保存工作簿

例如,在单元格D14中,用户应输入“是”或“否”,并且有一个下拉列表来帮助实现这一点。如果未填写单元格,则无法保存工作簿。我通过以下几点做到了这一点:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If IsEmpty(ThisWorkbook.Sheets(1).Range("D14")) Then
Cancel = True
MsgBox "SAVE CANCELLED. Please ensure all mandatory entries are completed."
End If
End Sub
这很好用

唯一的问题是我想用D14空白打开文件。解决这个问题的一种方法是,D3也必须填写一个日期。是否可以包含类似“如果D3不为空,则D14包含“是”或“否”或无法保存”之类的内容

或者其他关于如何打开文件,使必填项为空,但在完成之前不保存的想法

必填项不限于D14,它们包括D列中的各种单元格。但我可以编辑代码以允许这样做


谢谢

除了@Noldor130884发布的答案外,您还可以使用IF语句中的AND函数实现您想要的功能

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If IsEmpty(ThisWorkbook.Sheets(1).Range("D14")) AND Not IsEmpty(ThisWorkbook.Sheets(1).Range("D3")) Then
Cancel = True
MsgBox "SAVE CANCELLED. Please ensure all mandatory entries are completed."
End If
End Sub

显然,
Workbook\u open
函数在打开时将D3和D14值设置为NULL是一个非常棒的解决方案。但唯一的风险是,如果您从其他文件引用该值,则在打开电子表格之前,您将拥有旧值,并且由于验证检查,您将无法保存它。

就像您在保存之前使用的
工作簿一样,打开工作簿时,可以使用
Workbook\u Open
清除感兴趣的单元格。无论如何这个问题真的很难理解,标题也很误导人