Страницы: 1
RSS
Как понять, какой элемент выбран из ComboBox на панели инструментов CommandBars., Извлечение данных из ComboBox
 
Всем здравия!

Надстройкой создается панель инструментов и на неё добавляются кнопки и раскрывающийся список, например, так:

Код
Sub Auto_open()
Панель_App
End Sub


Код
Public Sub Панель_App()

  Const MyBarName As String = "Approximation"
  Dim myBar As CommandBar, FindBar As Boolean
  FindBar = False
  
  'Проверка наличия панели среди всех панелей
  For Each myBar In Application.CommandBars
    If myBar.Name = MyBarName Then
        FindBar = True
        Exit For
    End If
  Next
   
  'Если панель не найдена, создать её и отобразить
  If Not FindBar Then
    Set myBar = Application.CommandBars.Add(Name:=MyBarName, Temporary:=False)
      'End If
      myBar.Visible = True
    
    
      'Создать на панели кнопки
    Set myControl = Application.CommandBars(myBar.Index).Controls.Add(Type:=msoControlButton, Before:=1)
    With myControl
        .Style = ButtonStyle
        .FaceId = 422
        .Caption = ""
        .TooltipText = ""
        .OnAction = "App1"
    End With

    
    Set myControl = Application.CommandBars(myBar.Index).Controls.Add(Type:=msoControlComboBox, Before:=2)
    With myControl
        .Caption = "Order"
       '.ControlTipText = ""
        .AddItem Text:="1 вариант", Index:=1
        .AddItem Text:="2 вариант", Index:=2
        .DropDownLines = 3
        .DropDownWidth = 65
        .ListHeaderCount = 0
        .OnAction = "App2"
        .ListIndex = 5
        '.Value = "1 вариант" ', Index:=1
  
    End With

 End If
End Sub


Но никак не могу нормально извлечь данные из раскрывающегося списка.

Цель: по нажатию кнопки вызывается процедура с параметром, извлеченным из раскрывающегося списка.
Точнее, по нажатию кнопки вызывается вспомогательная процедура (без параметра), которая, в свою очередь, должна получить данные из ComboBox.
И вот здесь затык.
Пытался по .OnAction вызывать вспомогательную процедуру и из неё получить данные ComboBox, но тоже не удалось.
С ComboBox на формах никаких проблем нет, а что делать с CommandBars, прошу подсказать.

В сети очень мало информации о ComboBox на CommandBars, если помножить это на мой малый опыт в VBA (немного программировал более 10 лет назад), получается туго.
Прошу помочь.
Изменено: Юрий М - 15.12.2021 13:23:44
 
Может так?
Код
Public Sub Панель_App()
 
  Const MyBarName As String = "Approximation"
  Dim myBar As CommandBar
  Dim myControl As Object, FindBar As Boolean
  FindBar = False
   
  'Проверка наличия панели среди всех панелей
  For Each myBar In Application.CommandBars
    If myBar.Name = MyBarName Then
        FindBar = True
        Exit For
    End If
  Next
    Stop
  'Если панель не найдена, создать её и отобразить
  If Not FindBar Then
    Set myBar = Application.CommandBars.Add(Name:=MyBarName, Temporary:=False)
      'End If
      myBar.Visible = True
     
     
      'Создать на панели кнопки
    Set myControl = Application.CommandBars(myBar.Index).Controls.Add(Type:=msoControlButton, Before:=1)
    With myControl
        .Style = 0 'ButtonStyle
        .FaceId = 422
        .Caption = ""
        .TooltipText = ""
        .OnAction = "App1"
    End With
 
     
    Set myControl = Application.CommandBars(myBar.Index).Controls.Add(Type:=msoControlComboBox, Before:=2)
    With myControl
        .Caption = "Order"
       '.ControlTipText = ""
        .AddItem Text:="1 вариант", Index:=1
        .AddItem Text:="2 вариант", Index:=2
        .DropDownLines = 3
        .DropDownWidth = 65
        .ListHeaderCount = 0
        .OnAction = "App2"
        .ListIndex = 1
        '.Value = "1 вариант" ', Index:=1
   
    End With
 
 End If
End Sub

Sub App2()
    MsgBox Application.CommandBars("Approximation").Controls(2).ListIndex
End Sub
 
Да, благодарю!
.ListIndex работает!
Я его пробовал ранее, не пошло, оказалось проблема в синтаксической ошибке..
 
Вариант названия темы
Как понять, какой элемент выбран из ComboBox на панели инструментов CommandBars.
 
Цитата
МатросНаЗебре написал: Как понять, какой элемент выбран из ComboBox на панели инструментов CommandBars.
Код
Type:=msoControlComboBox

Я сделал две вспомогательные процедуры, одна считывает значение ComboBox в глобальную переменную, вторая запускается кнопкой и использует эту переменную в качестве параметра:
Код
Dim OrderBox As Integer

Private Sub ApproxRead()
   OrderBox = Application.CommandBars("Approximation").Controls(2).ListIndex
End Sub

Private Sub ApproxOrder()
    Call Polynomial(OrderBox + 2)
End Sub
 
При изменении комбобокса срабатывает макрос, который берет текст из комбобокса, и запоминает его
txt$ = Application.CommandBars.ActionControl.Text
вы сделали, по сути, то же самое
Страницы: 1
Наверх