|
马上注册,结交更多同行朋友,交流,分享,学习。
您需要 登录 才可以下载或查看,没有帐号?注册
x
- Sub ReadModelPrpInSlddrw()
- Dim swModel As SwDMDocument10
- Dim dmSearchOpt As SwDMSearchOption
- Set objClassfac = CreateObject("SwDocumentMgr.SwDMClassFactory")
- SWDMLicenseKey = InputBox("輸入許可證密碼")
- If SWDMLicenseKey = "" Then Exit Sub
- Set swDM = objClassfac.GetApplication(SWDMLicenseKey) '啟動SWDM
- HeaderRoll = 2
- RollNumber = HeaderRoll + 1
- PathName = ActiveSheet.Cells(RollNumber, 1) '讀取第一個路徑的值
- While Not (PathName = "" Or PathName = 0 Or IsEmpty(PathName)) '直到讀完路徑欄
- Filename = ActiveSheet.Cells(RollNumber, 2)
- Set swDoc = swDM.GetDocument(PathName & Filename, 3, False, mOpenErrors) '開啟工程圖
- If Not swDoc Is Nothing Then
- RefModelNames = swDoc.GetAllExternalReferences(dmSearchOpt) '獲取參考檔案名稱
- If Not TypeName(RefModelNames) = "Empty" Then '過濾沒有參考檔案
- Cells(RollNumber, 2).Interior.ColorIndex = 8
- RefModelName = RefModelNames(0) '獲取第一個參考檔案的名稱
- If "SLDPRT" = UCase(Left(RefModelName, 6)) Then '分辨參考檔案的類型
- RefModelTYpe = 1 '這是零件
- Else
- RefModelTYpe = 2 '這是組合件
- End If
- Set swModel = swDM.GetDocument(RefModelName, RefModelTYpe, False, mOpenErrors) '開啟
- ColumnNumber = 3
- PropName = Cells(HeaderRoll, ColumnNumber)
- While Not (PropName = "" Or PropName = 0 Or IsEmpty(PropName)) '直到讀完表頭
- PropNames = swModel.GetCustomPropertyNames '獲取模型內所有屬性的名稱
- HasPropName = False
- If Not IsEmpty(PropNames) Then
- For i = 0 To UBound(PropNames) '核對書否存在表單上的屬性名稱
- If UCase(PropNames(i)) = UCase(PropName) Then HasPropName = True
- Next
- End If
- If HasPropName Then
- PropValue = swModel.GetCustomProperty(PropName, swDmCustomInfoText) '獲取參考檔案的屬性
- Cells(RollNumber, ColumnNumber) = PropValue '寫入屬性到表格
- Else
- Cells(RollNumber, ColumnNumber) = "-----" '寫入代表不存在屬性的字符
- End If
- ColumnNumber = ColumnNumber + 1 '下一欄
- PropName = ActiveSheet.Cells(HeaderRoll, ColumnNumber)
- Wend '回到>直到讀完表頭
- swModel.CloseDoc '關閉參考檔案
- Cells(RollNumber, ColumnNumber) = RefModelName '寫入參考檔案名稱到表格到行末
- End If
- swDoc.CloseDoc '關閉工程圖
- End If
- RollNumber = RollNumber + 1 '下一列
- PathName = ActiveSheet.Cells(RollNumber, 1)
- Wend '回到>直到讀完路徑欄
- End Sub
复制代码
闷大,以上代码为您在几何专门论坛 https://www.SOLIDWORKS.org.tw/forum.php?mod=viewthread&tid=26031&extra=page%3D1&page=2 这帖的51楼贴出来的一段代码。我现在想做一个EXCEL版的SWDM-API文件,在参考使用、修改这些代码,在此过程中碰到两个问题,百度求助没找到能解决我的问题的资料,SWDM-API帮助中又没有VBA的实例,有个VB.NET的实例,但复制到VBA里想看看原理时一运行就出错,可能是代码兼容性问题。没办法只能向闷大您求教了。问题的情况是:
一:在您51楼的读取工程图中参考的零部件的属性中,不知道怎样修改代码可以让获取得到的属性值是工程图中关联的零部件件的配置特定的属性而不是自定义属性选项卡上的属性?
二:SWDM-API打开工程图后,不知道用什么代码获取这个工程图的图纸格式的大小?不管获得的是类似A4 A3这样的结果还是类似于“297mm*210mm"这样的结果,当然最好是能输出A4 A3这种的,我需要输出的是这个值。(知识匮乏,不知道应该分别怎样称呼这两种格式,是否其一是“图纸格式”其一是“图幅”?)SW-API获取图页图幅属性的代码为 vsheetprops = swCurrentSheet.GetProperties
但是我不知道在SWDM-API中读取图页图幅属性的代码。
恳请闷大指点,谢谢。
也请大能 丹大以及梁大等一众高人指点。谢谢。
|
|