Страницы: 1
RSS
Работа с Combobox ribbon, Обратный ответ для Combobox
 
Добрый день у меня создан раздел в ленте. В него добавлен Combobox. Такого формата
Код
<comboBox id="MyCombobox" label="Выбор таблицы" getText="GetText"  onChange="GetText">
                            <item id="Item1" label="Документы" />
                            <item id="Item2" label="Управление" />
                            <item id="Item3" label="Рассылка" />
                       </comboBox>

и принимающий код в модуле
Код
'-----------Элемент comboBox
Public Sub GetText(ComboBox As IRibbonControl, Text)

  If Text <> "" Then
    If Text = "Документы" Then
        ' Запускаем макрос работы с "документами"
    Else
       ' Запрашиваем пароль
       ' Если верный запускаем макрос в зависимости от выбранного раздела
       ' Если неверный или пустой запускаем макрос работы с "документами"
    End If

  End If



И как бы всё работало, пока не потребовалось запаролить два раздела. я запаролил, но теперь возникает такая ситуация, что к примеру если выбрать раздел второй или третий запрашивается пароль, если в пароле шибка или пусто запускается раздел работы с документами, но в comboBox значением остаётся выбранный элемент. Как мне сделать так, что бы при неправильном введении пароля comboBox в ленте менял значение на <item id="Item1" label="Документы" /> ?
 
Друзья, нет идей?
 
Откуда ей взяться
 
Чтобы изменить выбранное значение в ComboBox на "Документы" при неправильном вводе пароля, вам нужно будет использовать метод, который обновляет значение ComboBox в Ribbon после проверки пароля. В VBA это можно сделать с помощью метода Invalidate для обновления интерфейса.Вот как можно модифицировать ваш код:Шаг 1: Изменение процедуры GetTextДобавьте логику для изменения значения ComboBox, если пароль неверный или пустой. Для этого вам нужно будет использовать метод IRibbonUI.Invalidate для перерисовки Ribbon.



'-----------Элемент comboBox
Public Sub GetText(ComboBox As IRibbonControl, Text As String)
   Dim ribbon As IRibbonUI
   Set ribbon = ComboBox.Ribbon

   If Text <> "" Then
       If Text = "Документы" Then
           ' Запускаем макрос работы с "документами"
       Else
           ' Запрашиваем пароль
           Dim password As String
           password = InputBox("Введите пароль для доступа к разделу:") ' Запрос пароля

           If password = "ваш_пароль" Then ' Замените "ваш_пароль" на реальный пароль
               ' Запускаем макрос в зависимости от выбранного раздела
               If Text = "Управление" Then
                   ' Код для работы с "Управлением"
               ElseIf Text = "Рассылка" Then
                   ' Код для работы с "Рассылкой"
               End If
           Else
               MsgBox "Неверный пароль. Возвращаемся к документам."
               ' Меняем значение ComboBox на "Документы"
               ribbon.InvalidateControl "MyCombobox"
           End If
       End If
   End If
End Sub

'-----------Обновление ComboBox при перерисовке
Public Sub OnLoad(ribbon As IRibbonUI)
   Set gRibbon = ribbon ' Сохраняем объект Ribbon для дальнейшего использования
End Sub

'-----------Код для обновления значения ComboBox
Public Sub UpdateComboBox()
   gRibbon.InvalidateControl "MyCombobox"
End Sub

'-----------Функция для получения текста из ComboBox
Public Function GetComboBoxItems(control As IRibbonControl) As String()
   Dim items(1 To 3) As String
   items(1) = "Документы"
   items(2) = "Управление"
   items(3) = "Рассылка"
   GetComboBoxItems = items
End Function



Шаг 2: Обновление интерфейса RibbonТеперь вам нужно добавить код, который будет обновлять значение ComboBox при вызове InvalidateControl. Для этого создайте функцию, которая будет возвращать текущее состояние ComboBox:

Public Function GetComboBoxItems(control As IRibbonControl) As String()
   Dim items(1 To 3) As String
   
   ' Здесь вы можете задать текущее состояние выбранного элемента.
   ' Например, если был введен неверный пароль, то устанавливаем "Документы".
   
   If неверный_пароль Then
       items(1) = "Документы"  ' Устанавливаем по умолчанию на Документы.
       items(2) = "Управление"
       items(3) = "Рассылка"
   Else
       items(1) = "Документы"
       items(2) = "Управление"
       items(3) = "Рассылка"
   End If
   
   GetComboBoxItems = items
End Function

Шаг 3: Обновление состояния при неверном паролеКогда вводится неверный пароль, вызывайте UpdateComboBox, чтобы обновить состояние ComboBox:

Else
   MsgBox "Неверный пароль. Возвращаемся к документам."
   UpdateComboBox  ' Обновляем состояние ComboBox.
End If

Теперь, когда пользователь вводит неверный пароль, значение ComboBox будет автоматически изменено на "Документы". Не забудьте заменить "ваш_пароль" на реальный пароль и настроить логику в зависимости от ваших требований.  
 
Обалдеть, спасибо большое, более чем подробный ответ
Страницы: 1
Наверх