|
提取工程图内的零组件属性的程式码已经写好了, 相信对臭哥有一定的帮助.
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
复制代码 |
|