Вам нужно создать функцию без параметров, которые вы можете использовать в качестве команды:
b = Button(admin, text='as', command=lambda: button('hey'))
См. раздел «Передача аргументов в обратные вызовы» в этом документе .
Вы не используете подарки, которые дает вам Workbook_SheetActivate. Sh - объект рабочего листа, который активируется.
Ваше объявление переменной является henky; вы объявляете Dim MySheets As String, но никогда не используете его и не назначаете MySheet = «Sheet1» и MySheet2 = «Sheet2», не объявляя их.
Некоторые уровни идентификации листа лучше обрабатываются с помощью свойства кодового файла , который изменяется гораздо реже.
Option Explicit
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim response As String
If IsError(Application.Match(Sh.CodeName, Array("Sheet1", "Sheet2"), 0)) Then
Sh.Visible = xlSheetHidden
response = InputBox("Enter password to view sheet")
If response = "MyPass" Then
Application.EnableEvents = False
Sh.Visible = xlSheetVisible
Sh.Activate
Application.EnableEvents = True
End If
End If
Sheet1.Visible = True
Sheet2.Visible = True
End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
If IsError(Application.Match(Sh.CodeName, Array("Sheet1", "Sheet2"), 0)) Then
Sh.Visible = xlSheetHidden
End If
End Sub
Другим вариантом является привязка к Named range. Вы создаете именованный диапазон с областью листа, например, следующим образом: Менеджер имен Ctrl + F3
Затем вы создаете дополнительную функцию, которая позволяет проверить, существует ли такое имя и получить его значение. В зависимости от результата лист будет скрыт или нет.
Public Function bIsVisible(ByRef wksSheet As Worksheet) As Boolean
Dim bResult As Boolean
bResult = False
On Error Resume Next
bResult = Evaluate(wksSheet.Names("Visible").Value)
bIsVisible = bResult
End Function
И вот код для скрытия листов (вы можете легко добавить здесь код для защиты листа и т. Д.):
Public Sub HideUnvisible()
Dim wksSheet As Worksheet
For Each wksSheet In Worksheets
If Not bIsVisible(wksSheet) Then
wksSheet.Visible = xlSheetHidden
End If
Next wksSheet
End Sub
Option Explicit
сохраняет мир & quot; напоминание, хотя вы использовали его в своем примере кода :-) – AJD 14 July 2018 в 07:52