在隐藏的工作表或工作簿上可以执行哪些 Excel VBA 操作?

Posted

技术标签:

【中文标题】在隐藏的工作表或工作簿上可以执行哪些 Excel VBA 操作?【英文标题】:What Excel VBA actions are possible on hidden worksheets or workbooks? 【发布时间】:2009-05-21 12:18:57 【问题描述】:

隐藏的工作表/工作簿对可以在 VBA 代码中执行的操作有一些限制,例如大多数 SelectSelection 语句,以及来自 ActiveSheet 的任何内容,但我似乎找不到任何列表限制是。

Google、帮助系统中的内置文档和 MSDN 的网站都让我失望了。谁能指出我正确的方向?

编辑: 使用

打开工作簿
Set WB_Master = Workbooks.Open(Filename:=PATH_Master, ReadOnly:=False)

然后用

隐藏
WB_Master.Windows(1).Visible = False

【问题讨论】:

您能否详细说明您是如何打开工作簿并使其不可见的? 【参考方案1】:

来自 Visual Basic for Applications 帮助:

当一个对象被隐藏时,它会从屏幕上移除,并且它的 Visible 属性设置为 False。用户无法访问隐藏对象的控件,但它们可以通过编程方式提供给正在运行的应用程序、可能通过自动化与应用程序通信的其他进程,以及在 Windows 中提供给 Timer 控件事件。

恐怕没有太多帮助,而且我通过 Google 也找不到太多其他帮助。

正如您自己所说,Select 方法和 Selection 属性不适用于隐藏的 Worksheet,但它们应该适用于隐藏的 Workbook。 (如果我错了,请纠正我。)但是,总的来说,在工作表中选择范围并不总是那么有效,最好使用 Range 属性(它适用于隐藏的工作表)。

编辑:

即使工作表不可见,以下代码也会将 A1:A8 的颜色更改为青色:

Dim book2 As Workbook
Set book2 = Workbooks.Open("C:\Book2.xls")

book2.Worksheets("Sheet1").Visible = False
book2.Windows(1).Visible = False

With book2.Worksheets("Sheet1").Range("A1:E8").Interior
    .ColorIndex = 8
    .Pattern = xlSolid
    .PatternColorIndex = xlAutomatic
End With

book2.Windows(1).Visible = True
book2.Worksheets("Sheet1").Visible = True

【讨论】:

我通常远离 Select 除非绝对必要,但我在这里的具体问题是尝试将背景颜色应用于既隐藏又不是活动工作簿的工作簿上的单元格。尽管直接引用工作簿,但它仅在工作簿可见且已激活时才有效。 可以使用 WorkSheet 函数访问不可见的工作簿。只需指定工作表名称。帕特里克提供了一个例子。【参考方案2】:

您可以绕过隐藏工作表的任何限制,方法是在用户没有意识到的情况下取消隐藏它们,执行您需要的任何操作,然后再次隐藏它们。

此示例假定 Sheet2 是隐藏的。

Sub DoStuffToAHiddenSheetWithoutTheUserKnowingIt()
    'turns off screen repainting so the user can't see what you're doing
    'incidentally, this dramatically speeds up processing of your code
    Application.ScreenUpdating = False
    'note that if you're stepping through your code, screenupdating will be true anyway

    'unhide the sheet you want to work with
    Sheets("sheet2").Visible = True
        'do whatever you want here, including selecting cells if you want
        'Scagnelli is right though, only select cells if you have to

    'when you're finished, hide the sheet again
    Sheets("sheet2").Visible = False

    'make sure you turn screenupdating back on, or Excel will be useless
    Application.ScreenUpdating = True
End Sub

如果您想隐藏工作表,另一个有用的技巧是将它们设置为 xlVeryHidden,如果用户尝试通过菜单或功能区取消隐藏它们,这将阻止它们向用户列出。

【讨论】:

以上是关于在隐藏的工作表或工作簿上可以执行哪些 Excel VBA 操作?的主要内容,如果未能解决你的问题,请参考以下文章

更改另一个工作簿上的值时,Application.Volatile 不会重新计算函数

当其他Excel实例具有焦点时,无法获取活动工作表或选定范围

EXCEL VBA 隐藏了工作表,加密的,如何显示或破解

如何快速搜索出excel工作表中哪些单元格链接到其他数据源?

多个Google表格/工作簿上的SQL联盟

VLookup 在另一个工作簿上