MS3さん、こんにちは
遅くなりましたが、2に関するサンプルコードを作ってみました。
Option Explicit
Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swFeat As SldWorks.Feature
Dim swSubFeat As SldWorks.Feature
Dim swBomFeat As SldWorks.BomFeature
Dim vBomTable As Variant
Dim swBomTable As SldWorks.BomTableAnnotation
Dim xlApp As Excel.Application
Dim xlWb As Excel.Workbook
Dim xlWs As Excel.Worksheet
Dim i As Long, j As Long, k As Long
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swFeat = swModel.FirstFeature
' フィーチャー巡回
While Not (swFeat Is Nothing)
' アセンブリの部品表は、テーブルフォルダのサブフィーチャーになります。
Set swSubFeat = swFeat.GetFirstSubFeature
While Not (swSubFeat Is Nothing)
' フィーチャーの種類が部品表であれば取得
If swSubFeat.GetTypeName2 = "BomFeat" Then
Debug.Print swSubFeat.Name
Set swBomFeat = swSubFeat.GetSpecificFeature2
If Not (swBomFeat Is Nothing) Then
' 部品表巡回
vBomTable = swBomFeat.GetTableAnnotations
' Excel起動
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
xlApp.UserControl = True
' ブックを開く
Set xlWb = xlApp.Workbooks.Open("C:\Sample.xls")
If Not xlWb Is Nothing Then
' 一番目のシート取得
Set xlWs = xlWb.Worksheets(1)
' 部品表内セル巡回
For i = 0 To UBound(vBomTable)
Set swBomTable = vBomTable(i)
For j = 0 To swBomTable.RowCount
For k = 0 To swBomTable.ColumnCount
' Excelブックに出力
xlWs.Cells(j + 1, k + 1).Value = swBomTable.Text(j, k)
Next k
Next j
Next i
End If
End If
End If
Set swSubFeat = swSubFeat.GetNextSubFeature
Wend
Set swFeat = swFeat.GetNextFeature
Wend
End Sub
SolidWorksで新規マクロを作成して、上記コードを貼り付けて下さい。
その際、VBA編集画面の"ツール"→"参照設定"から、"Microsoft Excel XX.X Object Library"のチェックをして下さい。
(Excelを制御するためのライブラリ参照です)
その上で、CドライブにSample.xlsというファイルを作ってSolidWorksのマクロを実行すると、Sample.xlsのSheet1に現在開いているアセンブリ部品表の内容を出力します。
例外(エラー)処理などは一切していないので、必要に応じて追加してみて下さい