在活动工作表以外的受保护工作表上隐藏锁定的行

时间:2016-03-02 11:22:49

标签: excel vba excel-vba macros

我正在尝试弄清楚如何使用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

由于

2 个答案:

答案 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上起作用,而首先受到保护。

最后,这只是我的挑剔,我会确定第一行代码工作的表格 - 明确表示你工作的对象是防止意外行为的好方法。