【发布时间】:2015-04-10 17:04:13
【问题描述】:
我有一个使用 Excel 2003 编写的应用程序,最近升级到 Excel 2013。在 workbook_open 事件中,我将工作簿设置为只读 ActiveWorkbook.ChangeFileAccess xlReadOnly 并使用 Toggle Read Only 按钮在读\写和只读。在 Excel 2003 中,当切换文件模式时,工作簿会按预期切换。当我在 2013 年将它作为 .xlsm 运行时,在切换文件状态后会调用 Workbook_Open 事件并再次变为只读。
Private Sub Workbook_Open()
If ActiveWorkbook.ReadOnly = False Then
ActiveWorkbook.Saved = True
ActiveWorkbook.ChangeFileAccess xlReadOnly
End If
End Sub
【问题讨论】:
-
切换时,您可以向单元格(或名称,即在名称管理器中)写入状态应该是什么,然后在
Workbook_Open事件中检查状态应该是什么,然后相应地打开。 -
@guitarthrower:工作簿在只读模式下无法保存更改。当模式从只读切换到读写时,由于工作簿的完全重新加载,我也会丢失所有变量。
-
[slaps forehead] 当然你不能以只读模式保存 :) 听起来当它切换时,它正在重新打开文件(我没有 2013,所以我可以' t 检验)。如果是这种情况,您可以尝试在代码中的某个位置实现
Application.EnableEvents = False。另一种选择可能是在打开时检查当前状态。如果您可以发布您的Workbook_Open代码,将会有所帮助。 -
@guitarthrower:我创建了一个新工作簿,其中仅包含此代码(附加到问题中)来测试是否有其他原因导致问题。我能够复制错误。我遇到了使用窗口参数在工作簿之间传递变量,无论它们是否打开,这甚至都行不通。看来,当文件切换为只读时,其自身已终止。每次为工作簿分配一个新的 HWnd。
标签: vba excel excel-2003 excel-2013