Я пытаюсь обеспечить безопасность своей книги, используя очень скрытый способ заставить пользователей включать макросы.
Это прекрасно работает, за исключением того, что пользователи жаловались на отсутствие диалогового окна с вопросом, хотят ли они сохранитьили нет при закрытии.
Я добавил функцию сохранения / сохранения в форме сообщения msgbox, однако это открыло конкретный случай нарушения безопасности:
А именно, если пользователь открываетфайл, включающий макросы, проходит через заставку, сохраняет рабочую книгу с помощью функции сохранения, затем закрывается без сохранения, а затем при следующем открытии рабочей книги пользователь не будет вынужден включать макросы.
IЯ пытался обойти это с помощью следующего набора кодов, который запускался во время сохранения (мне не повезло с сохранением до сохранения, потому что он снова сохранялся после выполнения кода, который побеждал смысл кода), но этот код, похоже,создать бесконечный цикл, вызванный сохранением.Я попытался поместить проверку в начале, чтобы проверить, было ли сохранено состояние, но поскольку макрос выполняется после сохранения, это всегда является истинным состоянием для макроса.
Аналогичным образом я попытался добавить проверку внизу дляпосмотрите, сохранено ли оно, и если это так, выйдите из подпрограммы, однако код никогда не заходит так далеко, потому что он снова запускается при сохранении.
У кого-нибудь есть идеи?(код ниже)
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
If Success = True Then
'Step 1: Define WS variable
Dim ws As Worksheet
'Step 2: Unhide the Starting Sheet
Sheets("START").Visible = xlSheetVisible
'Step 3: Start looping through all worksheets
For Each ws In ThisWorkbook.Worksheets
'Step 4: Check each worksheet name
If ws.Name <> "Start" Then
'Step 5: Hide the sheet
ws.Visible = xlVeryHidden
End If
'Step 6: Loop to next worksheet
Next ws
'Step 7: Save the workbook
ActiveWorkbook.Save
'Step 8: Start looping through all worksheets
For Each ws In ThisWorkbook.Worksheets
'Step 9: Re-Unhide All Worksheets
ws.Visible = xlSheetVisible
'Step 10: Loop to next worksheet
Next ws
'Step 11: Re-Hide the Start Sheet
Sheets("START").Visible = xlVeryHidden
'Step 12: Exit loop
If ThisWorkbook.Saved = True Then
Exit Sub
End If
End If
End Sub