【发布时间】:2023-03-03 21:37:01
【问题描述】:
我有一个包含 2 张工作表的 excel 文件,在单元格 B5 的 sheet1 中,我有一个值会根据其他单元格自动更改。如果 sheet1 上的 B5 分别为 3 或 2,我的目标是隐藏 sheet2 上的 Y:AN 或 AQ:BF 列。我应用了下面的代码,但是当我保护 sheet2 时不起作用。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(False, False) = "B5" Then
Select Case Target.Value
Case "3"
Columns("Y:AN").EntireColumn.Hidden = True
Case "2"
Columns("AQ:BF").EntireColumn.Hidden = True
Case Else
Union(Columns("Y:AN"), Columns("AQ:BF")).EntireColumn.Hidden = False
End Select
End If
结束子
【问题讨论】:
-
以编程方式取消保护/保护,或将保护更改为
UserOnlyInterface:=True。 -
如果您将值从 3 更改为 2,它不会取消隐藏“Y:AN”列。这是故意的吗?
-
你说单元格B5我有一个值会根据其他单元格自动改变。这是否意味着 B5 包含一个公式?如果是这样,B5 更改不会触发 Change 事件。您需要使用Calculate 事件。 SO上有很多关于这个的帖子
-
如果事件确实触发了,并且代码在
Sheet1中(它必须响应Sheet1!B5的变化),那么您的代码将隐藏Sheet1上的列。您需要使用所需的工作表参考来限定它们 -
此外,如果一次更改 >1 个单元格,您的代码将出错,例如使用复制/粘贴