使用SOLIDWORKS API按类型从图纸中查找表格
{ width=250 }
此示例使用SOLIDWORKS API从活动图纸中按指定类型查找所有表格。
需要使用Array函数指定类型数组,其中每个值表示表格的类型(BOM、通用、切割列表、修订、标题块等),这些类型在swTableAnnotationType_e枚举中定义。
作为结果,返回指向ITableAnnotation SOLIDWORKS API接口的指针数组,并将每个表格的标题输出到VBA编辑器的即时窗口。
Dim swApp As SldWorks.SldWorks
Sub main()
Set swApp = Application.SldWorks
Dim swDraw As SldWorks.DrawingDoc
Set swDraw = swApp.ActiveDoc
If Not swDraw Is Nothing Then
Dim vTables As Variant
vTables = FindTables(swDraw, Array(swTableAnnotationType_e.swTableAnnotation_BillOfMaterials, swTableAnnotationType_e.swTableAnnotation_RevisionBlock))
If Not IsEmpty(vTables) Then
Dim i As Integer
For i = 0 To UBound(vTables)
Dim swTable As SldWorks.TableAnnotation
Set swTable = vTables(i)
Debug.Print swTable.Title
Next
End If
Else
MsgBox "请打开图纸"
End If
End Sub
Function FindTables(draw As SldWorks.DrawingDoc, filter As Variant) As Variant
Dim swTables() As SldWorks.TableAnnotation
Dim isInit As Boolean
isInit = False
Dim vSheets As Variant
vSheets = draw.GetViews()
Dim i As Integer
For i = 0 To UBound(vSheets)
Dim vViews As Variant
vViews = vSheets(i)
Dim swSheetView As SldWorks.View
Set swSheetView = vViews(0)
Dim vTableAnns As Variant
vTableAnns = swSheetView.GetTableAnnotations
If Not IsEmpty(vTableAnns) Then
Dim j As Integer
For j = 0 To UBound(vTableAnns)
Dim swTableAnn As SldWorks.TableAnnotation
Set swTableAnn = vTableAnns(j)
If FilterContains(swTableAnn.Type, filter) Then
If isInit Then
ReDim Preserve swTables(UBound(swTables) + 1)
Else
ReDim swTables(0)
isInit = True
End If
Set swTables(UBound(swTables)) = swTableAnn
End If
Next
End If
Next
FindTables = swTables
End Function
Function FilterContains(val As swTableAnnotationType_e, filter As Variant) As Boolean
Dim i As Integer
For i = 0 To UBound(filter)
If val = filter(i) Then
FilterContains = True
Exit Function
End If
Next
FilterContains = False
End Function