Я хочу сделать это: «Если есть модуль X, содержащий функцию Y, тогда позвоните, иначе нет."Есть ли эквивалент CallByName для глобальных функций?
Я знаю, что могу использовать метод CallByName(Object, MethodName, ...)
для вызова метода или свойства экземпляра объекта.
Можно ли вызвать глобальную функцию sub /, не связанную с объектом?
//Module1
Public Sub DoSomething
End Sub
//Module2
Public Sub TriggerDoSomething
On Error Resume Next
CallByName2 "Module1", "DoSomething", ...
End Sub
Я знаю, что было бы лучше, чтобы реорганизовать свой код, чтобы обернуть DoSomething
в класс, но в настоящее время это невозможно, так как это нарушило бы код моих коллег таким образом, что не может быть закреплен в несколько часов.
Хорошая идея. Не будет ли это требовать, чтобы класс был перенесен в проект DLL? Что вы могли бы сделать, и это не нарушит клиентский код модуля. Я не мог заставить его работать в EXE. (Пришлось перейти на ActiveX exe, чтобы даже установить класс в GlobalMultiUse.) – MarkJ
Исправьте, если класс находится в EXE. Я редко делаю это, предпочитая иметь как минимум EXE, связанный с DLL. Это просто более гибко. –
Возможно, вы правы. Может быть, вы должны отредактировать ответ, чтобы объяснить это? Возможно, DR еще не имеет кода в DLL. BTW Если у вас нет возражений, я собираюсь изменить свой ответ, чтобы включить вашу идею. Оставьте комментарий на него, если вы хотите, чтобы я взял его. У меня +1 на ваш ответ. – MarkJ