在Excel论坛的帮助下,我创建了一个用户登录表单,其中有5个用户。每个用户只能访问分配给他/她的表单。这工作正常。但是现在我已经保护了“工作簿结构”,以避免用户添加/删除工作表。然后我再次登录,而不是显示登录表单,在Excel VBA中弹出错误消息:
Error-1004无法设置工作表类的可见属性
当我调试时,错误在以下代码中突出显示,其中工作表的visible属性设置为“True”,“False”或“xlSheetVeryHidden”。
Private Sub Workbook_Open()
Dim wsSht As Worksheet
Worksheets("Splash").Visible = True
Worksheets("Users").Visible = False
For Each wsSht In Worksheets
If Not wsSht.Name = "Splash" Then wsSht.Visible = xlSheetVeryHidden
Next wsSht
With Worksheets("Splash")
.Visible = True
.Activate
End With
frmLogin.Show
bBkIsClose = False
End Sub
有没有办法纠正这个问题,因为我可以像密码保护“工作簿结构”之前那样访问登录表单?
答案 0 :(得分:7)
这是对此的另一个担忧。
您可以不隐藏工作簿中工作表的所有。因此,如果您知道您将至少有一张始终可见的工作表,请将其从隐藏过程中排除。
答案 1 :(得分:2)
在测试时,您是否同时打开了另一个Excel工作簿?没有明确引用您正在寻找的书,因此如果您运行此代码的工作簿中“Splash”工作表不可用,宏将尝试将所有工作表设置为隐藏,这可能会引发此错误。
要模拟它,请打开一个新的Excel会话并运行此宏:
Sub test()
Dim oSheet As Excel.Worksheet
For Each oSheet In Worksheets
oSheet.Visible = xlSheetVeryHidden
Next oSheet
End Sub
如果我没有吠叫错误的树,你会得到同样的错误。
要解决此问题,只需将工作簿名称添加到循环中,就像这样(显然,您必须确保存在“Splash”表,否则会出现错误):
For Each wsSht In Workbooks("Mybook.xlsm").Worksheets
If Not wsSht.Name = "Splash" Then wsSht.Visible = xlSheetVeryHidden
Next wsSht
RGDS
答案 2 :(得分:2)
您必须在代码中取消保护并重新保护。缺点是您的密码将在代码中。
Private Sub Workbook_Open()
Dim wsSht As Worksheet
Me.Unprotect "password"
Me.Worksheets("Splash").Visible = True
Me.Worksheets("Users").Visible = False
For Each wsSht In Me.Worksheets
If Not wsSht.Name = "Splash" Then wsSht.Visible = xlSheetVeryHidden
Next wsSht
With Me.Worksheets("Splash")
.Visible = True
.Activate
End With
frmLogin.Show
bBkIsClose = False
Me.Protect "password", True, False
End Sub
答案 3 :(得分:0)
我不确定这是否相关,但是当我寻找如何隐藏最后一个(也是唯一的)工作表时,我发现了这个问题。想要这样做的原因是因为该文件是一个包含公司范围内的宏的启动文件,用户不应该对其进行编辑。我发现虽然需要保持工作表打开,但显示它的窗口却不需要。
这是一个例子:
Sub spork()
Dim x As Workbook
x.Windows.Item(1).Visible = False
End Sub
现在,Excel将打开没有可见工作表的文件。
答案 4 :(得分:0)
有时会出现“故障”(也称为“功能”或“错误”),只是由于没有明显原因而返回此错误。不是工作表保护,也不是这是最后一个可见的工作表。要修复对我有用的“功能”:
Public Sub UnhideAll()
Dim wks As Worksheet
For Each wks In ThisWorkbook.Worksheets
wks.Visible = xlSheetVisible
Next
End Sub