![将触发代码分配给多个图像 - Excel VBA](https://linux22.com/image/1404401/%E5%B0%86%E8%A7%A6%E5%8F%91%E4%BB%A3%E7%A0%81%E5%88%86%E9%85%8D%E7%BB%99%E5%A4%9A%E4%B8%AA%E5%9B%BE%E5%83%8F%20-%20Excel%20VBA%20.png)
我想在单击我在 Excel 表中插入的图像之一时分配一些特定操作。问题是,我得到了 52 张图片(对于那些好奇的人来说是扑克牌)。所以,我的问题是,有没有办法避免为 52 种情况编写代码,并找到如下所示的方法:
Private Sub Image(x)_Click()
Call common_subroutine(x)
End Sub
,而不是为每个不同的图像名称编写 52 次相同的内容?由于我使用相同的子程序根据情况使用变量进行工作,如果没有办法做到这一点,工作量就不会那么大,但这种明显愚蠢的方法是否是唯一可行的方法确实让我很困扰。
答案1
我在编写用户表单时多次遇到过这个问题。不幸的是,我从未找到一种方法来绕过为每个对象单独创建触发器。但是,我确实想过使用 Python 打印出实际代码,然后将其粘贴到用户表单 VBA 中。这样就不需要更改繁琐的数字了。(我想你也可以在 VBA 中做到这一点,但祝你好运,只需一行即可完成。)
下面的 Python 循环适用于您发布的示例。
for i in range(52):
print "Private Sub Image%d_Click()\n\tCall common_subroutine(%d)\nEnd Sub\n" % (i + 1, i + 1)
只需从命令提示符运行并复制输出。
答案2
好的,我对您的 VBA 示例有点困惑,但执行此操作的最佳方法是多选所有图片,右键单击 - 分配宏。
这会将相同的宏分配给所有选定的图片。
答案3
是的。给每张图片相同的名称和不同的索引。现在,您可以将此对象作为整个集合引用,并根据给定的索引选择图片。