Страница 1 из 1

Кто-нибудь взаимодействовал с публикациями через макросы?

СообщениеДобавлено: 13 окт 2008 11:53
MisterX
Есть необходимость переименовать не опубликованный элемент а саму публикацию элемента с помощью макроса, покопавшись в документации такого способа не нашел...

Не приходилось ли кому-нибудь делать подобные вещи?

В доках публикацию можно добавить или удалить, что и соответствует кнопкам в окне создания публикации, переименование же происходит с помощью мышки - два медленных клика на ее названии в окне создания публикации... А нет ли такой функции в VBA?

Заранее всем, кто может помочь, благодарен.

Re: Кто-нибудь взаимодействовал с публикациями через макросы?

СообщениеДобавлено: 14 окт 2008 15:48
booSter
MisterX писал(а):А нет ли такой функции в VBA?


Можно попробовать так:
Код: Выделить всё
...
Dim myPub as Publication
Set myPub = ...
myPub.Name = "myNewPubName"
...


Если не "заведётся", то тогда "в обход":

  1. Создать новую публикацию с требуемым именем
    Код: Выделить всё
    ...
    Dim myProd as Product
    Set myProd = ...
    ...
    Dim myNewPub as Publication
    myProd.Publications.Add("myNewPubName")
    ...
  2. Затем инициализировать её имеющейся
    Код: Выделить всё
    ...
    Dim myOldPub as Publication
    Set myOldPub = ...
    ...
    myNewPub.Relay(myOldPub)
    ...
  3. И если нужно удалить старую
    Код: Выделить всё
    ...
    myProd.Publications.Remove(myOldPub.Name)
    Set myOldPub=Nothing
    ...

Re: Кто-нибудь взаимодействовал с публикациями через макросы?

СообщениеДобавлено: 24 ноя 2008 15:07
MisterX
В первом способе есть загвоздка с

Код: Выделить всё
Dim myPub as Publication
Set myPub = ...


в set myPub = дальше вроде должно идти MyPart.Publications.add(xxx),

где MyPart определена как

Код: Выделить всё
Dim MyPart as PartDocument
set MyPart = CATIA.ActiveDocument    'Работаем с Part'ом


Так вот MyPart.Publications не работает, так как "...does not support this property or method". Вроде как все библиотеки подключены... Или для Part'а нельзя создать публикацию макросом?

Re: Кто-нибудь взаимодействовал с публикациями через макросы?

СообщениеДобавлено: 24 ноя 2008 18:54
booSter
MisterX писал(а):Так вот MyPart.Publications не работает...


Да, есть такое дело, но вся "фишка" в том, что Part-документ - сущность, так сказать, "двуличная"... :kav:
С одной стороны - это Part, а с другой - Product правда урезанный (без возможности содержать другие Product'ы).
Если внимательно глянуть на документацию по PartDocument, то из него можно достать помимо Part'а и тот самый "недо"-Product, из которого, собственно, желаемые Publications и достаются.

Код: Выделить всё
...
Dim myPartDoc As PartDocument
Set myPartDoc = CATIA.ActiveDocument
...
Dim myProdOfPart As Product
Set myProdOfPart = myPartDoc.Product
...
Dim myPubs As Publications
Set myPubs = myProdOfPart.Publications
...
Dim thePub As Publication
Set thePub = myPubs("myPubName")
...

Re: Кто-нибудь взаимодействовал с публикациями через макросы?

СообщениеДобавлено: 25 ноя 2008 13:20
MisterX
Booster'у уже спасибо большое, но вот только не работает код пробовал уже 2 способами, код одного из способов приведен ниже.

Макрос должен опубликовать выделенные в КАТЕ элементы, но когда дело доходит до публикации - "Method Failed"

Никто не укажет на ошибку? Когда все заработеат, обещаю выложить код здесь.

Код: Выделить всё
Sub CATMain()

 Dim Doc1 As PartDocument
 Set Doc1 = CATIA.ActiveDocument

 Dim Sel1 As Selection
 Set Sel1 = Doc1.Selection

 Dim ProdOfDoc1 As Product
 Set ProdOfDoc1 = Doc1.Product

 Dim Pubs As Publications
 Set Pubs = ProdOfDoc1.Publications

 Dim nmb As Integer
 nmb = Sel1.Count2

 ReDim Elems(nmb) As Variant
 ReDim MyPub(nmb) As Publication
 Dim i As Integer
 Dim PubName As String

 For i = 1 To nmb
    Set Elems(i) = Sel1.Item2(i).Value
    PubName = Elems(i).Name
    MyPub(i) = Pubs.Add(PubName)
 Next

End Sub

Re: Кто-нибудь взаимодействовал с публикациями через макросы?

СообщениеДобавлено: 25 ноя 2008 14:41
booSter
2 MisterX

В начале строчки "MyPub(i) = Pubs.Add(PubName)" отсутствует Set :kav:

Попробуй так:
Код: Выделить всё

...

Dim Pubs As Publications
Set Pubs = ProdOfDoc1.Publications

Dim nmb As Integer
nmb = Sel1.Count2

ReDim Elems(nmb) As Reference
ReDim MyPub(nmb) As Publication
Dim i As Integer
Dim PubName As String

For i = 1 To nmb
    Set Elems(i) = Sel1.Item2(i).Reference
    PubName = "myPub_" & Elems(i).DisplayName
    Set MyPub(i) = Pubs.Add(PubName)
    Pubs.SetDirect(PubName,Elems(i))
Next

...


Либо то-же самое но без строчки "Set MyPub(i) = Pubs.Add(PubName)"

Re: Кто-нибудь взаимодействовал с публикациями через макросы?

СообщениеДобавлено: 25 ноя 2008 16:54
MisterX
Про SET уже сам допер :dash1:

Непонятка случилась, потому что в дереве публикации не отобразились сразу...

Сам разобрался и написал такую же конструкцию

Код: Выделить всё
...
ReDim PubName (nmb) as String
...
Pubs.SetDirect(PubName(i),Elems(i))


Но в последней строке сообщение выдается "= expected", а если вызывать серез Call, то код прогоняется, но ссылки не создаются...

Re: Кто-нибудь взаимодействовал с публикациями через макросы?

СообщениеДобавлено: 26 ноя 2008 07:56
Artem

Re: Кто-нибудь взаимодействовал с публикациями через макросы?

СообщениеДобавлено: 26 ноя 2008 12:29
booSter
2 Artem
:good: