我正在尝试弄清楚如何使用VBA代码隐藏锁定的行。 假设我有3个受密码保护的工作表,所有单元格都已锁定且 UserInterfaceOnly:= True 。
我的ActiveX按钮位于Sheet1上。我想在所有工作表(Sheet1,Sheet2和Sheet3)中隐藏行(“1:2”)。但是,代码只适用于Sheet按钮所在的Sheet1。当在Sheet2 / Sheet3上隐藏行时,Excel表示我无法隐藏该范围,因为它已被锁定。但是,它也被锁定在Sheet1上,但它只是工作并隐藏/取消隐藏行1:2。
我已经提出了一个解决方案,在隐藏/取消隐藏行然后再次保护行之前,取消保护其他两张表。然而,这对我来说看起来并不合适,并使得Excel在所有这些片材之间进行,这需要花费一些(非常少的)时间并且在这样做时“闪烁”。这对我来说是不受欢迎的。代码如下所示:
Rows("1:2").EntireRow.Hidden = True
Sheet2.Unprotect Password:=pwd
Sheet2.Rows("1:2").EntireRow.Hidden = True
Sheet2.Protect Password:=pwd, AllowFormattingCells:=True, UserInterfaceOnly:=True
Sheet3.Unprotect Password:=pwd
Sheet3.Rows("1:2").EntireRow.Hidden = True
Sheet3.Protect Password:=pwd, AllowFormattingCells:=True, UserInterfaceOnly:=True
正如你所看到的,我并没有取消对Sheet1的保护,它确实有效。
有没有办法实现这一点,还是只能在ActiveX按钮所在的工作表上工作?另外,我不想使用AllowFormatingRows:= True 。
由于
答案 0 :(得分:2)
我很害怕你应该使用Unprotect / Protect命令。没有它,它将无法运作。
但是,您可以尝试使用Application.ScreenUpdating标志来删除“闪烁”。
Application.ScreenUpdating = False
Rows("1:2").EntireRow.Hidden = True
Sheet2.Unprotect Password:=pwd
Sheet2.Rows("1:2").EntireRow.Hidden = True
Sheet2.Protect Password:=pwd, AllowFormattingCells:=True, UserInterfaceOnly:=True
Sheet3.Unprotect Password:=pwd
Sheet3.Rows("1:2").EntireRow.Hidden = True
Sheet3.Protect Password:=pwd, AllowFormattingCells:=True, UserInterfaceOnly:=True
Application.ScreenUpdating = True
答案 1 :(得分:2)
为防止屏幕闪烁,您可以在运行宏之前设置Application.ScreenUpdating = False
,然后将其返回True
。
至于能够隐藏行而不保护它们首先出现的纸张,我认为这是不可能的。坦率地说,我很惊讶它在ActiveSheet
上起作用,而首先受到保护。
最后,这只是我的挑剔,我会确定第一行代码工作的表格 - 明确表示你工作的对象是防止意外行为的好方法。