有没有办法为表单控件定义事件过程,例如ActiveX对象的情况?
我有一个 GUI,当前由用户添加/删除 ActiveX 命令按钮,但在尝试将项目添加到添加了每个按钮的全局集合时遇到 Error 91。我最好的猜测是因为这种令人讨厌的现象。根据项目的当前状态,如果我能够定义其事件过程,我最好的选择是切换到使用表单控制按钮。如果没有,我可能需要以某种方式保存全局变量并在操作 ActiveX 控件对象后读回它们。
如果您只想添加按钮并捕获点击,您可以为它们分配一个通用宏,并根据按钮的名称(您在创建按钮时设置,并且可以通过
Application.Caller
在被调用的过程中)
Sub AddButtons()
With ActiveSheet.Buttons.Add(100, 100, 50, 50)
.Name = "button1"
.OnAction = "ClickHandler"
End With
With ActiveSheet.Buttons.Add(200, 100, 50, 50)
.Name = "button2"
.OnAction = "ClickHandler"
End With
End Sub
Sub ClickHandler()
Dim bName As String
bName = Application.Caller
Select Case bName
Case "button1": MsgBox "Clicked First button"
Case "button2": AnotherSub
End Select
End Sub
一个propriedade
onAction
,没有vba,recebe uma string com o nome da função que deve ser chamada。 Portanto,声音听起来很有趣,然后又很有趣,但它是 Application.Caller
的 chamando através。
Para descobrir o valor dos seus botões específicos, você podeexperimentar um pouco usando
debug.Print
, ou setar o nome (e aí aí ajusta o Select
conforme os nomesrespectivos).
Dim dadosArray() As String
' Os valores em dadosArray estão definidos em outra parte do código
Sub MenuSuspenso()
Dim i As Long, j As Integer
Dim menuItemIndex As Integer
menuItemIndex = 1
Application.CommandBars("Cell").Reset
For i = LBound(dadosArray, 1) To UBound(dadosArray, 1)
For j = LBound(dadosArray, 2) To UBound(dadosArray, 2)
With Application.CommandBars("Cell").Controls.Add(Type:=msoControlButton, Before:=menuItemIndex)
.Caption = dadosArray(i, j)
.OnAction = "MinhaFuncao"
End With
menuItemIndex = menuItemIndex + 1
indice = indice + 1
Next j
Next i
Else
MsgBox "Nenhum dado encontrado."
End If
Application.CommandBars("Cell").ShowPopup
End Sub
Sub MinhaFuncao()
debug.Print Application.Caller
Select Case Application.Caller
Case "button1": MsgBox "Clicked First button"
Case "button2": AnotherSub
End Select
End Sub