Hallo Ihr Superhirne,
als totaler newbie auf dem Script und Makro Gebiet ist mein vorhaben wohl eine Nummer zu groß jedoch muss ich da jetzt einfach mal ran und bräuchte da mal eure Hilfe.
Meine Aufgabenstellung:
Von Zeit zu Zeit kommt es vor das Externe Daten in unser Nummernsystem eingepflegt werden müssen. Diese Daten sind CATIA V5 Daten, die eine recht normale Struktur aufweisen z.B.:
RootProduct
-Product
-Part
-Part
-Product
-Product
-Part
-Part
-Part -Part (ccp-link)
Usw.
Nach Vorgabe einer Grundnummer (wird später über eine Maske geschehen) sollen alle Dateien am Ende mit 001, 002, ..011,012..,101,102…bis max. 999 durchnummeriert werden. (Schleife existiert)
Über die Sicherungsverwaltung ist es ja kein Problem die Teile in ein Verzeichnis seiner Wahl zu sichern, Verzeichnis weitergeben und dabei auch noch den Dateinamen anzupassen. Wenn das ganze aber jedes mal an die 80 – 150 Teile umfasst und noch mehrmals pro Woche vorkommt dann ist aus meiner Sicht Handlungsbedarf!
Nun gut, durch zusammenkopieren diverser Scripte hier aus dem Forum und gewissen Anpassungen und Eigenkram klappt das ganze jetzt solala. Beim starten des Scripts wird man nach einem Verzeichnis gefragt wo die Dateien gesichert werden sollen. Dann rasselt das script los bis die Meldung „Finished“ kommt. Schaut man sich das Ergebnis an, so haben die folgenden Dinge nicht funktioniert:
Gravierend:
- es wird nicht komplett Durchnummeriert, Teilweise werden die Nummern nicht vergeben > der alte
Dateiname bleibt existent
- Verknüpfung der Art CCP (Part zu Part Verknüpfung) werden Generell ignoriert. Dies ist ja immer ein
Problem, auch wenn man über Sicherungsverwaltung arbeitet, da sie zuerst geladen werden müssen > das
müsste mal wohl vorher realisieren.
Schönheitsfehler:
- z.B. Doppelte Teile, Normteile, Gleichteile die mehrmals verbaut worden sind werden zuerst Teil für
Teil durchnummeriert und als Datei abgelegt > was Blödsinn ist. Im Strukturbaum sieht man jedoch nur
ein Teil das verwendet wird > was richtig ist, jedoch immer das letzte durchnummerierte einer Gruppe
von gleichen Teilen. z.B. hat man 5 mal Part1 verbaut so lautet die verwendetet Endung -005.
Hier das Script:
Dim i As Integer
Dim j As Integer
Dim strSavePath As String
'Dim k As Integer
'Dim AnzahlEbenen As Integer
'Dim SubProduct As Product
Sub CatMain()
Dim MainProduct As Product
Dim MainDoc As Document
CATIA.DisplayFileAlerts = False
Set MainProduct = CATIA.ActiveDocument.Product 'Root product
Set MainDoc = MainProduct.ReferenceProduct.Parent 'Productreference (instance of root product)
strSavePath = InputBox("Please enter the save path!", "Save Path", CATIA.ActiveDocument.Path)
j = 1
'Save MainProduct
If Right(MainDoc.Name, 8) = ".CATPart" Then
MainDoc.SaveAs strSavePath & "\" & "MainProduct_T..." & "-00" & j & ".CATPart"
ElseIf Right(MainDoc.Name, 11) = ".CATProduct" Then
MainDoc.SaveAs strSavePath & "\" & "MainProduct_T..." & "-00" & j & ".CATProduct"
End If
'Open save routine
SaveThisDocument MainProduct
MsgBox "Finished!"
'Set SubProduct = MainProduct
'For AnzahlEbenen = 1 To 10 'max. Anzahl Ebenen ist 10
' SearchForSubProducts SubProduct
' Set SubProduct = CurrentProduct
'Next
CATIA.DisplayFileAlerts = True
End Sub
Sub SaveThisDocument(ActiveProduct As Product)
Dim CurrentProduct As Product
Dim CurrentDoc As Document
For i = 1 To ActiveProduct.Products.Count
Set CurrentProduct = ActiveProduct.Products.Item(i)
Set CurrentDoc = CurrentProduct.ReferenceProduct.Parent
j = j + 1
If Right(CurrentDoc.Name, 8) = ".CATPart" Then
If j > 0 And j < 10 Then
CurrentDoc.SaveAs strSavePath & "\" & "T..." & "-00" & j & ".CATPart"
ElseIf j >= 10 And j < 100 Then
CurrentDoc.SaveAs strSavePath & "\" & "T..." & "-0" & j & ".CATPart"
ElseIf j >= 100 And j < 1000 Then
CurrentDoc.SaveAs strSavePath & "\" & "T..." & "-" & j & ".CATPart"
Else
MsgBox ("Fehler")
End If
ElseIf Right(CurrentDoc.Name, 11) = ".CATProduct" Then
If j > 0 And j < 10 Then
CurrentDoc.SaveAs strSavePath & "\" & "T..." & "-00" & j & ".CATProduct"
ElseIf j >= 10 And j < 100 Then
CurrentDoc.SaveAs strSavePath & "\" & "T..." & "-0" & j & ".CATProduct"
ElseIf j >= 100 And j < 1000 Then
CurrentDoc.SaveAs strSavePath & "\" & "T..." & "-" & j & ".CATProduct"
Else
MsgBox ("Fehler")
End If
End If
If CurrentProduct.Products.Count > 0 Then
SaveThisDocument CurrentProduct
End If
Next
End Sub
P.S.: Im Code habe ich noch ein Paar Ideen inaktiviert, bitte ignorieren!
Für eure Hilfe wäre ich sehr Dankbar
Gruß,
Oliver
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP