Worksheet_Activate 代码仅在 1 个工作表中无法运行

Posted

技术标签:

【中文标题】Worksheet_Activate 代码仅在 1 个工作表中无法运行【英文标题】:Worksheet_Activate code fails to run in only 1 worksheet 【发布时间】:2015-11-28 11:50:39 【问题描述】:

我有一个奇怪的 VBA 问题。它有简单的代码来隐藏未使用的行。它对我很有帮助,(我实际上并没有做到)并且所有的错误都已修复。

但是,现在它已停止运行仅在一个工作表中的工作表激活代码。其他工作表的代码运行良好,并且几乎相同(list3 代替 list1 作为命名范围,EntireColumn 代替 EntireRow)。

当我打开 Visual Basic 并尝试手动运行工作表激活代码时,它给了我这个错误:

编译错误:对象库无效或包含对无法找到的对象定义的引用。

我不知道从哪里开始尝试修复它,尤其是当 Google 似乎没有产生任何结果时,即使使用了新的居高临下的徽标。

Private Sub Worksheet_Activate()

    Application.ScreenUpdating = False

    Dim cell As Range

    For Each cell In Range("list3") 'This changes to list1 to list4
        cell.EntireRow.Hidden = cell.Value2 = ""
    Next cell

    Application.ScreenUpdating = True

End Sub

编辑:

现在两个工作表都不起作用,不知道是不是和"EntireRow.Hidden"有关。

【问题讨论】:

您必须出示代码才能获得任何帮助。 SO 社区对此立场非常坚定。因此,只需编辑您的问题,并向我们展示代码和该行所在的错误,应该有人能够帮助您。 a) 显示代码并指出产生错误的行 b) 你为什么不在工作表上使用 Workbook_SheetActivate 和 Select Case statement .Name property? @Constuntine 对不起,会发帖的! 您可能需要检查公式 ► 定义的名称 ► 名称管理器以获取具有工作簿范围的有效 list3 @Jeeped A. 我一尝试运行它就会收到错误消息。 (它突出显示第一行,即使 sub 不是私有的。) B. 我不知道这甚至意味着什么,我从这里自学了 vba 和我在工作中找到的宏。我也没有写代码。我假设代码是使用 VBA 中的下拉菜单找到的,左侧是 Worksheet,左侧是 Activate。编辑:是的,list1 到 list4 具有工作簿范围 【参考方案1】:

不激活是失败,而是去激活。在激活excel之前必须先去激活活动表,所以如果只有一张表的话……不能去激活!

您可以尝试一个技巧,通过激活最小化然后最大化。会产生同样的效果,如果你把它们放在同一个语句上,你甚至不会感觉到中断。

【讨论】:

我有多张纸,当我在它们之间切换时会得到这个。停用不是问题。 首先,为了正确使用,您必须将该代码放入适当的对象模块中,该模块包含list3 列表。 (例如Sheet1.Module)。这样做的原因是为worksheet_activate 提供参考以知道要激活哪个工作表(因为只能有一个 list3 )。其次,在您完成第一步之后,您可以在 Visual Basic 中运行代码,它会显示隐藏的行,但是因为Application.ScreenUpdating = False 工作表不会激活,您必须手动激活它。

以上是关于Worksheet_Activate 代码仅在 1 个工作表中无法运行的主要内容,如果未能解决你的问题,请参考以下文章

是啥导致 Worksheet_Activate 上的“自动化错误未指定错误”?

仅在 Java 代码中构建 HTML

使用 Excel VBA 实现复制 粘贴 和保存,并自动运行VBA

如何仅在 github 上找到 python 3 代码?

具有嵌套任务的 C# 代码比仅在顶层具有任务的相同代码运行速度慢

仅在 C 中执行一次代码的更简洁的方法?