好吧,我的问题是我创建了一个VBA Sub,它接收一个excel Cell引用和两个文本值以及一个Variant作为参数。
Sub CreateButton(oCell, sLabel, sOnClickMacro, oParameters)
这个Sub成功地在oCell上创建了一个按钮但是我必须向Macro发送一个参数,实现它的最佳方法是什么?
如果已经挖掘了一些不起作用的方法,还有其他脏的方法,这些都不会让我填饱肚子
在我帮助解决问题的帮助下,我在这里提出了一个更简单的工作解决方案
Sub Button_Click(sText)
MsgBox "Message: " & sText
End Sub
Sub Test_Initiallize()
Dim oCell
Dim oSheet
Dim oShape
Set oCell = Range("A1")
Set oSheet = ThisWorkbook.Sheets(1)
For Each oShape In oSheet.Shapes
oShape.Delete
Next
Set oShape = oSheet.Shapes.AddShape(msoShapeRectangle, oCell.Left, oCell.Top, oCell.Width, oCell.Height)
oShape.TextFrame.Characters.Text = "Click Me"
oShape.OnAction = "'Button_Click ""Hello World""'"
End Sub
答案 0 :(得分:8)
您可以为OnAction分配一个字符串,该字符串包含要调用的子句及其参数(请注意整个字符串用单引号括起来)
像:
Shape.OnAction = "'SubToCallOnAction ""Hello World!""'"
Sub SubToCallOnAction(text As String)
MsgBox text
End Sub
数字参数不需要引号(虽然它们将通过数字传递 - >默认字符串转换 - >默认数字转换)
所以,我想,你想要做的是传递点击按钮的名称:
Shape.OnAction = "'SubToCallOnAction """ & Shape.Name & """'"
更高级和灵活的用法可能类似于:
'Set the button up like:
databaseTable = "tbl_ValidAreas"
databaseField = "Country"
Shape.OnAction = _
"'SubToCallOnAction """ & _
Shape.Name & """ """ & _
databaseTable & """ """ &
databaseField & """'"
...
Sub SubToCallOnAction(buttonID As String, ParamArray args)
Select Case buttonID
Case "button1"
'get the relevant data or whatever using the ParamArray args
Call GetData(args(0),args(1))
...
End Select
End Sub
答案 1 :(得分:1)
- 对于在2016年以上找到此页面的人 -
Cor_Blimey的解决方案在Excel 2003中不起作用。 您必须在参数之间添加逗号而不是空格,如下所示:
Shape.OnAction = _
"'SubToCallOnAction """ & _
Shape.Name & """,""" & _
databaseTable & """,""" &
databaseField & """'