【问题标题】:How to hide an Excel workbook from VBA but NOT a UserForm?如何从 VBA 隐藏 Excel 工作簿而不是用户窗体?
【发布时间】:2017-09-12 20:40:27
【问题描述】:

我想为 Excel 工作簿创建一个类似于 GUI 的界面,并且我不希望工作簿在关闭之前可见。但是,使工作簿不可见会使我的代码引用混乱,如果不进行大量修改,我就无法读取范围。我尝试最小化窗口,但这也最小化了表单。

有没有办法保持活动工作簿处于活动状态但不易显示,并且表单可见?

【问题讨论】:

  • 如果发生这种情况:“但是,使工作簿不可见会使我的代码引用混乱,如果不进行大量修改,我就无法读取范围。”那么您可能在您的代码中使用.Select.Activate。这是一种不好的做法,强烈建议避免(许多未定义的问题和缓慢的代码)。如果是这种情况,谷歌如何避免同时使用它们,有很多教程。是的,删除它们可能需要做很多工作,但可以为您在以后的调试中节省大量时间,并使您的代码变得更好。
  • 我原以为不需要保持工作簿处于活动状态 - 你不能只使用变量引用工作簿/工作表吗?这对我来说很好,我仍然可以在我喜欢的任何工作簿上引用任何工作表:Private Sub Workbook_Open(): Application.Visible = False: UserForm1.Show: End Sub
  • @DarrenBartrup-Cook 是的,我就是这么说的。不要使用.Select.Activate 而是直接引用工作表,如Worksheets("MySheetName").Range("A1")。但我认为因为他说隐藏工作表会弄乱他正在使用.Select 的引用,他必须将其更改为不使用.Select 并直接引用。那么即使隐藏工作簿,引用仍然有效。
  • 是的,对不起,我想我和你同时写了我的评论。在检查了我的一点代码之后,按照我所说的做了你已经发布了,但不想浪费 5 分钟来测试我的代码,所以无论如何都发布了。 :)
  • @DarrenBartrup-Cook 啊,不用抱歉,我以为你的评论是指我而不是他哈哈。这让我很困惑。现在更有意义的是,这条评论是针对 Viriax 的。

标签: excel vba


【解决方案1】:

在加载用户表单时包含以下内容

Private Sub UserForm_Initialize()
    ThisWorkbook.Application.Visible = False
End Sub

当你结束用户表单时(返回正常状态)

Private Sub UserForm_Terminate()
    ThisWorkbook.Application.Visible = True
End Sub

【讨论】:

  • 谢谢!这对我有用。但是,如果我离开“ThisWorkbook”,我必须将其更改为 Application.Visible = True。它不会再次出现。
【解决方案2】:

将此代码放入表单的 UserForm_Initialize 方法中

ActiveWindow.Visible = False

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-06
    • 1970-01-01
    相关资源
    最近更新 更多