Обновление VBA в заявлении if - PullRequest
0 голосов
/ 05 июня 2018

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

Моя проблема в том, что если я выберу лист со списком, он переместится на этот лист.

Я попытался установить Application.Calculation = xlCalculationManual и Application.ScreenUpdating = False в конце и попробовал это с If -Statement.Это не работает.

Public comBox2 As Boolean
Private Sub ComboBox2_Change()
    Dim sName As String 'name of sheet to show

    comBox2 = True

    sheetName = ComboBox2.Value

    With ActiveWorkbook.Sheets(sheetName)
        .Activate
    End With
End Sub
Sub Userform_initialize()
    If comBox2 Then
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False
    ElseIf comBox2 = False Then
    comBox2 = False
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    End If
End Sub

Ответы [ 2 ]

0 голосов
/ 05 июня 2018
Public comBox2 As Boolean
Private Sub ComboBox2_Change()
    Dim sName As String 'name of sheet to show

    comBox2 = True

    sheetName = ComboBox2.Value

End Sub
Sub Userform_initialize()
    If comBox2 Then
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False
    ElseIf comBox2 = False Then
    comBox2 = False
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    End If
End Sub

Итак, я удалил эту активацию листа.Теперь, что бы я сделал, это поместил кнопку рядом со списком с надписью «unprotect» и вставил в нее код для защиты, например:

 Activeworkbook.sheets(ComboBox2.value).Unprotect "password" ' in case there is fixed password

или, если есть разные пароли, то

Dim pass As Variant
pass = InputBox("Password?")
Activeworkbook.sheets(ComboBox2.value).Unprotect pass 
0 голосов
/ 05 июня 2018

В случае, если выпадающий список находится на рабочем листе, проверьте, является ли лист выпадающего списка активным:

Private Sub ComboBox2_Change()

    If ComboBox2.Parent.Name = ActiveSheet.Name Then Exit Sub
    ActiveWorkbook.Sheets(sheetName).Activate

End Sub

Если он находится в форме:

Private Sub ComboBox2_Change()

    If ComboBox2.Text = ActiveSheet.Name Then Exit Sub
    ActiveWorkbook.Sheets(sheetName).Activate

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