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 上的“自动化错误未指定错误”?
使用 Excel VBA 实现复制 粘贴 和保存,并自动运行VBA