【问题标题】:Activate first workbook after closing second one?关闭第二个工作簿后激活第一个工作簿?
【发布时间】:2012-11-16 16:57:59
【问题描述】:

情况:

  1. 打开工作簿 A。
  2. A 中的代码打开工作簿 B。

    • B 现在是活动的 WB。
    • B 中的代码以ThisWorkBook.Close 结尾
  3. B 关闭,所以 A 出现。

问题是:我无法让 WB A 中的任何 Activate 事件在 WB B 关闭后自动触发。

但如果我手动关闭 WB B,使用鼠标“x”出 WB,或通过菜单,则 WB A 会触发 Activate 事件。

不知何故,使用 VBA 关闭 WB B 会阻止触发 WB A Activate 事件。

Excel 97 和 2003 中的结果相同

是我遗漏了什么,还是有解决方法??

【问题讨论】:

  • 下面我的答案中的激活语句似乎适用于我的测试用例。我不确定我是否完全理解你想要的我猜。如果您能制作一套对您有帮助但工作量很大的示例书籍。
  • 您知道您的父工作簿是否在子工作簿关闭之前被激活吗?这就是我似乎遇到的问题。

标签: excel vba


【解决方案1】:

在打开工作簿 B 之前,将工作簿 A 设置为定义的名称:

 Dim wb as workbook

 set wb = activeworkbook

 'run your code


 wb.Activate

编辑:

将此放在您的子书的每个 workbook_close() 事件中:

  windows("A.xlsm").activate

这将在您的一个子 wbs 关闭时激活您的主表 (您可能要添加检查 A.xlsm 是否打开,如果未打开或退出子程序)

【讨论】:

  • 如果您/您的用户继续打开多本书 (>2) 并随机关闭它们怎么办?你如何追踪它?
  • id 建议命名所有工作簿,并避免使用 activate 或 select 。因此,通过使用 wb.range 等,您可以对从一个代码块打开的任何工作簿执行任何操作。 wb 可以命名为任何您想要的名称,并且您可以拥有任意数量的名称。您需要使用逻辑和常识来跟踪哪些是开放的,哪些不是。
  • 感谢您的想法。 @scott 写“运行你的代码”的部分是我打开工作簿 B 的地方。但是在打开 B 之后,下一行将被执行并将控制权带回 WB A。我需要 A 打开 B,并留在 B直到,例如,在 WB B 上单击一个按钮,它将调用 thisworkbook.close,然后返回到 WB A。此时我需要 A 调用其激活事件。
  • 如果您发布代码和流程示例,提出建议会更容易
  • @scott 'A.xls 工作表 1 上的 A.xls 和控制工具箱按钮 Private Sub CommandButton1_Click() Workbooks.Open ("D:\excel\B.xls") End Sub --- ------------- 'B.xls Private Sub CommandButton1_Click() ThisWorkbook.Close End Sub 工作表 1 上的 B.xls 和控制工具箱按钮 感谢您的持续帮助!!!!!!
猜你喜欢
  • 1970-01-01
  • 2020-07-17
  • 2014-07-02
  • 2019-12-04
  • 1970-01-01
  • 2021-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多