Ошибка-1004 в Excel VBA - Невозможно установить видимое свойство класса листа - PullRequest
4 голосов
/ 30 марта 2011

С помощью форума Excel я создал форму входа пользователя, в которой у меня 5 пользователей. Каждый пользователь может иметь доступ только к назначенным ему листам. Это работает нормально. Но теперь я защитил «структуру рабочей книги», чтобы пользователи не добавляли и не удаляли листы. Затем я снова вхожу, и вместо отображения формы входа в Excel VBA появляется сообщение об ошибке:

Ошибка-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

Есть ли способ исправить это, чтобы я мог получить доступ к форме входа в систему, как я делал до защиты паролем "структуры рабочей книги"?

Ответы [ 3 ]

7 голосов
/ 25 апреля 2012

Вот еще одна проблема по этому поводу.

Вы можете НЕ скрыть ВСЕ рабочих листов в рабочей книге. Таким образом, если вы знаете, что у вас будет хотя бы 1 лист, который ВСЕГДА будет виден, исключите его из процесса сокрытия.

2 голосов
/ 30 марта 2011

Вам придется снять защиту и восстановить защиту в коде.Недостатком является то, что ваш пароль будет в коде.

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
2 голосов
/ 30 марта 2011

Была ли у вас одновременно открыта другая книга Excel при тестировании?Там нет явной ссылки на книгу, которую вы ищете, поэтому, если вы запустите этот код с книгой, в которой лист «Всплеск» недоступен, макрос попытается установить все листы скрытыми, что может вызвать эту ошибку.

Чтобы смоделировать его, откройте новый сеанс Excel и запустите этот макрос:

Sub test()

    Dim oSheet As Excel.Worksheet

    For Each oSheet In Worksheets

        oSheet.Visible = xlSheetVeryHidden

    Next oSheet

End Sub

Если я не лаю на неправильное дерево, вы получите ту же ошибку.

Чтобы решить эту проблему, просто добавьте имя книги в свой цикл, и это будет выглядеть так (очевидно, вы должны убедиться, что есть лист «Всплеск», иначе возникнет ошибка):

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

1011 * Rgds *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...