Вызов макроса VBA в Exel Workbook из Visual Studio - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть книга Excel, в которой при нажатии кнопки запускается некоторый код VBA. Функция, которую я хочу вызвать, показана ниже. Я хочу вызвать функцию из Visual Studio, используя VB. Есть ли способ сделать экземпляр рабочей книги и вызвать функцию? (Надстройки Excel необходимы для функции, поэтому мне нужна рабочая тетрадь.) Заранее спасибо, ребята.

Private Sub CommandButton2_Offline_Click()

1 Ответ

0 голосов
/ 12 сентября 2018

Желание вызвать обработчик события Click означает одно: вы смотрите на макрос, который реализован в самом обработчике события.

Убери это. Обработчики вызываются их источником события; вызывать их «вручную» - ужасная практика; ты не хочешь этого делать. Не говоря уже о том, что обработчики могут существовать только в модуле класса, а это значит, что вам необходимо получить экземпляр объекта этого класса, чтобы иметь возможность найти его открытые члены - его private членам будет еще сложнее добраться. Если вам повезло, этот класс является модулем рабочего листа, поэтому вы бесплатно получаете его экземпляр рабочей области.

В любом случае, последнее, что вы хотите сделать, это «просто сделать обработчик Public» и вызвать его напрямую. Refactor вместо:

Private Sub CommandButton2_Offline_Click()
    GoOffline
End Sub

В идеале вы бы поместили метод в стандартный модуль:

Public Sub GoOffline()
    '...
    ' all the code that's currently in CommandButton2_Offline_Click
    '...
End Sub

Таким образом, все, что вам нужно сделать, это вызвать Application.Run с "ModuleName.GoOffline" в качестве аргумента из вашего кода .NET.

Что касается создания экземпляра рабочей книги , для этого есть фабричный метод: Workbooks.Open - в вашем .NET-коде должен быть экземпляр Excel.Application для работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...