Страницы: 1
RSS
Ввод значения через меню
 
Всем привет,  
 
Вопрос: Как организовать ввод значений глобальной переменной через выпадающее меню? Ну к примеру как оформлен "Формат ячеек". Если возможно, посредством вызова UserForm,то вопрос Как привязать эту форму к позиции выпадающего меню на экране?  
 
Заранее благодарен,  
 
Владимир.
 
по событию листа WorksheetChange заносите в глобальную переменную значение этой "выпадающей" ячейки.  
 
одна строка кода:  
 
Private Sub Worksheet_Change(ByVal Target As Range)  
   MyGlobalVar = [a15]
End Sub
 
В этот момент курсор над диаграммой (Shape) и задача не скопировать значение а ввести ручками. Сделал посредством вызова Inputbox, но он не позицируется на меню, да и выглядит коряво...
 
Отвечаю на свой вопрос:  
 
Меню имеет 5 типов controls:    
- msoControlButton - кнопка,  
- msoControlEdit - текстовое поле,    
- msoControlDropdown - выпадающий список (не использовал могу ошибаться),    
- msoControlComboBox - комбинированный список (с возможностью ввода данных),  
- msoControlPopup - подменю  
 
Для ввода данных посредством меню использовал msoControlEdit со следующим алгоритмом:  
 
Sub CreatePopUp() ' --------------- Создание контекстного меню  
Dim cb As CommandBar, m As CommandBarPopup  
   DeletePopUp  
   Set cb = CommandBars.Add(PopUpCommandBarName, msoBarPopup, False, True)  
   With cb  
       With .Controls.Add(Type:=msoControlButton)  
           .OnAction = ThisWorkbook.Name & "!DisplayEditPopUpY"  
           .FaceId = 1146  
           .Caption = "Поиск X по значению Y= ..."  
           .TooltipText = "Поиск X по значению Y= ..."  
       End With  
         
   End With  
   Set cb = Nothing  
End Sub  
Sub CreatePopEdit(MenuXY As String, PreVal As Double)  
   Dim cb As CommandBar, m As CommandBarPopup  
   DeletePopEdit  
   Set cb = CommandBars.Add(PopUpEditBarName, msoBarPopup, False, True)  
   With cb  
       With .Controls.Add(Type:=msoControlEdit)  
              .Caption = MenuXY  
              .TooltipText = MenuXY  
              .Text = PreVal  
       End With  
   End With  
   Set cb = Nothing  
End Sub  
 
Sub DeletePopEdit() ' --------------- Удаление контекстного меню  
   On Error Resume Next  
      CommandBars(PopUpEditBarName).Delete  
   On Error GoTo 0  
End Sub  
 
Sub DisplayCustomPopUp() ' displays the custom popup menu  
   On Error Resume Next  
      Application.CommandBars(PopUpCommandBarName).ShowPopup  
   On Error GoTo 0  
End Sub  
 
Sub DisplayEditPopUpY() ' displays the custom popup menu  
   On Error Resume Next  
      PredY = ThisWorkbook.Sheets(1).Range("E3").Value  
         Call CreatePopEdit("Ведите значение Y=", PredY)  
         Application.CommandBars(PopUpEditBarName).ShowPopup  
      PredY = Application.CommandBars(PopUpEditBarName).Controls.Item(1).Text  
   On Error GoTo 0  
End Sub  
 
Переменная PredY - глобальная.  
Полагаю, можно через субменю, но не соображу как возвращать введенное значение.
Страницы: 1
Наверх