我正在处理一些代码,应该检查这些代码以确保D列页面底部的单元格中包含内容,然后才允许用户保存文件,但是由于某些原因不会这样做,即使这些单元格为空,我也可以保存文件,而且我不确定原因。 我将此代码作为BeforeSave动作放入“ ThisWorkbook”对象中。保存此代码的主要方式是使用一个按钮,该按钮用于自动将文件保存到特定位置,但是保存时会发生相同的情况手动。
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim names As Variant
Dim name As Variant
names = Array("sheet1", "sheet2", "sheet3") 'set up array of sheet names
For Each name In names 'check to see if cell is filled out or not
If Worksheets(name).Cells(Rows.Count, 4).End(xlUp).value = 0
MsgBox "Save cancelled. Sheet " & name & " is missing signature."
Cancel = True 'stop save from occurring
End If
Next name
End Sub
因此,从本质上讲,我希望它遍历按名称显示的特定工作表-我已更改了该帖子的工作表名称和工作表数,但我认为这不会影响代码的工作方式-检查它们查看它们是否在D列的最后一行中包含内容(除非用户放入信息,否则它将为空),然后如果这些单元格中的任何一个为空,则不要让用户继续保存文件,直到签名至少具有一些内容。它不执行任何操作,允许文件保存,并显示错误消息“运行时错误'9'下标超出范围”。希望对这个问题有任何帮助!
答案 0 :(得分:1)
将评论作为答案:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim names As Variant
Dim name As Variant
Dim lr as Long 'ADDED
names = Array("sheet1", "sheet2", "sheet3") 'set up array of sheet names
For Each name In names 'check to see if cell is filled out or not
With Sheets(name)
lr = .Cells(.Rows.Count, 4).End(xlUp).Row 'ADDED
If .Cells(lr, 4).value = "" Then 'CHANGED, but does not make sense as written unless NOTHING exists in column D (4)
MsgBox "Save cancelled. Sheet " & name & " is missing signature."
Cancel = True 'stop save from occurring
Exit For
End If
End With
Next name
End Sub
编辑1:
关于您对结构不正确的评论,您很可能希望根据ANOTHER列检查最后一行。
由于我们看不到您的工作表,因此我假设相邻单元格中有一个用于签名的标头,这可能对您有利。可能像这样:
Cells(lr,3) | Cells(lr,4)
Signature: | ""
如果以上是正确的情况,则可以将以上代码修改为:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim names As Variant
Dim name As Variant
Dim lr as Long 'ADDED
names = Array("sheet1", "sheet2", "sheet3") 'set up array of sheet names
For Each name In names 'check to see if cell is filled out or not
With Sheets(name)
lr = .Cells(.Rows.Count, 3).End(xlUp).Row 'ADDED
If .Cells(lr, 4).value = "" Then 'CHANGED, but does not make sense as written unless NOTHING exists in column D (4)
MsgBox "Save cancelled. Sheet " & name & " is missing signature."
Cancel = True 'stop save from occurring
Exit For
End If
End With
Next name
End Sub
唯一的变化是在定义lr
的行中,我将列从4换成了3。