在运行子服务器之前,从子服务器调用按钮单击事件而不知道按钮的名称

Trs*_*Trs 1 excel events vba click

在一个Sub,我想触发一个Click事件.例如,对于给定的Button,ButtonCommand1我可以通过运行代码来完成此操作:

    Sub test()

         Call Sheet1.ButtonCommand1_Click

    End sub
Run Code Online (Sandbox Code Playgroud)

,在那里ButtonCommand1_ClickPublic Sub写的Sheet1.

但是,我的问题是我在运行sub本身之前不知道要点击的Button的名称.所以我需要这样的东西:

    Sub test()

         Dim i As Integer
         Dim button As String

         i = 'SOMETHING
         button = "ButtonCommand" & i 

         Call Sheet1.button_Click

    End sub
Run Code Online (Sandbox Code Playgroud)

,在那里,同样,Sub Sheet1.button_Click就已经被包含在Sheet1一个Public Sub所有可能i的.

我尝试了几个选项,即将按钮设置为Object并使用该Shapes集合进行播放以便: Set button = shapes.range(Array("ButtonCommand" & i)) AND i还尝试通过执行shapes.range(Array("ButtonCommand" & i)).select然后运行来选择正确的形状Application.Click.但没有任何作用.谢谢您的帮助!

Mat*_*don 5

您不会调用事件处理程序.处理程序处理事件,它们由VBA运行时调用以响应某些特定事件.

"手动"调用事件处理程序是任何语言的反模式,VBA也不例外.Private默认情况下,事件处理程序是有原因的.

很难准确地说出你在使用示例代码做了什么,但是说你有这个:

Private Sub Button1_Click()
    DoStuff
End Sub
Run Code Online (Sandbox Code Playgroud)

然后在其他地方,你想调用那个点击处理程序 - 不要!DoStuff改为调用!


cyb*_*shu 5

使用CallByName


Sub test()

    Dim strName As String
    Dim i       As Long

    i = 1

    strName = "Button" & i & "_Click"
    CallByName Sheet1, strName, VbMethod


End Sub
Run Code Online (Sandbox Code Playgroud)