2016-08-23 3 views
0

Я написал код VBA-Excel, который отменяется нажатием кнопки управления ActiveX, установленной на листе.Вызов кнопки управления ActiveX из макроса

Я не хочу всегда нажимать на него, чтобы он работал, и вы хотите управлять его вызовом на основе еще одного макроса (отдельно).

Возможно ли, и если да, поделитесь информацией о нем.

Это как моя таблица выглядит, и я хочу, чтобы вызвать эту кнопку из отдельного макроса:

This is how my worksheet looks like and i want to invoke that button from a separate macro

+0

Почему вы не можете просто вызвать событие click напрямую? – Comintern

+0

Я хочу автоматизировать процесс –

ответ

0

Для того, чтобы запустить макрос, прикрепленный к контролю 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.

Смежные вопросы