CATIAV5 собрать или разобрать проект catvba для контроля версий - PullRequest
0 голосов
/ 01 апреля 2020

CATIAV5 управляет проектами vba в указанных c файлах с расширением .catvba

Эти проекты структурированы и ведут себя как другие VBA: в них есть модули, формы и классы. Вы можете вручную импортировать экспорт этих компонентов VBA, как, например, в Excel. Но, похоже, в CATIA вы не можете автоматизировать эту операцию , в то время как в Excel это возможно с помощью модуля «Microsoft Visual Basi c For Applications Extensibility» (как вы можете видеть здесь https://www.rondebruin.nl/win/s9/win002.htm).

Я хотел бы добиться чего-то подобного в CATIAV5.

Другими словами, чтобы мой .catvbas находился под контролем версий, я хотел бы:

  • автоматизирует импорт / экспорт модулей / классов / форм и "собирает" и "разбирает" их в файле .catvba программным способом.

К настоящему моменту мне удалось добавить библиотеку расширяемости в пример проекта catvba и получить доступ к текущим компонентам проекта для импорта или экспорта.

'These references were added in the project:
'Microsoft APC  Object Library
'Microsoft Visual Basic for Applications Extensibility
Sub main()

    Dim oAPC As New Apc
    Dim oVBE As VBE

    Set oVBE = oAPC.VBE
    Dim p As Project

    Set p = oVBE.VBProjects.add(vbext_pt_HostProject)
    'the instruction above throws error 440

    Set p = oVBE.VBProjects.Open("C:\path\to\another\existing\project.catvba")
    'the instruction above throws error 440, too

    For Each comp In oAPC.VBE.ActiveVB.Project.VBComponent
    Debug.Print comp.Name
    '...export comp
    Next

НО ЕЩЕ Я не могу создать новый проект catvba или откройте существующий (ошибка 440, см. выше). Если бы я только смог открыть другой проект, я бы использовал его как пустой шаблон для «заполнения» ..

1 Ответ

0 голосов
/ 09 апреля 2020

После мучительных проб и ошибок я пришел к рабочему прототипу.

Чтобы создать новый пустой проект и заполнить его экспортированными модулями / формами / классами, создайте модуль с таким кодом:

'remember to add "Microsoft APC" into the references
Sub main()

    Dim apc_global As New ApcGlobal
    Dim apc_framework As New Apc

    Dim apc_project As project
    Dim vb_project As VBProject

    Dim rootStorage As Storage
    Dim innerStorage As Storage

    Set apc_project = apc_framework.Projects.add(axProjectNormal, "hello")
    Set vb_project = apc_project.VBProject

    Set rootStorage = apc_global.CreateStorage("C:\hello.catvba", axAccessReadWrite)
    'you should create an innerstorage called "apc". I got crazy to find this out
    Set innerStorage = rootStorage.CreateStorage("apc", axAccessReadWrite)

    'here you should add the project references
    'vb_project.References.addFromGUID.... 

    'then you can import your previously exported files
    vb_project.VBComponents.Import("path_of_your_module/class/form files")

    Call apc_project.SaveAs(innerStorage)

    apc_project.Close

End Sub

Таким образом, вы можете

  1. Создать проект APCP с двумя «хранилищами», root хранилищем и дочерним хранилищем под названием «ap c».
  2. Затем вы можете создать свой проект vb и импортировать ранее экспортированные компоненты в виде файлов .bas .cls .frm и т. Д. c ...

Это внутреннее хранилище, где вы должны сохранить ваш проект ap c

И вот вам совершенно новый проект catvba, построенный программно! Надеюсь, что это поможет

...