防止另存为(多个条件)

时间:2015-03-24 11:16:32

标签: excel vba excel-vba

我试图建立一个宏来防止在没有完成几个强制性条目的情况下保存工作簿。

例如,在单元格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列中的各种单元格。但我可以编辑代码以允许这样做。

谢谢!

1 个答案:

答案 0 :(得分:0)

除了@ 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_open函数在打开时将D3和D14值设置为NULL是一个很棒的解决方案。但唯一的风险是,如果您从其他文件中引用该值,则在打开电子表格之前您将拥有旧值,并且由于您的验证检查,您将无法保存它。