引用macros被分配给的对象

正如标题所述:在Excel 2010中,如何引用已分配macros的对象? 我创build了一个带有表单checkbox的电子表格,并为其分配了这个macros:

Sub Toggle() If ActiveSheet.Shapes("Checkbox1").OLEFormat.Object.Value = 1 Then ActiveSheet.Shapes("Picture1").Visible = True Else ActiveSheet.Shapes("Picture1").Visible = False End If End Sub 

该checkbox切换是否可见的图片,这工作正常,但我想重复使用多个checkbox的脚本。

上面的代码是专门针对Checkbox1,但我希望它的目标是“this”,我已经分配macros的对象。

我觉得这应该是非常简单的,但我整晚都在MSDN,excelforums.com上search,只是search一下。

谢谢你的帮助!

Application.Caller是你想要的

 Sub Toggle() Dim cb As String, shps As Shapes cb = Application.Caller Set shps = ActiveSheet.Shapes shps("Picture1").Visible = (shps(cb).OLEFormat.Object.Value = 1) End Sub 

据我所知,使用VBA是不可能的。 当然你可以把切换代码放到一个单独的子文件夹中并重新使用它。 这可能会有所帮助,但你仍然需要指定checkbox的名称。

 Private Sub CheckBox1_Click() Call Toggle("Checkbox1", "Picture1") End Sub Sub Toggle(ByVal Nm As String, ByVal pic As String) If ActiveSheet.Shapes(Nm).OLEFormat.Object.Value = 1 Then ActiveSheet.Shapes(pic).Visible = True Else ActiveSheet.Shapes(pic).Visible = False End If End Sub 

您需要将切换子代码放在与checkbox代码相同的工作表中,否则将切换子工具放在模块中。