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

时间:2011-03-30 08:09:19

标签: excel vba excel-vba

在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

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

5 个答案:

答案 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