Как сохранить форму пользователя открытой при закрытии других экземпляров Excel - PullRequest
0 голосов
/ 18 октября 2019

Надеюсь, кто-то может помочь - у меня есть пользовательская форма, которая открывается при запуске файла Excel (Test.xlsm) и скрывает книгу от посторонних глаз. Книга может стать видимой для редактирования при нажатии кнопки и вводе пароля от пользовательской формы. Все работает нормально - до тех пор, пока вы не откроете еще один экземпляр Excel. Когда вы закончите с ним и закроете любой дополнительный экземпляр Excel, он также либо 1. закроет пользовательскую форму, либо 2. покажет книгу Excel за пользовательской формой. Ни то, ни другое я не хочу. Мне нужно, чтобы пользовательская форма оставалась открытой, и мне нужно, чтобы связанная с ней книга оставалась скрытой до тех пор, пока она не будет вызвана.

Вопрос - существует ли какой-либо код, который будет препятствовать тому, чтобы другие экземпляры Excel выполняли свои действия, или ясновидение. Я нашел некоторый код (ниже), который, как сказал писатель, сделал именно то, что я ищу, но все, что я получил, это глобальные ошибки.

Private Sub WorkBook_Open()

    If Workbooks.Count = 1 Then Application.Visible = False

    Workbooks("test.xlsm").Windows(1).Visible = False

    UserForm1.Show vbModeless

End Sub

Любая помощь с благодарностью.

Кстати - коддля рабочей книги открыто

Private Sub Workbook_Open()
    Set Thiswb = Me.Application
    Application.Visible = False
    Staff_Contacts.Show vbModeless
End Sub

1 Ответ

0 голосов
/ 18 октября 2019

Для описанного вами варианта использования я бы предложил вам нечто похожее на это решение:

Sub Workbook_open()
    Dim wrong_attempts As Integer
    wrong_attempts = 0
    Dim sheet As Worksheet
    Set sheet = ActiveWorkbook.Sheets.Add(After:=ActiveWorkbook.Worksheets(ActiveWorkbook.Worksheets.Count))
    ActiveWorkbook.Sheets("Sheet2").Visible = xlSheetVeryHidden
Start1:
    If wrong_attempts > 4 Then
        MsgBox "You've entered wrong password too many times. File will now be closed"
        Application.DisplayAlerts = False
        sheet.Delete
        ActiveWorkbook.Close
        Application.DisplayAlerts = True
    End If
    InputBoxVariable = InputBox(Prompt:="Please enter password to access this document", Title:="Authorization required", Default:="")
    If InputBoxVariable = "12345" Then
        ActiveWorkbook.Sheets("Sheet2").Visible = xlSheetVisible
        Application.DisplayAlerts = False
        sheet.Delete
        Application.DisplayAlerts = True
    Else
        wrong_attempts = wrong_attempts + 1
        GoTo Start1
    End If
End Sub

В этом примере предполагается, что sheet2 должен быть защищен. При самой загрузке документа будет создан фантомный лист, и после успешного входа в систему он будет удален, и sheet2 должен снова появиться. Кроме того, если кто-то введет неправильный пароль 5 раз, файл закроется автоматически.

Справедливое уведомление, я использовал InputBox здесь, поэтому пароль не маскируется, если вы также хотите замаскировать пароль, у вас будетсделать новую форму с кнопкой и текстовым полем.

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