VBA工作表\u保存字段验证之前

VBA工作表\u保存字段验证之前,vba,excel,Vba,Excel,所以在这个工作表\u beforesave之前,我已经实现了一个工作表\u beforesclose,它可以在用户关闭文件之前检查验证。但有人告诉我,这是一个糟糕的功能,因为如果人们从不填写表格,它会阻止他们关闭 soi尝试将所有代码移到beforesave中,以便宏在允许字段保存之前检查字段,与不允许字段关闭相比,这听起来更好 但是,仅仅将工作表中的所有代码切换到工作表中的代码,并没有成功。。它就像一个没有检查的普通工作表,我在保存前写的要检查的字段不起作用,它实际上允许用户保存 这是我的密码

所以在这个工作表\u beforesave之前,我已经实现了一个工作表\u beforesclose,它可以在用户关闭文件之前检查验证。但有人告诉我,这是一个糟糕的功能,因为如果人们从不填写表格,它会阻止他们关闭

soi尝试将所有代码移到beforesave中,以便宏在允许字段保存之前检查字段,与不允许字段关闭相比,这听起来更好

但是,仅仅将工作表中的所有代码切换到工作表中的代码,并没有成功。。它就像一个没有检查的普通工作表,我在保存前写的要检查的字段不起作用,它实际上允许用户保存

这是我的密码

所以要让它短而甜

我将工作表_before中的确切代码移到了工作表_beforesave附近,但它不起作用,而且空字段仍然可以传递并让用户保存它


提前谢谢,谢谢你抽出时间

关闭前,请尝试将代码移回工作簿。并检查工作簿是否与一起保存

Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Not ThisWorkbook.Saved Then Cancel = True
End Sub
如果工作簿发生更改,则属性.saved将更改,否则将保持为true,用户将能够关闭工作簿

编辑1

线路

  If ThisWorkbook.ReadOnly Or ThisWorkbook.Saved Then Exit Sub
Set rRange = Range("D18,D30,D32,D34")
检查工作簿是否为只读以及是否已保存。如果为真,则不要继续

线路

  If ThisWorkbook.ReadOnly Or ThisWorkbook.Saved Then Exit Sub
Set rRange = Range("D18,D30,D32,D34")
我们将您的范围设置为一个范围,并使用

For Each eCell In rRange

嗨,罗姆塞尔!谢谢你的回复,我试着在关闭前将工作簿放回原处,后面跟着你的代码,它仍然阻止用户按下退出应用程序。。当我尝试将字段设置为空并按下save键时,它仍然允许他们保存文件。我需要的功能是允许他们在未填充时关闭,但不允许他们保存文件。谢谢。我一到我的工作场所就会尝试查看你的代码。好的,非常感谢!请记住,我上面给出的代码最初是在工作簿中。但是我想我应该允许用户关闭应用程序,即使他们没有填写,但是如果他们没有填写必填字段,我不允许他们保存。再次感谢!更新了这个答案。请检查它现在是否工作。您确定它检查了正确的工作表吗?你试过设置断点吗?