Итак, у меня есть Google, и кажется, что при создании пользовательских всплывающих меню, если кто-то хочет передать параметры, тогда это возможно , но для меня есть 2 основные проблемы:
1) Функция, которую вы вызываете, будет выполняться, но вы не сможете активировать точку останова на ней или даже использовать Stop.
2) Как ни странно, она вызывается дважды, что не очень полезноили.
Код для иллюстрации (пожалуйста, вставьте модуль, а не лист)
Option Explicit
Sub AssignIt()
Dim cbrCmdBar As CommandBar
Dim strCBarName As String
On Error Resume Next
strCBarName = "MyNewPopupMenu"
'Delete it first so multiple runs can occur without appending
Application.CommandBars(strCBarName).Delete
' Create a menu bar.
Set cbrCmdBar = Application.CommandBars.Add(Name:=strCBarName, Position:=msoBarMenuBar)
' Create a pop-up menu.
strCBarName = "MyNewPopupMenu"
Set cbrCmdBar = Application.CommandBars.Add(Name:=strCBarName, Position:=msoBarPopup)
'DEFINE COMMAND BAR CONTROL
With Application.CommandBars(strCBarName).Controls.Add(Type:=msoControlButton)
.Caption = "MyMenu"
.OnAction = BuildProcArgString("MyProc", "A", "B", "C") 'You can add any number of arguments here!
End With
'DEFINE COMMAND BAR CONTROL
With Application.CommandBars(strCBarName).Controls.Add(Type:=msoControlButton)
.Caption = "Test No Args"
.OnAction = "CallWithNoArgs"
End With
Application.CommandBars(strCBarName).ShowPopup
End Sub
Sub CallWithNoArgs()
MsgBox "No Args"
End Sub
'FUNCTION TO BUILD PROCEDURE ARGUMENTS (You just have to plop this in any of your modules)
Function BuildProcArgString(ByVal ProcName As String, ParamArray Args() As Variant)
Dim TempArg
Dim Temp
For Each TempArg In Args
Temp = Temp + Chr(34) + TempArg + Chr(34) + ","
Next
BuildProcArgString = ProcName + "(" + Left(Temp, Len(Temp) - 1) + ")"
End Function
'AND FINALLY - THE EXECUTABLE PROCEDURE!
Sub MyProc(x, y, z)
MsgBox x & y & z
Debug.Print "arrgggh why won't the breakpoint work, and why call twice!!!!!!"
End Sub
Если бы кто-то мог помочь с этим, это было бы здорово.Кажется, еще один разработчик в прошлом ударил стену, и поэтому для 5 элементов у нас есть Method_1 ... Method_5 с числом, переданным в стиль Method_Core (ByVal i As Integer).Я думаю, что я тоже пойду по этому маршруту, хотя он очень уродливый, он работает лучше, чем то, что я описал ниже.
PS.Это быстрый макет, поэтому я не раскрываю проприетарный код и т. Д.