Перейти к публикации

Помогите разобраться в коде


Рекомендованные сообщения

Всем добрый день. Нашел на просторах инета код который по идее должен выводить перечень деталей борки.
Однако он не работает, и я непойму почему.
Вод код:
 

Option Explicit
Sub main()
Dim swApp                                 As SldWorks.SldWorks
Dim swModel                              As SldWorks.ModelDoc2
Dim swModDocExt                     As SldWorks.ModelDocExtension
Dim swSelMgr                            As SldWorks.SelectionMgr
Dim swFeat                                As SldWorks.Feature
Dim swComp                              As SldWorks.Component2
Dim vModelPathName               As Variant
Dim vComponentPathName      As Variant
Dim vFeature                             As Variant
Dim vDataType                          As Variant
Dim vStatus                               As Variant
Dim vRefEntity                          As Variant
Dim vFeatComp                       As Variant
Dim nConfigOpt                       As Long
Dim sConfigName                   As String
Dim nRefCount                       As Long
Dim nSelType                         As Long
Dim i                                       As Long
   Set swApp = CreateObject("SldWorks.Application")
   Set swModel = swApp.ActiveDoc
   Set swModDocExt = swModel.Extension
   
    nRefCount = swModDocExt.ListExternalFileReferencesCount
    swModDocExt.ListExternalFileReferences vModelPathName, vComponentPathName, vFeature,vDataType, vStatus, vRefEntity, vFeatComp, nConfigOpt,sConfigName


    Debug.Print "Имя модели = " + swModel.GetPathName
    Debug.Print "    Количество ссылок        = " + Str(nRefCount)
    Debug.Print ""
    For i = 0 To nRefCount - 1
        Debug.Print "    Model path + name      = " + vModelPathName(i)
        Debug.Print "    Component path + name  = " + vComponentPathName(i)
        Debug.Print "    Feature                = " + vFeature(i)
        Debug.Print "    Data type              = " + vDataType(i)
        Debug.Print "    Status                 = " + Str(vStatus(i))
        Debug.Print "    Reference entity       = " + vRefEntity(i)
        Debug.Print "    Feature component      = " + vFeatComp(i)
        Debug.Print "    Configuration option   = " & nConfigOpt
        Debug.Print "    Configuration name     = " & sConfigName
        Debug.Print " "
    Next i
 End Sub

 
 

 
После запуска объект создается из активного приложения
Выводится имя модели, а вот количество ссылок всегда выводится 0 какая бы модель не была активна в Солиде, то ли деталь то ли сборка.
И соответственно дальше ничего не выводится.
Ошибка где то в строках 23, 24, 25.
Кому не лень помогите разобраться.

Изменено пользователем streamdown
Ссылка на сообщение
Поделиться на других сайтах


Set swApp = CreateObject("SldWorks.Application")

Возможно стоит заменить на: 

Set swApp = GetObject(, "SldWorks.Application")

 

 

GetObject используется для присоединения к выполняющемуся экземпляру сервера автоматизации. 

...

 CreateObject используется для запуска нового экземпляра сервера автоматизации.

...

 

https://support.microsoft.com/ru-ru/kb/288902
Изменено пользователем Kelny
Ссылка на сообщение
Поделиться на других сайтах

Подскажите, что означает эта строка?

 

Set swModDocExt = swModel.Extension

 

А конкретно что это за метод .Extension?

Ссылка на сообщение
Поделиться на других сайтах

Не помогло

 а должно было.

 

 

что это за метод

Это не метод, это свойство http://help.solidworks.com/2015/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.imodeldoc2~extension.html

 

 

что означает эта строка?

Получение интерфейса для работы с расширениями ModelDoc http://help.solidworks.com/2015/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.imodeldocextension_members.html

 

 

Ошибка где то

 

Ошибок нет. Всё выводит как надо.

 

 

который по идее должен выводить перечень деталей борки

Нет, этот макрос выводит список внешних ссылок    этим методом

Ссылка на сообщение
Поделиться на других сайтах

Метод ModelDocExtension::ListExternalFileReferences возвращает все внешние ссылки у документа (например, если эскиз находится в контексте другой детали).

 

Чтобы получить все компоненты в сборке наиболее простым способом будет воспользоваться методом IModelDoc2::GetDependencies2.

 

Пример ниже:

 

Артем

Option Explicit

Sub main()
    
    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim i As Long

    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
       
    Dim vDeps As Variant
    vDeps = swModel.GetDependencies2(True, True, False)
    For i = 1 To UBound(vDeps) Step 2
        Debug.Print vDeps(i)
    Next
    
 End Sub

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.
Примечание: вашему сообщению потребуется утверждение модератора, прежде чем оно станет доступным.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...