Для того, чтобы запустить макрос, прикрепленный к контролю ActiveX можно напрямую позвонить подлодке с следующая команда:
CallByName Worksheets("Sheet1"), "CommandButton21_Click", VbMethod
Обратите внимание, что (по умолчанию) Excel создаст Private Sub
на листе для кнопки. Если вы хотите называть эти подсистемы модулем, вам нужно будет удалить Private
. Также отметьте, что имя суб-должно быть be NameOfTheButton_Click
.
Таким образом, если приведенный выше код находится в суб в модуле, и вы хотите, чтобы заставить его работать, то код на листе может быть (например):
Sub CommandButton21_Click()
MsgBox "gotcha"
End Sub
Если вы хотите, чтобы вызвать все макросы для всех кнопок на Sheet1
то следующий код будет делать:
Option Explicit
Public Sub tmpSO()
Dim Obj As OLEObject
For Each Obj In Worksheets("Sheet1").OLEObjects
If TypeName(Obj.Object) = "CommandButton" Then
CallByName Worksheets("Sheet1"), Obj.Name & "_Click", VbMethod
End If
Next Obj
End Sub
Еще раз убедитесь, что ни один из подлодки на Sheet1
не Private
. В противном случае эти субтитры не могут быть вызваны из модуля, а просто из подкаталога, который также находится на Sheet1
.
Почему вы не можете просто вызвать событие click напрямую? – Comintern
Я хочу автоматизировать процесс –