excel - MsgBox 使用 If answer = Yes/No/Cancel 出现两次
问题描述
我正在尝试创建一个宏,它会在关闭 Excel 之前给我一个消息框,询问我是否要保存更改。当我从消息框中选择否时,消息再次弹出,然后我第二次选择否,它确实关闭了。
我对VBA编程不太了解,我只是尝试录制宏然后稍微编辑它们。我也在网上搜索并复制粘贴。这就是我将这段代码放在下面的方式,但显然有问题。(尽管它有效)我想知道是否有人可以建议我在此代码中需要更改什么。任何帮助表示赞赏,谢谢
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim answer As String
Dim question As String
Dim OrigName As String
question = "Do you want to save Changes?"
answer = MsgBox(question, vbYesNoCancel)
If answer = vbCancel Then
Exit Sub
End If
If answer = vbNo Then
ActiveWorkbook.Close SaveChanges:=False
End If
If answer = vbYes Then
ActiveWorkbook.Save
ActiveWorkbook.SaveAs ("C:\Users\me\Documents\reports\Backup\" + ActiveWorkbook.Name & Format(Now(), "DD-MMM-YYYY hh-mm") & ".xlsm")
Exit Sub
End If
End Sub
解决方案
试试这个:
您已经关闭了工作簿,因此无需在代码中再次关闭它。只是“欺骗”Excel 认为更改已保存ThisWorkbook.Saved = True
(注意:这仅告诉 Excel 更改已保存 -它实际上并没有保存它们)并且它不会提示您保存更改。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Select Case MsgBox("Do you want to save Changes?", vbYesNoCancel)
Case vbCancel
Cancel = True
Case vbNo
ThisWorkbook.Saved = True
Case vbYes
ThisWorkbook.Save
ThisWorkbook.SaveAs ("C:\Users\me\Documents\reports\Backup\" + ActiveWorkbook.Name & Format(Now(), "DD-MMM-YYYY hh-mm") & ".xlsm")
End Select
End Sub
在您的情况下使用ThisWorkbook
将是一个更好的对象,而不是使用ActiveWorkbook
.
推荐阅读
- php - 如何仅在特定页面上显示类别?
- r - 边界上的 mle2 (bbmle) 参数估计,在 object@vcov 中产生的 NaN
- java - 将 Json HTTP 请求解析为管道(Groovy)的问题
- c++ - 使用串行通信 C++ 发送和接收浮点数
- apache-pig - 为什么不能从原始关系的别名中找到列,除非它存在
- ios - UIScrollView 约束问题
- winforms - 如何在 cmd 中使用 powershell 来拆分文件中的字符串而无需换行
- laravel - 使用 Laravel 将表格下载为 xls
- android - Admob 奖励广告以测试广告 ID 显示,但未以我的真实广告 ID 显示
- javascript - 编写一个反转数字的 JavaScript 函数