Как запретить запуск частной подписки с паролем

У меня есть две частных подписки для активных флажков x. Когда я нажимаю одну кнопку, другая кнопка блокируется. Я хочу создать кнопку, которая будет действовать как переопределение, где, если я введу пароль, два частных подпрограммы не будут работать.

Private Sub CRM_box_Click()
If CRM_box.Value = True Then
    CheckBox14.Value = False
    CheckBox14.Enabled = False
Else
    CheckBox14.Value = False
    CheckBox14.Enabled = True
End If

Private Sub RMP_box_Click()
If RMP_box.Value = True Then
    CRM_box.Value = False
    CRM_box.Enabled = False
Else
    CRM_box.Value = False
    CRM_box.Enabled = True
End If

Что вы имеете в виду «не будет работать»? ... чтобы другой раздел кода не вызывал их, или вы пытаетесь запретить пользователям входить в VBA и запускать их вручную? Если это проблема безопасности, я должен вас предупредить, что нет такой вещи, как 100% безопасный общий документ Office; только способы усложнить людям делать то, что они хотят.

ashleedawg 02.05.2018 11:51
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
170
1

Ответы 1

Чтобы «переопределить» Private Sub для ваших флажков, вы можете сделать следующее:

В вашем VBE создайте модуль (если у вас его еще нет) и введите Public override As Boolean в первой строке.

Для каждой из ваших частных подписок для флажков добавьте следующее над текущим оператором If: If override = False Then Exit Sub вот так:

Private Sub CRM_box_Click()

    If override = False Then Exit Sub

    If CRM_box.Value = True Then
        RMP_box.Value = False
        RMP_box.Enabled = False
    Else
        RMP_box.Value = False
        RMP_box.Enabled = True
    End If

End Sub

Что касается парольной части вашего вопроса, вы можете создать UserForm.

Если вы не знакомы с UserForms, существует множество руководств и инструкций о том, как их создавать, выполнив поиск в Google или аналоге вроде «Как создать пользовательскую форму в excel».

Я сделал простой UserForm с label, textbox и commandbutton. Глянь сюда.

Для commandbutton вы можете использовать следующий код:

Private Sub CommandButton1_Click()

    Dim pwrd As String
    Dim setPwrd As String

    pwrd = UserForm1.TextBox1.Text
    setPwrd = "abc" 'Change this string to whatever you want your password to be

        If pwrd = setPwrd Then
            override = False
            Unload UserForm1
        Else
            MsgBox "Incorrect Password" & vbNewLine & "Please try again.", vbCritical
        End If
    End Sub

Когда вы вводите свой пароль в текстовое поле и нажимаете кнопку команды, vba сравнивает ваш ввод с переменной setPassword. Если это совпадение, он устанавливает для публичной переменной override значение False. Если пароль не совпадает, вы получите сообщение, чтобы повторить попытку.

Если override = False, он направляет ваш Private Sub для ваших флажков на Exit Sub перед выполнением кода - ваш код «переопределен».

В итоге:

  1. Объявите общедоступную переменную как логическое значение.
  2. Установите оператор If в каждой частной подписке для флажков.
  3. Создайте пользовательскую форму для ввода пароля.
  4. Напишите код для установки пароля и того, что происходит, когда вы отправляете свой пароль.

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

Спасибо, это работает именно так, как вы описали. Один вопрос, как только я установлю пароль и выйду из подпрограммы, есть ли способ отменить команду? Я попытался создать вторую командную кнопку с другим паролем, чтобы перевернуть override = true, но тогда мой исходный код не запускается. Еще раз спасибо!

Ryan Mao 04.05.2018 23:42

Я рада, что помогло! В коде для флажков добавьте Else в конец If override = False Then Exit Sub. Для вашей второй командной кнопки скопируйте точный код для первой командной кнопки и измените override = False на override = True. Если вам нужен другой пароль для второй кнопки, это вообще не должно быть проблемой. Просто запомните, какой пароль для какой кнопки. Если он ответил на ваш вопрос, обязательно отметьте ответ как принятый, чтобы помочь другим членам сообщества, если у них есть тот же вопрос.

Samuel Everson 05.05.2018 12:26

Другие вопросы по теме