我有一个 Excel 电子表格,其中有一个宏,可以将一些单元格值写入文本文件。当任何这些单元格值发生变化时,都会触发该宏并更新文本输出。
但是,如果用户决定关闭电子表格而不保存更改,则不会触发宏,并且文本输出不会更新到更改之前的状态。
一个简单的例子来阐明这个问题:
- 假设单元格 B3 包含字符串“Beer”
- 然后用户将此单元格编辑为“Wine”
- 宏检测到更改并将文本文件更新为“Wine”
- 如果用户随后关闭 Excel 而不保存更改,单元格 B3 显然会变回“啤酒”(不过,由于 Excel 正在关闭,因此只有在下次打开电子表格时才可见)……但文本文件继续显示“Wine”,因为关闭 Excel 而不保存显然不会引起任何可用于触发宏的更改事件。即使从 Workbook_BeforeClose 或 Workbook_Deactivate 事件调用宏也不会将文本输出从“Wine”刷新回“Beer”
关于如何回滚文本输出,有什么建议吗?
答案1
只需一点额外的代码,我就能使事情按如下方式工作:
- 当 Excel 打开时,VBA 宏会创建 TEXTFILE 并立即将其复制到文件 TEXTCOPY
- 当用户进行更改时,TEXTFILE会更新,但TEXTCOPY不会
- 当用户保存更改时,TEXTCOPY 会更新
- 当用户退出 Excel 且未保存时,TEXTFILE 将被删除,并且 TEXTCOPY 将被重命名为 TEXTFILE
- 当用户保存并关闭 Excel 时,TEXTCOPY 将被删除