Mit
txtSfWerkstoff = test(1) greifst du auf ein Array zu,
test ist aber nicht als solches definiert. Also ohne das "(1)".
MaterialIDName ist ein Attribut des Teils, nicht der Zeichnung. Um darauf zugreifen zu können, musst du erst das von der Zeichnung referenzierte Teil aktivieren.
Mir ist nicht klar, was du mit dem Split-Command vorhast. Ich hab mal auf die Schnelle eine Routine geschrieben, welche den Materialnamen vom Teil holt und den Namen der Bibliothek darin entfernt.
Gruß,
Piet
Dim swApp As Object
Dim Model As Object
Dim oldname As String
Dim nErrors As Long
Dim reference As Object
Sub main()
Set swApp = CreateObject("SldWorks.Application")
swApp.Visible = True 'falls nicht sichtbar
Set Model = swApp.ActiveDoc
If Model Is Nothing Then
Call MsgBox("Keine Datei geöffnet", vbOKOnly, "Information")
Exit Sub
End If
Call getreftype
Dim test As Variant
Dim txtsfwerkstoff As String
Dim pos As Integer
txtsfwerkstoff = reference.MaterialIdName
pos = InStrRev(txtsfwerkstoff, "|")
txtsfwerkstoff = Right(txtsfwerkstoff, Len(txtsfwerkstoff) - pos) ' Materialname ohne Bibliotheksname
' Zeichnung wieder zum aktuellen Dokument machen / activates drawing again
Set Model = swApp.ActivateDoc2(oldname, True, nErrors)
End Sub
Sub getreftype() ' ermittelt das in einer Zeichnung refenzierte Modell / gets the referenced model in a drawing
Dim view As Object ' und dessen Namen incl. Pfad / and it's filename and path
Dim bRetval As Boolean
Dim nWarnings As Long
Dim retval As Object
Dim nDocType As Long
Dim refname As String
Dim RefModelName As String
Dim reftype As Long
' Hier wird geprüft, ob das aktive Dokument eine Zeichnung ist (GetType=3)
' Wenn Model eine Zeichnung ist, wird das von der Zeichnung referenzierte
' Dokument aktiviert
If Model.GetType = swDocDRAWING Then
oldname = Model.GetPathName() ' Pfadnamen auslesen / get path name
Set retval = Model.GetFirstView ' FirstView ist das Blatt
Set view = retval.GetNextView ' Dies ist die erste Ansicht
If view Is Nothing Then
Exit Sub
End If
' Name des referenzierten Modells holen / gets referenced model's name
RefModelName = view.GetReferencedModelName
' Typ des referenzierten Docs anhand der Endung erkennen
If InStr(LCase(RefModelName), "sldprt") > 0 Then ' LCase wandelt string in Kleinbuchstaben um
nDocType = swDocPART ' InStr gibt die Position des Suchtextes zurück
ElseIf InStr(LCase(RefModelName), "sldasm") > 0 Then
nDocType = swDocASSEMBLY
ElseIf InStr(LCase(RefModelName), "slddrw") > 0 Then
nDocType = swDocDRAWING
Else
' Probably not a SolidWorks file...
nDocType = swDocNONE
MsgBox ("Referenzdatei kann nicht geöffnet werden")
Exit Sub
End If
' Referenziertes Modell zum aktiven Dokument machen / activates referenced model
Set reference = swApp.OpenDoc6(RefModelName, nDocType, swOpenDocOptions_Silent, "", nErrors, nWarnings)
refname = reference.GetPathName()
reftype = reference.GetType
If (reftype < 1 Or reftype > 2) Then
MsgBox ("Kein Referenztyp gefunden")
End If
End If
End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP