Wir haben kein PDM, daher müssen wir die Dokumentation verschiedener Versionstände von Hand machen. Unsere aktuellen Dateien haben im Dateinamen keinen Versionsindex.
Wenn Teile freigegeben werden, wird eine PDF von der Zeichnung gespeichert, bei der der Versionsindex im Dateinamen enthalten ist. Zusätzlich wird von dem Teil eine Kopie mit Index erstellt.
Beispiel:
Aktuell: 4711_Grundplatte.sldprt und 4711_Grundplatte.slddrw.
Zur Dokumentation erstellt: 4711_Grundplatte_R01.pdf (von der Zeichnung) und 4711_Grundplatte_R01.sldprt.
Um diese Sicherungen zu erleichtern, schreibe ich gerade ein Makro.
Beim Start wird eine Form geöffnet, man gibt den Versionsindex ein und das Makro hängt diesen an den ursprünglichen Dateinamen an und und speichert die Kopien.
Bei PDF funktioniert das.
Wenn ich das Makro in einer Zeichnung starte, will ich aber eine Kopie des referenzierten Teils anlegen und nicht von der Zeichnung. Ich muss daher das referenzierte Modell aktivieren, und genau das klappt nicht.
Der Name des referenzierten Teils wird korrekt ausgelesen, aber es gelingt mir nicht, das so ermittelte Teil zu aktivieren. Soviel ich weiß, müsste das Teil im Hintergrund geöffnet sein, so dass ich es nicht noch mal öffnen kann, daher müsste doch ActivateDoc der richtige Befehl sein, oder?
Alternativ hatte ich es mal mit OpenDoc6 probiert, aber damit wollte das Makro gar nicht laufen.
Die Oberfläche der Form ist nur sehr provisorisch, nicht erschrecken.
Piet
Sub Partkopie()
Dim RefModelName As String
Dim retval As Object
Dim nretval As Object
Dim draw As DrawingDoc
Dim view As Object
Dim bRetval As Boolean
Dim nErrors As Long
Dim nWarnings As Long
Dim reference As Object
' 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 = 3 Then
Set retval = Model.GetFirstView
Set view = retval.GetNextView()
'Hinweis: Die Schriftfeldvariablen werden zwar meistens von der ersten Ansicht
'gesteuert, aber nicht immer! Es gibt die möglichkeit abzufragen, welche Ansicht
'der "Bestimmer" ist, Stichwort in der Hilfe: Sheet::CustomPropertyView
If view Is Nothing Then
Exit Sub
End If
' Name des referenzierten Modells holen
RefModelName = view.GetReferencedModelName
RefModelName = Left(RefModelName, Len(RefModelName) - 7)
RefModelName = RefModelName + Anhang
RefModelName = RefModelName + ".sldprt"
' Referenziertes Modell zum aktiven Dokument machen
Set reference = swApp.ActivateDoc2(RefModelName, True, nErrors)
Set Model = swApp.ActiveDoc
Call MsgBox(Model.GetTitle) ' nur zum Testen
End If
bRetval = Model.SaveAs4(RefModelName, 0, 2, nErrors, nWarnings) ' Part speichern
If bRetval = False Then
bRetval = swApp.SendMsgToUser2("Problems saving sldprt-file.", 0, 0)
End If
End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP