Excel VBA,ActiveWorkbook.Save触发了Workbook_BeforeSave事件,但是Workbook_BeforeSave中的代码行通过,没有任何结果

标签 excel vba excel-2010

我搜索了这个网站,发现了类似的问题,但仍然不同。
我在这个网站上找到的那些(例如 thisthisthis )涉及太多代码(这可能是它没有正确执行的原因)并且还涉及 Workbook_BeforeClose 事件。
我的很简单,如下所示:

Sub RefreshData()
ActiveWorkbook.Save
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Application.DisplayAlerts = False
MsgBox "test"
Range("A1").Select
Range("A3").Value = "test"
Sheets(Array("TABEL", "DATA")).Copy
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path + "\Backup\blablabla " & Format(Now(), "yymmdd hh mm ss") & ".xlsx", FileFormat:=51
ActiveWorkbook.Close
Application.DisplayAlerts = True
End Sub
当我运行 RefreshData 子程序时,它会触发 Workbook_BeforeSave 子程序。
enter image description here
在 Workbook_BeforeSave 中的代码中,当黄线通过 msgbox 代码时,它会显示结果,因为 Excel 会显示消息框。但是当黄线通过其余代码时,它什么也不做,没有错误。未选择范围(“A1”)但它确实有“测试”值 .未创建带有工作表 DATA 和 TABEL 的新工作簿,更不用说将其保存到备份文件夹并关闭它。然而,带有宏的工作簿被保存。
我的问题:这正常吗?
我的希望:有人会好心地将上面的代码复制到他的 Excel 应用程序的新工作簿中并运行它。如果 Workbook_BeforeSave 中的所有代码都相应地工作,那么我的 Excel 应用程序有问题,我希望有人能告诉我我的 Excel 应用程序中可能是什么原因。
任何形式的帮助将不胜感激。
提前谢谢你。

最佳答案

更多的是建议而不是答案,但是:
尝试正确限定范围:
更改 Range("A1").Value = test进入 ThisWorkbook.Range("A1").Value = test另外,如果是关于 ThisWorkbook , 使用它而不是 ActiveWorkbook .

关于Excel VBA,ActiveWorkbook.Save触发了Workbook_BeforeSave事件,但是Workbook_BeforeSave中的代码行通过,没有任何结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71171856/

相关文章:

大型文件的 PHPExcel 导出失败

excel - 如何轻松获取您正在处理的文件的网络路径?

c# - excel 数字格式

excel - 切换到 64 位 Excel 后如何修复 VBA "type mismatch"错误

vba - 确定公式是否返回#Ref!错误

VBA通过左/右移动找到一行中出现的第一个空单元格

VBA删除带有范围的按钮

vba - 集合最大尺寸

excel - 使用 VBA 从 Word 获取文本到 Excel

excel - VBA Excel : enumerate total number of duplicates. 计数和求和