Разработка библиотеки С#, которая вызывается из VBA

Привет, процесс, который я сейчас делаю, - это создание функции в VBA следующим образом:

Sub TPS_Test()

    Dim classLib As Object
    ' remember you must type the set... line in its entirity when incrimenting to new version.  Something about their compiling
    
    Set classLib = New RoadTrip_v14_1_9.TripDoc
    classLib.TPS_Test Excel.ActiveWorkbook, False
    
End Sub

И добавление библиотеки С# из VBA - инструменты - ссылка (сначала скомпилируйте библиотеку как библиотеку типов).

Так что это работает нормально, и я действительно могу подключить библиотеку к процессу Excel.exe и отладить таким образом.

Тем не менее, это жалоба PITA, потому что каждое изменение кода, которое я делаю, мне нужно перекомпилировать, повторно импортировать в VBA и запускать снова. Итак, мой процесс на самом деле:

  1. Увеличьте имя проекта (Myproject_V1).
  2. Компиляция
  3. Удалить ссылку на старую библиотеку в VBA
  4. Добавить ссылку на новую библиотеку.
  5. Измените имена классов в VBA (установите classLib = new Myproject_v1)
  6. Прикрепите библиотеку C# к процессу excel.
  7. Перезапустите модуль VBA.

Это довольно утомительно и требует много времени.

Есть ли способ лучше?


person Rob    schedule 11.02.2021    source источник
comment
Если вы продолжите таким образом, изменив имя библиотеки, боюсь, у вас не будет другого выбора. Но сохранить имя без изменений и отслеживать версии приложения по-другому, теоретически, нет необходимости в таком сложном процессе, если ссылочная библиотека может быть все время найдена по одному и тому же пути.   -  person FaneDuru    schedule 11.02.2021
comment
@FaneDuru, вам все равно придется пройти через этот процесс подключения только что скомпилированной библиотеки к проекту VBA, верно?   -  person Rob    schedule 11.02.2021
comment
Думаю, нет. Теоретически система не может знать содержимое библиотеки, на которую ссылаются, если она сохраняет то же имя и существует по тому же пути. Вы пробовали этот способ? Я бы попробовал сослаться на него из папки решения «Bin». Должен признаться, что я не делал ничего подобного, потому что мне не нужно было что-то подобное. Я говорю строго теоретически...   -  person FaneDuru    schedule 11.02.2021
comment
Вы можете перекомпилировать библиотеку без необходимости каждый раз повторно добавлять в VBA, если вы не меняете имя. Я все время это делаю. Судя по вашим комментариям, вы еще не открыли для себя преимущества модульного тестирования. Поиск MSTest для C#. Его довольно просто использовать. По сути, у вас должен быть набор тестов в отдельном классе C # во втором проекте вашего решения, которые используют различные методы, предоставляемые вашим классом, чтобы, когда вы переходите к VBA, вы знали, что класс работает так, как он должен.   -  person freeflow    schedule 11.02.2021


Ответы (1)


Спасибо откликнувшимся. Лучший способ сделать это — создать модульные тесты на C#, которые будут загружать файл excel, а затем запускать для него код C# в Visual Studio.

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

person Rob    schedule 18.02.2021