Ich arbeite an meiner Version des Schriftfeld-Programmes, das, glaub ich, ursprünglich von Stefan Berlitz stammt, und von verschiedenen Anwendern schon als Weiterentwicklung gepostet wurde.
Zweck dieses Programms ist, über ein Formular benutzerdefinierte Eigenschaften einzutragen, die dann im Schriftfeld einer Zeichnung angezeigt werden.
Ich möchte nun grundsätzlich keine benutzerdefinierte Eigenschaften an die Zeichnung hängen, sonder grundsätzlich ans Teil oder die Baugruppe. Dazu dachte ich wie folgt vorzugehen:
1. Prüfen, ob das aktive Dokument eine Zeichnung ist
2. Wenn ja, die erste Ansicht aktivieren
3. Den Namen des referenzierten Dokuments auslesen
4. Das Dokument mit diesem Namen aktivieren
Zwei Probleme:
Wenn in der Zeichnung eine Ansicht aktiviert ist, findet das Programm das dazugehörige Part und versucht, diese zu öffnen. Wenn das Part schon geöffnet ist, kommt eine Meldung, ob das Teil noch einmal schreibgeschützt geöffnet werden soll. Wie fang ich das ab?
Schlimmer:
Wenn noch keine Ansicht aktiv ist, krieg ich das in der Zeichnung referenzierte Teil nicht gegriffen.
z_name in meinem Code liefert ulkigerweise nicht den Name der Ansicht zurück, sondern den Blattnamen. Das versteh ich nicht, und es widerspricht IMHO auch der Online-Hilfe.
Vielleicht gibt es ja auch ganz andere Möglichkeiten, das referenzierte Modell zu öffnen/aktivieren, ich bin für jeden Tipp dankbar.
Ich muss noch dazu sagen, ich bin noch ziemlicher Fahrschüler in VB/VBA.
Vielen Dank,
Piet
Und hier kommt der Code:
Sub barSfAuslesenZng()
'hier scheint das Programm anzufangen ...
Dim Drawing As Object
Dim retval As Object
Dim Konfig As String
Dim ModName As String
Dim visib As Boolean
Dim View As Object
Dim bool As Boolean
wkbObj = GetObject(ExeDirectory & "\" & "Schriftfeld.xls")
swApp = CreateObject("SldWorks.Application")
Dim myModel As SldWorks.ModelDoc2
myModel = swApp.ActiveDoc
If myModel Is Nothing Then
keinSWXDok()
Exit Sub
End If
Dim RefModelName As String
Dim z_name As String
' Die benutzerdefinierten Eigenschaften sollen nicht an der Zeichnung hängen,
' sondern am Teil oder der Baugruppe.
' Hier wird geprüft, ob das aktive Dokument eine Zeichnung ist (GetType=3)
' Wenn myModel eine Zeichnung ist, wird das von der Zeichnung referenzierte
' Dokument aktiviert
If myModel.GetType = 3 Then
retval = myModel.GetFirstView()
' z_name liefert den ersten Blattnamen, nicht den Ansichtsnamen ???
z_name = retval.name
bool = myModel.activateView(z_name)
View = myModel.ActiveDrawingView()
' Name des referenzierten Modells holen
RefModelName = View.GetReferencedModelName
' Referenziertes Modell zum aktiven Dokument machen
myModel = swApp.OpenDoc(RefModelName, swDocPART Or swDocASSEMBLY)
End If
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP