Проблема с получением данных из ячеек основной надписи

Автор Тема: Проблема с получением данных из ячеек основной надписи  (Прочитано 749 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Станислав#Автор темы

  • ADN OPEN
  • Сообщений: 2
  • Карма: 0
Приветствую всех участников этого форума!
В 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, правда давно не программировал... Заранее благодарю за помощь!

Оффлайн Станислав#Автор темы

  • ADN OPEN
  • Сообщений: 2
  • Карма: 0
Не оставляю надежду разобраться в проблеме, которую описал в этой теме, а также на помощь форумчан... Попытался через окно Watches исследовать объект oDrawingDoc, нашёл листы чертежей, провалился в каждый из них в поисках свойств с данными. Найти свойства из основной надписи для каждого из листов, отличных от первого, так и не удалось, везде натыкался на свойства с данными только первого листа... Нахожусь в полном недоумении! Не могу понять, почему не находятся данные с других листов, где-то они должны же быть...