Приветствую всех участников этого форума!
В Inventor 2023 решил написать код на языке VBA для создания ведомости листов, т.к. вручную собирать такой лист достаточно долго и муторно - при большом количестве листов чертежей (до 150 листов) приходится скакать от листа с таблицей ведомости к очередному листу чертежа, считывать шифр и название детали, возвращаться обратно и вставлять это всё считанное в таблицу... Заранее через команду Правка для основной надписи внедрил в неё Свойства Инвентор с наименованиями деталей и шифром, которые меняются автоматически при размещении на новом листе очередной детали. Для считывания информации использовал следующий код, который частично сгенерила мне нейросеть, и который потом собираюсь модифицировать:
Public Sub Proc1()
Dim oApp As Inventor.Application
Set oApp = ThisApplication
Dim oDrawingDoc As DrawingDocument
Set oDrawingDoc = oApp.ActiveDocument
Dim oSheet1 As Sheet
Set oSheet1 = oDrawingDoc.Sheets.Item(1)
'Debug.Print "Лист: " & oSheet1.Name 'проверка
Dim oSheet2 As Sheet
Set oSheet2 = oDrawingDoc.Sheets.Item(2)
'Debug.Print "Лист: " & oSheet2.Name 'проверка
' Активируем второй лист
oSheet2.Activate
Set oSheet2 = oDrawingDoc.ActiveSheet
Set oDrawingDoc = oApp.ActiveDocument
Dim oPropertySets As PropertySets
Set oPropertySets = oDrawingDoc.PropertySets
Dim oDesignTrackingProps As Inventor.PropertySet
Dim oProperty As Inventor.Property
Dim sValue As String
Dim sPropertyName As String
Set oDesignTrackingProps = oPropertySets.Item("Design Tracking Properties")
sPropertyName = "Description" ' Свойство Инвентор с наименованием детали
' Пробуем получить свойство
On Error Resume Next ' Обработка ошибок, если свойство не найдено
Set oProperty = oDesignTrackingProps.Item(sPropertyName)
On Error GoTo 0 ' Отключаем обработку ошибок
' Проверяем, найдено ли свойство
If oProperty Is Nothing Then
MsgBox "Свойство '" & sPropertyName & "' не найдено в Design Tracking Properties."
Exit Sub
End If
' Получаем значение свойства
sValue = oProperty.Value
' Выводим значение
MsgBox "Значение свойства '" & sPropertyName & "': " & sValue
End Sub
В данном коде считывается пока только наименование детали. Суть в том, чтобы потом в цикле считывать необходимые мне данные с основной надписи каждого листа. НО! Я обнаружил, что при задании и активации листа с номером больше 1 (Set oSheet2 = oDrawingDoc.Sheets.Item(2)), программа всегда выдаёт наименование детали с самого первого созданного листа, даже если я перед выполнением кода меняю листы местами. Большая просьба помочь разобраться с этим "феноменом". В программировании в Инвенторе я новичок, но с языком VBA знаком по работе в Excel, правда давно не программировал... Заранее благодарю за помощь!