Hallo Inventor-VBA-Spezies !
Ich muß gleich eine Sache klarstellen. Ich habe nur sehr, sehr wenige bis keine Kenntnisse von dieser VBA-Materie.
Wir hatten hier bei uns einen netten Kollegen der das für uns programmiert hat und nun leider nicht mehr bei uns in der Firma arbeitet.
Über eine benutzerdefiniertze Schaltleiste wird ein Makro aufgerufen, mit dem man Schweissstempel ( Farbstempel,Kantstempel ) in der Zeichnung einfügen kann.
Das funktioniert auch, solange das nur 1 Schweissstempel ist. Sobald man einen zweiten Stempel einfügt, kommt eine Fehlermeldung.
Ich glaube das liegt daran, das der Name für das skizzierte Symbol fest ist und beim erneuten Einfügen, wieder ein Symbol mit dem selben Namen eingefügt werden soll.
Die entsprechenden Zeilen im Modul sehen so aus:
Public Function Tabelle_zeichnen()
Dim MyDoc As DrawingDocument
Set MyDoc = ThisApplication.ActiveDocument
Dim MySketchedSymbolDef As SketchedSymbolDefinition
Set MySketchedSymbolDef = MyDoc.SketchedSymbolDefinitions.Add("Schweissangaben")
Dim MySketch As DrawingSketch
Call MySketchedSymbolDef.Edit(MySketch)
Dim MyTG As TransientGeometry
Set MyTG = ThisApplication.TransientGeometry
Dim MySL As SketchLines
Call MySketch.SketchLines.AddAsTwoPointRectangle(MyTG.CreatePoint2d(0, 0), MyTG.CreatePoint2d(8, 4.7)) u.s.w.
Um das zu verhindern müßte der Name indiziert werden. Also beim ersten Einfügen z.B. Schweissangaben1 ; Schweissangaben2 u.s.w.
Ich wollte das erst mit einfachem Hochzählen umgehen und habe die Zeilen so geändert:
Public Function Tabelle_zeichnen()
Dim MyDoc As DrawingDocument
Set MyDoc = ThisApplication.ActiveDocument
Dim MySketchedSymbolDef As SketchedSymbolDefinition
Dim Schweisssymbolname As String
Dim Schweisssymbolindize As Integer
Schweisssymbolindize = Schweisssymbolindize + 1
Schweisssymbolname = "Schweissangaben" & Schweisssymbolindize
Set MySketchedSymbolDef = MyDoc.SketchedSymbolDefinitions.Add(Schweisssymbolname)
Dim MySketch As DrawingSketch
Call MySketchedSymbolDef.Edit(MySketch)
Dim MyTG As TransientGeometry
Set MyTG = ThisApplication.TransientGeometry
Dim MySL As SketchLines
Call MySketch.SketchLines.AddAsTwoPointRectangle(MyTG.CreatePoint2d(0, 0), MyTG.CreatePoint2d(8, 4.7)) u.s.w.
Das funktioniert auch nur für das erste Einfügen aber nicht beim zweiten, da die Variable Schweisssymbolindize beim nächsten Lauf wieder mit 0 startet und nicht die 1 behält.
Ich habe im Code ein "debug.print Schweisssymbolindize" eingebaut und das im Direktfenster kontrolliert.
Ich habe versuchsweise diese Variable schon mal als private oder public außerhalb der Sub aber im selben Modul definiert, dann läuft aber gar nichts mehr.
Wer kann mir hier weiterhelfen ?
Das Eleganteste wäre natürlich, wenn man abfragen kann ob ein skizziertes Symbol bereits eingefügt ist und wenn ja, welchen Namen es hat. Dann müße jeweils der nächste freie vergeben werden.
Also wenn es Schweissangaben1 gibt, sollte Schweissangaben2 für das nächste Symbol vergeben werden.
Laut Objektkatalog hat die "add" Funktion für die Klasse "SketchedSymbolDefinitions" keinen Zusatz zum Hochzählen und wie ich mit dem Property "count" in der Klasse "SketchedSymbolDefinitions" umgehen soll weiß ich nicht so recht.
Wer hat schon mal so was programmiert und kann mir eventuell weiterhelfen ?
Vielen Dank im voraus !
Tschüß Frank !
[Diese Nachricht wurde von melzig am 25. Jun. 2009 editiert.]
[Diese Nachricht wurde von melzig am 25. Jun. 2009 editiert.]
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP