【发布时间】:2013-09-30 16:31:01
【问题描述】:
VBA代码如何满足以下条件?
- 打开时始终显示特定的工作表,即使在未启用宏的情况下打开工作簿也是如此。
- 工作簿用户可以在处理任何工作表时保存工作簿。
- 保存不得干扰用户 - 不得导航到其他工作表、消息框等。
- 常规保存功能(Ctrl-S,单击保存)必须保持可用,并且在使用时必须遵守上述标准。
我想避免我在此问题底部列出的尝试解决方案。
详情:
该工作簿是在 Windows 7 计算机上使用 Office 2007 创建的。这是一个 .xlsm 工作簿,有 2 个工作表,“调度程序”和“信息”。工作表选项卡不可见。打开工作簿时,并非所有用户都会启用宏。
打开工作簿后,用户只会看到一张工作表,如下所示:
- “信息”在宏被禁用时显示,并且基本上告诉打开工作簿的任何人需要启用宏才能获得完整的工作簿功能。如果此时启用了宏,则会激活“调度程序”。
- “调度程序”是存储和编辑数据的地方,如果启用了宏,它会自动显示。在未启用宏的情况下打开工作簿时,它不会呈现给用户。
如果打开工作簿并禁用宏,则必须首先显示“信息”。
尝试过的解决方案(我正在寻找更好的解决方案!):
-
在
Workbook.BeforeSave事件中放置代码。 这会在激活“信息”的情况下保存,以便在打开工作簿时显示。但是,如果用户在“调度程序”中但未完成,我无法在此事件中找到在保存后重新激活“调度程序”的方法。 -
使用
Application.OnKey重新映射 Ctrl-s 和 Ctrl-S 击键。 不幸的是,这忽略了使用鼠标保存的用户(单击文件...保存或 Office 按钮...保存)。 -
在每个操作期间进行检查,如果需要激活“调度程序”。 换句话说,在
Workbook.SheetActivate或.SheetChange事件中插入代码以在使用“保存”后将“调度程序”重新置于焦点。信息”激活。这会不断运行 VBA 代码,让我觉得这是让工作簿中的其他代码陷入困境的好方法。 -
在
Worksheet("Info").Activate事件中放置代码,以将焦点更改回“调度程序”。这会导致在打开工作簿时显示“调度程序”而不是“信息”的结果,即使禁用了宏也是如此。
【问题讨论】:
-
"Info" must show up first thing if the workbook is opened and macros are disabled.如果宏被禁用,那么为什么要尝试Attempted Solutions:) 或者我在这里遗漏了什么? -
好问题 - 工作簿包含宏,但由用户在共享驱动器上打开,这些用户可能在受信任的文件路径中有也可能没有该位置。所以,对于那些在没有启用宏的情况下打开的人,我使用“信息”表说,“打开宏!”一旦它们被打开,那么我需要确保,无论工作簿上发生什么变化,一旦保存,下一个打开禁用宏的工作簿的人会看到“信息”。
-
我能想到的唯一方法是以只读模式保存文件。这样,它将始终以信息表作为第一张表打开...前提是您在信息表处于活动状态的情况下保存并关闭文件。 Excel 会记住您打开的最后一张工作表。
-
不幸的是,这不是一个选项,因为其他人需要修改“调度程序”,并且工作簿需要保存这些修改:(