VBA Worksheet_before保存字段的validation
所以在这个worksheet_beforesave之前,我已经实现了一个Worksheet_beforeclose,它在用户closures文件之前检查validation是非常好的。 但被告知,这是一个不好的function,因为如果他们从来没有填写表格,它会阻止人们closures。
soi试图把所有的代码移动到beforesave,所以macros观将检查字段,然后让他们保存(这听起来比不让他们closures更好)
但只是从Worksheet_Beforeclose所有代码切换到Worksheet_beforesave没有工作……它只是变得像一个正常的工作表没有检查,我已经写了字段我保存之前检查没有工作,它实际上允许用户保存..
这是我的代码
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) If Range("D18").Value = "" Then MsgBox "User required to fill in at least one requirement" Cancel = True Range("D18").Select End If If Range("D30").Value = "" Then MsgBox "User required to fill in date" Cancel = True Range("D30").Select End If If Range("D32").Value = "" Then MsgBox "User required to fill in the field" Cancel = True Range("D32").Select End If If Range("D34").Value = "" Then MsgBox "User required to fill in the field" Cancel = True Range("D34").Select End If End Sub
所以要简短而甜蜜
我从Worksheet_Beforeclose的确切代码移动到worksheet_beforesave,但它没有工作,它是空的领域仍然能够通过,让用户保存它
在此先感谢您,感谢您的时间!
尝试将您的代码移回到Workbook_BeforeClose。 并检查您的工作簿是否保存
Private Sub Workbook_BeforeClose(Cancel As Boolean) If Not ThisWorkbook.Saved Then Cancel = True End Sub
如果工作簿发生更改,则.saved属性将会更改,如果不存在,它将保持为true,用户将能够closures工作簿。
编辑#1
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Dim rRange As Range, eCell As Range If ThisWorkbook.ReadOnly Or ThisWorkbook.Saved Then Exit Sub Set rRange = Range("D18,D30,D32,D34") For Each eCell In rRange If eCell.Value = "" Then MsgBox "User required to fill in at least one requirement" Cancel = True eCell.Select Exit For End If Next End Sub
线
If ThisWorkbook.ReadOnly Or ThisWorkbook.Saved Then Exit Sub
检查工作簿是否只读,是否保存。 如果属实,不要继续。
线
Set rRange = Range("D18,D30,D32,D34")
我们将您的范围设置为一个范围,并通过它们循环
For Each eCell In rRange