Excel Vba单击带有application.caller的单选按钮
我有一个宏,如果单击单选按钮,它将运行函数(清除每个命名范围,具体取决于application.caller.name)Excel Vba单击带有application.caller的单选按钮,vba,excel,Vba,Excel,我有一个宏,如果单击单选按钮,它将运行函数(清除每个命名范围,具体取决于application.caller.name) Sub Clear_Click() Dim s, f, arr s = ActiveSheet.Shapes(Application.Caller).Name arr = Array("NamedArray1", "NamedArray2", "NamedArray3", "NamedArray4") Select Case s Case "Clear7"
Sub Clear_Click()
Dim s, f, arr
s = ActiveSheet.Shapes(Application.Caller).Name
arr = Array("NamedArray1", "NamedArray2", "NamedArray3", "NamedArray4")
Select Case s
Case "Clear7"
For i = LBound(arr) To UBound(arr)
ThisWorkbook.Worksheets("info").Range(arr(i)).value = ""
Next i
Case Else
f = arr(Right(s, 1) - 1)
ThisWorkbook.Worksheets("info").Range(f).value = ""
End Select
End Sub
它工作正常
现在我需要从其他功能中单击Clear7单选按钮
所以如果我这样做了
Sub test()
Application.Run ActiveSheet.Shapes("Clear7").OnAction
End Sub
我在s=ActiveSheet.Shapes(Application.Caller).Name上出错,因为没有Application.Caller
那么,如何从其他函数中单击单选按钮呢?如果您使用的是Application.Caller,但您希望在没有人需要单击按钮的情况下运行代码,那么下面介绍了如何执行此操作
注意:由于Clear\u Click有一个参数,因此在将其附加到按钮时,它不会显示在“分配宏”列表中,但您可以直接在框中键入其名称,这样就可以了
Sub Clear_Click(Optional callerName As String = "")
Dim s, f, arr, cn As String, i
Dim sht As Worksheet
cn = IIf(Len(callerName) > 0, callerName, Application.Caller)
'Debug.Print cn
Set sht = ThisWorkbook.Worksheets("info")
arr = Array("NamedArray1", "NamedArray2", "NamedArray3", "NamedArray4")
Select Case cn
Case "Clear7"
For i = LBound(arr) To UBound(arr)
sht.Range(arr(i)).Value = ""
Next i
Case Else
f = arr(Right(s, 1) - 1)
sht.Range(f).Value = ""
End Select
End Sub
Sub test()
ClickIt "Clear7"
End Sub
'run a macro attached to a shape and pass its name as a parameter
Sub ClickIt(sName As String)
Application.Run ActiveSheet.Shapes(sName).OnAction, sName
End Sub
老实说,我不明白当您计划访问带有对象引用的函数/子函数时,为什么要使用ActiveSheet
。将工作表设置为引用对象并将单选按钮对象引用作为参数发送,对您来说有这么难吗?