Hallo
erst mal ganz herzlichen Dank an Christian und Bernd für Eure schnellen Antworten!
@Christian:
Ja ich kannte die Beispiele schon, hatte aber wegen einer falschen Deklaration (Dim xlObj As SldWorks.SwOLEObject anstatt As Object) immer einen Laufzeitfehler. Das passt nun soweit :-)
@Bernd:
Ich schaffe es nun auch das Excelfile aus dem DesignBinder zu öffnen (Excel öffnet in SWX und nicht in einer neuen Excel Instanz).
Soweit so gut. Nun habe ich aber das Problem, dass sich evtl. ebenso "Gauge Bending tables" und "Design Tables" im Modell befinden können.
vOleObjs(i).FileName liefert keinen Wert zurück und ich kann nur über die CLSID (wie Du ja bereits erwähnt hast) die Objekte ansprechen.
Damit muss ich alle *.xlsx öffnen, die im Modell embedded sind bis ich zum richtigen komme (Prüfung über Merkmale in der *.xlsx)...
Des weiteren haben z.B. *.xls und *.xlsx unterschiedliche CLSID's und ich weiß auch nicht, ob sich diese mit einer neuen Office Version verändern.
Ich habe rausgefunden, dass ich die CLSID über VBA aus der Registry auslesen kann (es gibt hier aber so viele Optionen, dass ich nicht weiß ob ich damit so richtig liege), wie gesagt, für *.xls sieht die CLSID schon anders aus und bei einer neuen Version bin ich auch nicht sicher, ob der richtige Wert zurück gegeben wird...
Dim wsh As Object
Set wsh = CreateObject("WScript.Shell")
MsgBox wsh.regread("HKLM\SOFTWARE\Classes\Excel.Sheet\CLSID\")
Hier mein Code zum öffnen der Excel aus dem Design Binder:
Option Explicit
Sub DesignBinder()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim xlObj As Object
Dim oleobjoptions As Long
Dim vOleObjs As Variant
Dim i As Integer
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
vOleObjs = swModel.Extension.GetOLEObjects(oleobjoptions)
For i = 0 To UBound(vOleObjs)
Debug.Print " Class ID: " & vOleObjs(i).Clsid
Debug.Print " Is linked? " & vOleObjs(i).IsLinked
Debug.Print " Filename: " & vOleObjs(i).FileName
If vOleObjs(i).Clsid = "{00020830-0000-0000-C000-000000000046}" Then 'xlsx Excel-Files
Set xlObj = vOleObjs(i).SetActive(True)
'Some action here
Set xlObj = vOleObjs(i).SetActive(False)
End If
Next i
End Sub
Ich habe ebenso versucht, das Problem über Attachements zu lösen:
...
vAttachments = swModel.Extension.GetAttachments(vLinks)
For i2 = 0 To UBound(vAttachments)
If VBA.InStrRev(vAttachments(i), ".xlsx") > 0 Then
file = vAttachments(i2)
Debug.Print file
End If
Next i2
Hier bekomme ich tatsächlich den Name des Attachments heraus, kann aber dann nichts weiter damit anstellen, da ich mit keiner Methode das Dokument programmtechnisch selektieren kann oder einem Objekt zuweisen kann... Es scheint kein Feature zu sein.
Für weitere Ideen oder Hinweise bin ich immer dankbar :-)
Grüße
Esche
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP