gpt4 book ai didi

vba - 动态调用从形状 OnAction 属性传递参数的宏

转载 作者:行者123 更新时间:2023-12-02 07:21:34 26 4
gpt4 key购买 nike

嗯,我的问题是我创建了一个 VBA Sub,它接收一个 excel 单元格引用和 2 个文本值以及一个 Variant 作为参数。

Sub CreateButton(oCell, sLabel, sOnClickMacro, oParameters)

该子程序成功在 oCell 上创建了一个按钮,但我必须向宏发送一个参数,实现这一目标的最佳方法是什么?

如果挖了一些不起作用的方法,还有一些肮脏的方法,并不能让我感到舒服

<小时/>

在我设法解决问题的帮助下,我在这里提出了一个更简单的工作解决方案

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

最佳答案

您可以将一个字符串分配给 OnAction,其中包含要调用的 sub 及其参数(注意整个字符串用单引号引起来)

喜欢:

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

关于vba - 动态调用从形状 OnAction 属性传递参数的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18283786/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com