Hallo zusammen,
und zwar möchte ich ein Makro erstellen bzw. aus vorhandenen zusammenbauen, das folgendes macht:
- Bei geöffnerter Baugruppe wird das Makro ausgeführt und soll nacheinander von oben herrunter jedes Teil öffnen, falls eine Bedingung erfüllt wurde soll eine Aktion ausgeführt werden. Danach soll das Teil, falls die Bedingung erfüllt wurde gespeichert und danach geschlossen werden. Falls die Bedingung nicht erfüllt wurde soll das Teil ohne speichern geschlossen werden.
- Da bei Baugruppen es auch Unterbaugruppen geben kann, soll das Makro auch diese öffnen und dort das oben genannte ausführen. Danach soll die Unterbaugruppe wieder ohne speichern geschlossen werden.
Bedingung wäre in meinem Fall, dass die Teile ein Blech sein sollen.
Das Makro soll nämlich später eingesetzt werden um es in einer Baugruppe ausführen zu können, das viele Blech-, Norm-, bzw. Kaufteile und Unterbaugruppen enthält. Aus den Belchteilen sollen DXF Dateien erstellt werden und der Rest wird einfach nur geöffnet und wieder geschlossen.
Nun zu meinem Problem:
Im Moment funktioniert das Makro soweit, dass es jedes Teil aufmacht und wenn es ein Blech ist eine DXF Datei erstellt. Allerdings möchte er jedes Teil, das kein Belch ist neu speichern. Ausserdem funktioniert das mit den Unterbaugruppen, und das mit dem speichern nicht wirklich...
Der Code um jedes Teil zu öffnen ist folgender (aus anderem Makro kopiert und geändert):
' --------------------------------------------------------------------06/02/2006
' Open Assembly Components
' OpenAssyComp.swp - By handleman Copyright 2006
' This macro is provided as is. No claims, support, refund, safety net, or
' warranties are expressed or implied. By using this macro in any way, the user
' holds the author and all others free from all liability.
' This macro is based on discussion at: http://www.eng-tips.com/viewthread.cfm?qid=156219&
' ------------------------------------------------------------------------------
' Description:
' Traverses the open assembly and activates all components and their drawings (if of the
' same name).
' ------------------------------------------------------------------------------
' Version - By Matthew Lorono
' 1.01 * Saved macro as sourced from above link.
' 1.02 * Add this common description comment area.
' ------------------------------------------------------------------------------
Sub ShowAllOpenFiles()
Dim swDoc As SldWorks.ModelDoc2
Dim swAllDocs As EnumDocuments2
Dim FirstDoc As SldWorks.ModelDoc2
Dim dummy As Boolean
Dim NumDocsReturned As Long
Dim DocCount As Long
Dim i As Long
Dim sMsg As String
Dim swApp As SldWorks.SldWorks
Dim bDocWasVisible As Boolean
Dim OpenWarnings As Long
Dim OpenErrors As Long
Dim DwgPath As String
Dim myDwgDoc As SldWorks.ModelDoc2
Set swApp = Application.SldWorks
Set swAllDocs = swApp.EnumDocuments2
Set FirstDoc = swApp.ActiveDoc
DocCount = 0
swAllDocs.Reset
swAllDocs.Next 1, swDoc, NumDocsReturned
While NumDocsReturned <> 0
bDocWasVisible = swDoc.Visible
swApp.ActivateDoc swDoc.GetPathName
swAllDocs.Next 1, swDoc, NumDocsReturned
DocCount = DocCount + 1
DXF_erstellen
Wend
swApp.ActivateDoc FirstDoc.GetPathName
End Sub
im sub DXF erstellen, wird erstmal folgendes geprüft:
Set swApp = CreateObject("SldWorks.Application")
swApp.Visible = True
Set Part = swApp.ActiveDoc
Set ModelDoc2 = swApp.ActiveDoc
If (ModelDoc2.GetType = swDocASSEMBLY) Then
MsgBox ("Baugruppe wird nicht als DXF gespeichert")
Exit Sub
End If
' If Part Is Nothing Then
' Call MsgBox("Keine Datei geöffnet", vbOKOnly, "DXF Abwicklung")
' Exit Sub
' End If
' If Part Is Nothing Then
' MsgBox "Kein Dokument geöffnet.", vbOKOnly, "DXF Abwicklung"
' Exit Sub
' End If
' If Part.GetType <> swDocPART Then
' MsgBox "Kein Modell aktiv.", vbOKOnly, "DXF Abwicklung"
' Exit Sub
' End If
If Part.GetBendState = 0 Then
MsgBox "Teil ist kein Blech.", vbOKOnly, "DXF Abwicklung"
Exit Sub
End If
leider darf ich momentan den Rest des Makros, das die DXF Datei erstellt, nicht einstellen. Allerdings wird eben, falls die Prüfung bestanden wird, eine DXF Datei erstellt und an einem vorgebenen Speicherplatz gespeichert.
Nun sollen eben meine oben genannten Bedingungen eingefügt werden. Habe schon einige Versuche gemacht, allerdings mit mäßigem Erfolg.
Hat jemand eine Idee es möglichst leicht einzufügen, bzw. sollte ein ganz andere Ansatz gewählt werden?
(Bei Fragen gerne nachfragen, weis nicht ob ich das so verständlich erklärt habe )
Gruß
------------------
Rechtschreibfehler dürfen behalten werden
[Diese Nachricht wurde von Zega am 11. Nov. 2016 editiert.]
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP