Excel VBA中的错误-1004-无法设置工作表类的visible属性

lok*_*ath 4 excel vba excel-vba

在Excel论坛的帮助下,我创建了一个用户登录表单,其中有5个用户.每个用户只能访问分配给他/她的表单.这工作正常.但是现在我已经保护了"工作簿结构",以避免用户添加/删除工作表.然后我再次登录,而不是显示登录表单,Excel VBA中弹出错误消息:

Error-1004无法设置工作表类的visible属性

当我调试时,错误在以下代码中突出显示,其中工作表的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
Run Code Online (Sandbox Code Playgroud)

有没有办法纠正这个问题,因为我可以像密码保护"工作簿结构"之前那样访问登录表单?

Gol*_*hop 6

这是对此的另一个担忧.

你可以隐藏所有工作表的工作簿中.因此,如果您知道您将至少有一张始终可见的工作表,请将其从隐藏过程中排除.


Tia*_*oso 3

测试时是否同时打开了另一个Excel工作簿?没有明确引用您正在查找的书籍,因此,如果您运行此代码时工作簿中的“Splash”工作表不可用,则宏将尝试将所有工作表设置为隐藏,这可能会引发此错误。

要模拟它,请打开一个新的 Excel 会话并运行此宏:

Sub test()

    Dim oSheet As Excel.Worksheet

    For Each oSheet In Worksheets

        oSheet.Visible = xlSheetVeryHidden

    Next oSheet

End Sub
Run Code Online (Sandbox Code Playgroud)

如果我没有对着错误的树吠叫,你也会得到同样的错误。

要解决这个问题,只需将工作簿名称添加到循环中,就会像这样(显然,您必须确保有一个“Splash”工作表,否则会出现错误):

For Each wsSht In Workbooks("Mybook.xlsm").Worksheets
    If Not wsSht.Name = "Splash" Then wsSht.Visible = xlSheetVeryHidden
Next wsSht
Run Code Online (Sandbox Code Playgroud)

参考值