Rog*_*eto 5 excel vba excel-vba excel-2013
好吧,我的问题是我创建了一个VBA Sub,它接收一个excel Cell引用和2个文本值以及一个Variant作为参数.
Sub CreateButton(oCell, sLabel, sOnClickMacro, oParameters)
Run Code Online (Sandbox Code Playgroud)
这个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
Run Code Online (Sandbox Code Playgroud)
Cor*_*mey 10
您可以为OnAction分配一个字符串,该字符串包含要调用的子句及其参数(请注意整个字符串用单引号括起来)
喜欢:
Shape.OnAction = "'SubToCallOnAction ""Hello World!""'"
Sub SubToCallOnAction(text As String)
MsgBox text
End Sub
Run Code Online (Sandbox Code Playgroud)
数字参数不需要引号(虽然它们将通过数字传递 - >默认字符串转换 - >默认数字转换)
所以,我想,你想要做的是传递被点击的按钮的名称:
Shape.OnAction = "'SubToCallOnAction """ & Shape.Name & """'"
Run Code Online (Sandbox Code Playgroud)
更高级和灵活的使用可能是这样的:
'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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18167 次 |
| 最近记录: |