Активировать последний активный видимый лист - PullRequest
0 голосов
/ 30 октября 2019

В настоящее время у меня есть рабочая книга, содержащая несколько «очень скрытых» листов, которые станут видны только после ввода правильного пароля. Однако, в случае ввода правильного пароля, как мне написать код, который активирует тот лист, который только что стал видимым, то есть Excel должен игнорировать все «очень скрытые».

Я попробовалкод:

Sub MoveNext()
On Error Resume Next
Sheets(ActiveSheet.Index + 1).Activate
If Err.Number <> 0 Then Sheets(1).Activate
End Sub

Однако это не работает.

Ответы [ 2 ]

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

Объявление глобальных переменных в отдельном модуле

скажем,

Global Const g_sPassword As String = "password"

в следующем модуле, где вам нужно кодировать, сделайте этокак указано ниже

', упоминаются только те листы, которые должны быть видны, другие листы будут автоматически скрыты

Sub OpenSheet (sSheetName As String)

Dim shtSheetToOpen As Worksheet, shtLoopSheet As Worksheet

Set shtSheetToOpen = ThisWorkbook.Sheets(sSheetName)
Application.ScreenUpdating = False
shtSheetToOpen.Visible = xlSheetVisible
For Each shtLoopSheet In ThisWorkbook.Sheets
    If shtLoopSheet.Name <> shtSheetToOpen.Name And shtLoopSheet.Name <> "Sheets to be visible"   Then
       shtLoopSheet.Visible = xlVeryHidden
    End If
Next shtLoopSheet
shtSheetToOpen.Activate

Set shtSheetToOpen = Nothing
Set shtLoopSheet = Nothing

End Sub

'затем включите следующий код

Sub OpenSample ()

Dim sUserInput As String

sUserInput = InputBox("Please enter password", "Password Prompt", "")

If sUserInput =  g_sPassword Then
    MsgBox "Access Granted", vbInformation, "Access"
    Call OpenSheet("Sheetsname")
    sheetname.Activate
Else
    MsgBox "Incorrect Password.Please try again", vbCritical, "Error"
End If

End Sub

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

как написать код, который активирует тот лист, который только что стал видимым

Вы можете сохранить лист, который вы видите, в объекте, а затем активировать

Например

Private ws As Worksheet

Sub UnhideCode()
    '<~~ Just an example since I do not know how you are unhiding
    If pass = "OK" Then 
        Set ws = Sheet1 '<~~ Change this to the relevant sheet
        ws.Visible = xlSheetVisible
    End If
End Sub

Sub MoveNext()
    If Not ws is Nothing then ws.Activate
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...