If IsWorkbookOpen("CONTRACT\CONTRACTLIST_Cement.xlsx") Then
x = 0
Else
Application.DisplayAlerts = False
ActiveWorkbook.Close savechanges:=True
Application.DisplayAlerts = True
End If
嗨,尽管使用了上面的代码,仍然会偶尔出现另存为提示并影响程序。有谁知道如何完全阻止它?问题是,在我点击“保存”后,它会提醒我它仍处于打开状态。
答案 0 :(得分:8)
尝试以下代码
总是很好的开发参考工作簿而不是ActiveWorkbook
Sub test()
If IsWorkbookOpen("CONTRACT\CONTRACTLIST_Cement.xlsx") Then
x = 0
Else
Application.DisplayAlerts = False
ThisWorkbook.Save
ThisWorkbook.Close False
Application.DisplayAlerts = True
End If
End Sub
答案 1 :(得分:3)
您可以使用Workbook_BeforeSave
对象中的ThisWorkbook
事件来捕获用户选择SaveAs(或使用键盘快捷键),这将导致显示“另存为”提示并显示{{1}被设置为true。如果SaveAsUI
为真,则表示用户正在尝试将文件另存为其他内容,因此您可以取消另存为操作。
打开Visual Basic窗口(Alt + F11)并将以下代码放在SaveAsUI
中。
禁用另存为
ThisWorkbook
如果需要,您可以删除Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If (SaveAsUI = True) Then
MsgBox "Sorry. I can't have you saving this file as something else."
Cancel = True
End If
End Sub
行;我把它作为一个例子,如果你想通知用户该功能被禁用
要禁用两者保存和另存为功能,您将删除MsgBox
语句并取消保存操作,无论是否显示另存为提示。
禁用保存并另存为
if
如果您只想禁用“保存”操作,则只需要查找用户保存的位置,但SaveAsUI显示不(即用户只是保存文件)。
停用保存
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
MsgBox "Sorry. I can't have you saving this file at all."
Cancel = True
End Sub
最后,请注意,如果用户只是关闭文件,用户仍会收到保存提示。用户将无法保存并且文件将关闭,但如果您希望体验更清晰,则需要进行其他更改。当用户关闭文件时,Excel会检查Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If (SaveAsUI = False) Then
MsgBox "Sorry. I can't have you saving any updates to this file."
Cancel = True
End If
End Sub
变量以查看文件是否已保存。如果为false,则会提示用户保存文件。为了防止这种情况,我们可以将此布尔值设置为true而不保存,从而“欺骗”Excel以认为文件已保存
禁用保存并另存为,包括用户尝试关闭文件后
在ThisWorkbook.Saved
代码后添加以下代码。
Workbook_BeforeSave