' Test-Makro fr das Auslesen von OLE-Objekten in SW-Zeichnungen
' 02-2013

Option Explicit

Dim swApp As SldWorks.SldWorks   'Basis-Variablen SW
Dim swModel As SldWorks.ModelDoc2
Dim swPart As SldWorks.PartDoc
Dim swAssembly As SldWorks.AssemblyDoc
Dim swDrawing As SldWorks.DrawingDoc
Dim swSelMgr As SldWorks.SelectionMgr

Dim Property As Boolean   'Basis-Variablen API
Dim BoolStatus As Boolean
Dim LongStatus As Long
Dim Errors As Long
Dim Warnings As Long

Dim ExcelApp As Excel.Application   'Zusatz-Variablen Excel
Dim ExcelWbk As Excel.Workbook
Dim ExcelWks As Excel.Worksheet

Dim swModelDocExt As SldWorks.ModelDocExtension   'Zusatz-Variablen Sub
Dim OleAnzahl As Integer
Dim OleObjekt As Variant
Dim i As Integer
Dim OleDatei As String
Dim OleKoordinaten As Variant
Dim OleXPos As Single
Dim OleYPos As Single

Sub main()

Set swApp = Application.SldWorks   'Zugriff SW-Dokument
swApp.Visible = True
Set swModel = swApp.ActiveDoc
swModel.ClearSelection2 True
Set swDrawing = swModel

Set ExcelApp = New Excel.Application   'Zugriff Excel
ExcelApp.Visible = False

Set swModelDocExt = swDrawing.Extension   'Zugriff OLE-Objekte
OleAnzahl = swModelDocExt.GetOLEObjectCount(swOleObjectOptions_GetOnCurrentSheet)
OleObjekt = swModelDocExt.GetOLEObjects(swOleObjectOptions_GetOnCurrentSheet)

For i = 0 To OleAnzahl - 1
    OleKoordinaten = OleObjekt(i).Boundaries   'Auslesen Endpunkte OLE-Objekt
    OleXPos = OleKoordinaten(0)   'X-Pos. Platzierungspunkt li. ob.
    OleYPos = OleKoordinaten(1)   'Y-Pos. Platzierungspunkt li. ob.
    BoolStatus = OleObjekt(i).IsLinked   'Verknpfungs-Abfrage Excel-Datei

    If BoolStatus = True Then
       OleDatei = OleObjekt(i).FileName   'verknpfte Excel-Datei
    Else
       BoolStatus = OleObjekt(i).Select(True)   'Selektierung OLE-Objekt
       Set ExcelWbk = OleObjekt(i).SetActive(True)   'Aktivierung OLE-Objekt
       ExcelWbk.SaveAs ("R:\Work\Test-" & CStr(i) & ".xls")   'Speicherung in Excel-Datei
       Set ExcelWbk = OleObjekt(i).SetActive(False)   'De-Aktivierung OLE-Objekt
       BoolStatus = OleObjekt(i).Select(False)   'De-Selektierung OLE-Objekt
    End If
Next i

End Sub
