2013-07-29 4 views
0

У меня есть надстройка VBA, которая должна добавить функциональность нескольким листам. У меня есть класс для прослушивания событий рабочего листа и запуска макросов. Это работает, но я не могу назвать частные макросы с параметрами из него.Вызов частной подпрограммы VBA с параметром

Мой слушатель события в модуле класса и заключается в следующем:

Option Explicit 
Private WithEvents App As Application 

Private Sub Class_Initialize() 
    Set App = Application 
End Sub 

Private Sub App_SheetChange(ByVal Sh As Object, ByVal Source As Range) 
    On Error GoTo Finish 
    App.EnableEvents = False 
    Call Application.Run("Worksheet_Change", "Source") 
Finish: 
    App.EnableEvents = True 
End Sub 

Он инициализируется при открытии рабочей книги в модуле так:

Sub Auto_Open() 
    Set clsAppEvents = New clsApplicationEvents 
End Sub 

и макрос Я пытаюсь для звонка снова находится в отдельном модуле и принимает форму:

Private Sub Worksheet_Change(ByVal Target As Range) 
    'Do some work on range 
End Sub 

Я пробовал следующие способы c Alling макрос и никто не работал до сих пор:

Call Application.Run("Worksheet_Change", "Source") 
Application.Run "Worksheet_Change", "Source" 
Application.Run "Worksheet_Change" "Source" 
+2

Это помогло бы включить ошибку, которую вы получите, когда попробуете это. В любом случае наиболее очевидной проблемой является то, что вы передаете 'Source' как строку вместо объекта Range. Попробуйте удалить цитаты вокруг источника в вашем вызове «Выполнить». –

+0

У меня не было сообщения об ошибке, макрос просто не запускался, но удалял кавычки следующим образом: Application.Run «Worksheet_Change», Source - сделал трюк. Если вы хотите сделать ответ, я помечаю его как решившийся. благодаря – db579

ответ

1

Аргументы для запуска не все должны быть строками, так

Application.Run "Worksheet_Change", "Source" 

Должно быть

Application.Run "Worksheet_Change", Source 
Смежные вопросы