Hallo zusammen,
wir stellen in Zukunft auf ein neues Schriftkopf- und Freigabesystem um, das quasi alles aus IProperties zieht die im Laufe eines Bauteillebens so mehr oder weniger automatisch befüllt werden.
Das ganze ist inzwischen zu einem Code von insgesamt rund 4000 Zeilen angewachsen der sich in der Testphase funktionell sehr gut bewährt hat. Allerdings habe ich im Laufe der Programmierung natürlich auch viel dazugelernt und will den Code vor der endgültigen Freigabe noch einmal richtig "sauber" machen.
Dazu gehört auch, dass ich weil ich es nicht besser weiss viel viel GoTo im Code habe - Nun sagt man ja Goto ist ein ziemliches No-Go also raus damit. Nur wie?
Im Anschluss habe ich einige Beispiele aus dem Code mit Erklärungen zu dem was der Code tut. Villeicht kann man ja da und dort ein GoTo einsparen?
1. Holen von benutzerdefinierten IProperties aus Excel (siehe anderer Faden): mit dem Goto wird immer wieder zurück zur Suche nach dem nächsten Property gesprungen
'Benutzerdefinierte Iproperties erstellen
Dim Propertyliste As String
Dim i As Integer
Dim Anzahl As Integer
oCustompropertyset = ThisDoc.Document.PropertySets.Item("Inventor User Defined Properties")
i = 2
Suchproperty :
If Not GoExcel.CellValue("H:\[...].xlsx", "Propertyliste_Auto", "A" & i) = ""
Try
Propertyliste = GoExcel.CellValue("H:\[...].xlsx", "Propertyliste_Auto", "A" & i)
oCustompropertyset.Add("", Propertyliste)
i = i + 1
GoTo Suchproperty
Catch
i = i + 1
GoTo Suchproperty
End Try
End If
2. Es wird abgeprüft ob es sich um ein Dokument mit der Klasse "Ohne Zeichnung handelt" - Sonst wird versucht die Zeichnung zu öffnen - Schlägt dies fehl wird der weitere Prozess abgebrochen und der User kommt am Ende des Codes heraus - Das ist auch die grundlegende Vorgehensweise bei allen Möglichkeiten von Userfehlern die der Prozess nicht selbst auffangen kann (z.B. ein altes Dokument wird auf den neuen Schriftkopf aktualisiert wurde aber schon im alten System falsch freigegeben)
'Schriftkopfname prüfen - Falls OZ folgende Schritte überspringen
If Not iProperties.Value(modelName, "Custom", "Klasse") = "OZ" Then
Dim oActiveSheet As Sheet
'Zeichnung öffnen
Try
ThisDoc.Launch(strname & ".dwg")
[...]
Catch
MessageBox.Show("Es wurde keine zugehörige Zeichnung gefunden" & vbCrLf & "Bitte prüfen Sie den Zeichnungsnamen!" & vbCrLf & _
"Informationen zum weiteren Vorgehen finden sie im Konstruktionshandbuch Schriftkopf!", "Keine Zeichnung vorhanden!", MessageBoxButtons.OK, MessageBoxIcon.Error)
GoTo Nichts
End Try
3. Es wird eine Inputlistbox erstellt aus der alle nötigen IProperties bearbeitet werden können. Nach dem Bearbeiten wird wieder zurück zur Liste gesprungen um das nächste Property wählen zu können oder das ganze zu Beenden. Innerhalb des einzelnen Properties wird jeweils über Suchqualität zurückgesprungen und die nächste Auswahlmöglichkeit aus Excel geholt bis kein Eintrag mehr vorhanden ist
Liste:
Propertyeinfügen = InputListBox("IProperties setzen", Propertyliste, xEnd, Title := "iProperty Übersicht", ListName := "Übersicht der IProperties")
Case xCostCenter
Dim Qualität As New ArrayList
i = 2
Suchqualität:
If Not GoExcel.CellValue("H:\[...].xlsx", "Arrayliste", "B" & i) = ""
Qualität.Add(GoExcel.CellValue("H:\[...].xlsx", "Arrayliste", "B" & i))
i = i + 1
GoTo Suchqualität
End If
iProperties.Value("Project", "Cost Center") = InputListBox("Aktuelle Auswahl: " & iProperties.Value("Project", "Cost Center"), _
Qualität, "", Title := "Qualitätseinstufung", ListName := "Wählen sie die Qualitätseinstufung")
GoTo Liste
4. Es wird nach dem Ausfüllen der Properties ob alle nötigen ausgefüllt wurden, sonst wird der User wieder zur Liste aus Punkt 3 zurückgeschickt
'Prüfung der IProperties auf Vollständigkeit
For Each Prüfstring In Propertyprüfen
If Prüfstring = ""
MessageBox.Show("Das Property " & Propertyfehlt(i) & " muss ausgefüllt werden! Sie werden zur Eingabemaske weitergeleitet! ", "Fehlendes IProperty", MessageBoxButtons.OK, MessageBoxIcon.Error)
Zurück = "J"
End If
i = i + 1
Next
If Zurück = "J" Then
GoTo Liste
End If
Ich hoffe ich konnte euch anhand der Beispiele etwas näher bringen wo und wieso ich GoTo bisher eingesetzt habe und villeicht hat ja jemand ein paar Vorschläge wie ich das reduziere
------------------
Für jede Fehlermeldung gibt es eine Lösung
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP