Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Пользовательское меню VBA IDE, Не запускается выполнение пунктов созданного меню в VBA IDE
 
Создал пункты меню в VBA. Именно в панели VBA а не панели Excel'я. Создавал вот так:
Код
  Public Sub Ro_AddMenuVBE()
  Dim mnuName As String, u As String
  Dim N As Integer, i As Integer, c As Integer
      u = "&Moё"
      N = Application.VBE.CommandBars.Count
      For i = 1 To N
          With Application.VBE.CommandBars.Item(i)
              If .Type = msoBarTypeMenuBar Then
                  For c = 1 To .Controls.Count
                      If .Controls.Item(c).Caption = u Then
                          .Controls(u).Delete
                          Exit For                          
                      End If
                  Next

                  With .Controls.add(Type:=msoControlPopup)
                      .Caption = u
                      With .Controls.add(Type:=msoControlButton, ID:=107)
  ' изменил на "латинское" название    .OnAction = "a_Bосстановить_Обработку_Событий"
                          .OnAction = "RestoreAlertsEvents"
                          .Caption = "Bосстановить события 2"
                          .TooltipText = "Bосстановить обработку событий"
                      End With
                      With .Controls.add(Type:=msoControlButton, ID:=107)
                          .OnAction = "a_Bыровнить_Код_Активного_Модуля"
                          .Caption = "Bыровнить код"
                          .TooltipText = "Bыровнить код активного модуля"
                      End With
                      With .Controls.add(Type:=msoControlPopup)
                          .Caption = "Работа с проектом"
                          With .Controls.add(Type:=msoControlButton, ID:=107)
                              .OnAction = "a_Cохранить_все_Модули_в_Архив"
                              .Caption = "Cохранение"
                              .TooltipText = "Cохранить все модули в архив"
                          End With
' и т.д., и т.п.
                      End With
                      
                      With .Controls.add(Type:=msoControlButton, ID:=107)
                          .OnAction = "a_Справка_по_Подключаемой_Библиотеке"
                          .Caption = "Справка"
                          .TooltipText = "Справка по Подключаемой Библиотеке"
                      End With                      
                  End With                 
                  Exit For                  
              End If
          End With
      Next
  End Sub
В результате получается красивая картинка , но пункты .OnAction - не работают.
Подпрограммы просто не вызываются и ничего не происходит.

На этой картинке показан момент остановки отладчика и видно, что обработчик присваивается (слева внизу выделено синим).  
А почему потом не обрабатывает? не сохраняет, что ли?
При повторном входе в этот (или иной) модуль для Item 12 (со второй картинки) будет уже OnAction=""  - почему?
Изменено: leonrom - 15.11.2017 13:49:32 (не могу вставить рисунок)
VBA. Аргументы в скобках при вызове Sub, Различная интерпретация ByRef-аргументов
 
М.б. будет кому полезным мой опыт.   Если при передаче аргумента указанного в вызываемой функции как ByRef оный аргумент заключить в скобки, то он передастся как ByVal и внесенные (вызываемой функцией первый символ меняется на '!') в него изменения будут утеряны.
Вот пример (VBA, Excel 2010), где в комментариях показан получаемый результат:
Код
Private Sub mByRef(ByRef s As String) 
   Mid(s, 1, 1) = "!" 
End Sub 

Private Sub tByValByRef() 
Const s0 = "abc" 
Dim sx As String 
   sx = s0 
   mByRef sx 
   Debug.Print " sx    " & sx     '  sx    !bc 
   sx = s0 
   mByRef (sx) 
   Debug.Print "(sx)   " & sx    ' (sx)   abc  (значение sx не изменилось!) 
   sx = s0 
   Call mByRef(sx) 
   Debug.Print "Call   " & sx   ' Call   !bc 
End Sub
Изменено: leonrom - 07.10.2017 21:51:32
Страницы: 1
Наверх