| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | |  | NVIDIA GTC Paris und ISC High Performance-Konferenz 2025, eine Pressemitteilung
|
Autor
|
Thema: Einfügen von MTextObj - Fehler (1537 mal gelesen)
|
ToniM Mitglied Rekrut

 Beiträge: 17 Registriert: 14.07.2005 AutoCAD 2005
|
erstellt am: 19. Jul. 2005 12:43 <-- editieren / zitieren --> Unities abgeben:         
Hi, Ich hab mein kleines Programm fertig (gehabt). Es hat alles funktioniert, ganze 3 mal, denn dann trat eine Fehlermeldung auf, obwohl ich KEIN ZEICHEN vor dem auftreten des Fehlers verändert habe. Ich hab jediglich ein paar zeilen angehängt! Hier ein Teil des Codes: startPoint(0) = l + HoeheX + PressplatteX - 2: startPoint(1) = (DBO / 2) - (Bolzendat / 2) endPoint(0) = -l - HoeheX - PressplatteX + 2: endPoint(1) = (DBO / 2) - (Bolzendat / 2) Set lineObj = m.AddLine(startPoint, endPoint) Dim text_daten(), text_werte(), text_units(), text_anz Dim k, i, insPnt(0 To 2), startPnt(0 To 2), endPnt(0 To 2) As Double Dim MTextObj As AcadText Dim width As Double Dim text As String text_anz = 19
Set newLayer = ThisDrawing.Layers.Add("Text") newLayer.color = acWhite ThisDrawing.ActiveLayer = newLayer For i = 0 To text_anz Step 1 insPnt(0) = 100: insPnt(1) = 300# - i * 8: insPnt(2) = 0 width = 300 text = text_daten(i) & text_werte(i) & text_units(i) If i = 9 Then text = text & " (" & p & "N/mm2)" End If Set MTextObj = ThisDrawing.ModelSpace.AddMText(insPnt, _ text, width) ' FEHLER MTextObj.Height = 5 Next i Ich erhalte immer diese Fehlermeldung: Laufzeitfehler '5': Ungültiger Prozeduraufruf oder ungültiges Argument Könnte mir vielleicht irgend jemand weiter helfen? Ich hab wirklich keinen blassen Dunst warum es zuerst ging und auf einmal nicht mehr! (Bitte nicht lachen, wenn die antwort so banal ist!) LG martin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Moderator Architekt
   
 Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 19. Jul. 2005 15:21 <-- editieren / zitieren --> Unities abgeben:          Nur für ToniM
Hi Martin, drei kleine Dinge:
Code:
'1: Dim MTextObj As AcadMText '<= tricky M? ;-) '... '2: Set MTextObj = ThisDrawing.ModelSpace.AddMText(insPnt, _ text, width) ' FEHLER 'hier hast width & text verdreht Set MTextObj = ThisDrawing.ModelSpace.AddMText(insPnt, _ width, text) ' kein FEHLER;-)
So und drittens, sowas ist gaaanz schlecht Code:
Dim k, i, insPnt(0 To 2), startPnt(0 To 2), endPnt(0 To 2) As Double
Hier ist nur endPnt ein Double, der Rest Variant. Also hinter jede variable die Deklaration packen, nicht nur hinter die Letzte. [edit] soll heissen, add.text/add.Mtext erwartet kein irgendein Eis am Stiel [Variant] als Übergabeparameter, sondern eben strikt ein Double(2)# sonst nix ;-) [/edit] HTH Nancy -- God is real - until declared as integer. [Diese Nachricht wurde von startrek am 19. Jul. 2005 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ToniM Mitglied Rekrut

 Beiträge: 17 Registriert: 14.07.2005 AutoCAD 2005
|
erstellt am: 20. Jul. 2005 06:47 <-- editieren / zitieren --> Unities abgeben:         
Vielen Dank Nancy! Ich war so verzweifelt, weil es zuerst funktioniert hat (Warum auch immer?) und dann nicht mehr. Deshalb hab ich mit MText, Text und Blöcken herumprobiert! Da ist was beim Umendern daneben gegangen, SORRY! Aber das mit den Deklarationen hab ich nicht gewusst (ich bin C gewöhnt)! Vielen Dank dafür!! (So nebenbei: Es funktioniert schon! Dank deiner Hilfe!) LG Martin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Moderator Architekt
   
 Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 20. Jul. 2005 21:56 <-- editieren / zitieren --> Unities abgeben:          Nur für ToniM
Hi Martin, erstmal - büddeschön. Die Frage nach dem 'Warum?' erst - dann plötzlich nicht mehr, gute Frage - nächste Frage!;-) Wenn insPnt ohne Deklaration, also variant ist, kommt bei mir mit dieser Konstellation:
Code:
insPnt(0) = 100: insPnt(1) = 300# - i * 8: insPnt(2) = 0 'sowas raus: typeof insPnt() == Variant insPnt(0) == Integer | insPnt(1) == Double | insPnt(2) == Integer
Vielleicht waren (0) und (2) tatsächlich auch mal Doubles, und der Interpreter hats geschluckt - aber echt keine Ahnung, nur Vermutung ... ;-) lg Nancy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ToniM Mitglied Rekrut

 Beiträge: 17 Registriert: 14.07.2005 AutoCAD 2005
|
erstellt am: 22. Jul. 2005 10:22 <-- editieren / zitieren --> Unities abgeben:         
Hallo Nancy! Vielen Dank für deine Hilfe bisher und gleich im voraus! *g* Ich hätte da noch eine andere Frage zum Thema Block einfügen: Dim blkSK Dim BlockName As String BlockName = CurDir & "\Schriftfeld_Programm.dwg" Set blkSK = ThisDrawing.ModelSpace.InsertBlock(insPnt, BlockName, _ 1#, 1#, 1#, 0) ' Warum brauch ich noch einmal: Set blkSK = ... ' Wenn ich diese nicht "Ein"-Kommentiere erhalte ich eine ' Fehlermeldung: ' BlockName = "Schriftfeld_Programm" ' Set blkSK = ThisDrawing.Blocks.Item(BlockName) Außerdem: Und weißt du auch wie ich "elegant" auf meine 40 Attribute in diesem Block zugreifen kann?
Bis jetzt mach ich es mit der "Holzhammer"-Methode. Mit Schleifen und Strings-Vergleichen. Code: For i = 0 To blkSK.Count - 1 Step 1 Set blkEL = blkSK.Item(i) If StrComp(blkEL.EntityName, "AcDbAttributeDefinition") = 0 Then For k = 0 To 16 If StrComp(blkEL.TagString, datenTextfeld(k)) = 0 Then blkEL.TagString = werteTextfeld(k) blkEL.TextString = werteTextfeld(k) End If Exit For Next k End If Next i Hast du einen (oder mehrere) Tipps für mich?
LG Martin
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Moderator Architekt
   
 Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 22. Jul. 2005 11:44 <-- editieren / zitieren --> Unities abgeben:          Nur für ToniM
Hi Martin, na toll, mit Blöcken hab's ich nicht so und bin da auch nicht so der Erklärbär;-) Wie ich das sehe [du auch, wennde mal ins Lokalfenster guggst] fügst Du erstmal eine Blockreferenz ein - das ist gut. Dann setzt Du diese als Block - das ist schlecht. Diesen Block musst Du nun unsinnigerweise wieder nach Attributen abschleifen, da ein AcadBlock kein HasAttributes unterstützt, eine Blockreferenz aber schon ... Wiegesagt, so der Guru bin ich da auch nicht, aber versuchs mal so:
Code:
Sub asdf() Dim b As AcadBlockReference, atts Dim insP#(2), i% Set b = ThisDrawing.ModelSpace.InsertBlock(insP, "d:\dummy.dwg", 1#, 1#, 1#, 0#) If b.HasAttributes Then atts = b.GetAttributes For i = 0 To UBound(atts) atts(i).TextString = "bla" & i Next End If End Sub
Gruss Nancy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin

 Beiträge: 1250 Registriert: 20.05.2002 Die Phönizier haben das Geld erfunden - aber warum so wenig? (Johann Nepomuk Nestroy)
|
erstellt am: 22. Jul. 2005 11:48 <-- editieren / zitieren --> Unities abgeben:          Nur für ToniM
Nur mal ein Vorschlag, Martin: Kannst du bitte den Code mit einem Code-Tag formatieren? Dann wäre das besser lesbar. In deinem letzten Posting gehen Code, Kommentare und Text irgendwie ziemlich durcheinander. "Dim blkSK" ist desinformativ - dann schreib wenigstens "Dim blkSK as Variant" hin, dann weiss man, was man hat. Aber was ist denn da nun drin? Die Zeile "Set blkSK = ThisDrawing.Blocks.Item(BlockName)" ist ja auskommentiert. Aber die Zeile "Set blkSK = ThisDrawing.ModelSpace.InsertBlock(insPnt, BlockName, _ 1#, 1#, 1#, 0)" scheint drin zu sein... Überhaupt, geht es um die Blockdefinition mit Attributsdefinitionen oder um Blockreferenzen mit Attributen? Liest du jetzt ein Insert aus oder einen Block? Und wo kommt die Zahl 16 her? Es war doch die Rede von 40 Attributen!
Gruß, Axel Strube-Zettler ------------------ Meine AutoLisp-Seiten Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ToniM Mitglied Rekrut

 Beiträge: 17 Registriert: 14.07.2005 AutoCAD 2005
|
erstellt am: 22. Jul. 2005 12:31 <-- editieren / zitieren --> Unities abgeben:         
Ich hoffe jetzt ist es klarer, Axel. Ich möchte einen Block aus einer bestehenden Zeichnung einfügen und die Attribute, die darin vorkommen, ausfüllen. So, das ist mein Plan! *g* So sieht mein Code aus (Die arrays sind beschrieben - Platzmangel). Ich hab unten ein Kommentar eingefügt. Wenn ich diese beiden Zeilen weg lasse, erhalte ich einen Fehler. Code: Dim datenTextfeld(), werteTextfeld() Dim blkSKDim insPnt(2) As Double Dim BlockName As String Dim ar As Variant insPnt(0) = 100: insPnt(1) = 0: insPnt(2) = 0 BlockName = CurDir & "\Schriftfeld_Programm.dwg" Set blkSK_exp = ThisDrawing.ModelSpace.InsertBlock(insPnt, _ BlockName, 1#, 1#, 1#, 0) BlockName = "Schriftfeld_Programm" ' Diese und die naechste Zeile Set blkSK = ThisDrawing.Blocks.Item(BlockName) For i = 0 To blkSK.Count - 1 Step 1 Set blkEL = blkSK.Item(i) If StrComp(blkEL.EntityName, "AcDbAttributeDefinition") = 0 Then For k = 0 To 36 If StrComp(blkEL.TagString, datenTextfeld(k)) = 0 Then blkEL.TagString = werteTextfeld(k) blkEL.TextString = werteTextfeld(k) End If Next k End If Next i
Der Block soll zum leichteren Lesen in die Zeichnung eingefügt werden und soll mit errechneten Werten gefüllt sein. Gruß Toni ------------------ Grüße TONI Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin

 Beiträge: 1250 Registriert: 20.05.2002 Die Phönizier haben das Geld erfunden - aber warum so wenig? (Johann Nepomuk Nestroy)
|
erstellt am: 22. Jul. 2005 16:48 <-- editieren / zitieren --> Unities abgeben:          Nur für ToniM
|
ToniM Mitglied Rekrut

 Beiträge: 17 Registriert: 14.07.2005 AutoCAD 2005
|
erstellt am: 25. Jul. 2005 06:31 <-- editieren / zitieren --> Unities abgeben:         
Entschuldige, dass ich mich erst jetzt melde, hab am FR schon Feierabend gemacht! Mein Vorhaben:
- Einen (bestehenden) Block in meine aktuelle Zeichnung einfügen
- Die Attribute in diesen Block möchte ich mit errechneten Werten ausfüllen
Der Code ist nur das Ergebnis meiner "Probiererei". Ich hab keine Ahnung ob ich dazu BLOCK/ATTDEF odgl. brauche! (Ich hab erst vor 2 Wochen mit VBA angefangen) Ich hoffe du weißt nun was ich brauche! *gg* Und ich würde mich freuen, wenn du mir weiterhelfen würdest! Grüße Martin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Moderator Architekt
   
 Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 25. Jul. 2005 22:42 <-- editieren / zitieren --> Unities abgeben:          Nur für ToniM
Hi Toni-Martin, ehm, nur mal auf die Gefahr, dass du's überlesen hast, nach allem was du nun noch geschrieben hast, und auf Axel's Nachhaken hin - kommste mit meinem 'stuff' nicht ein stück weiter?;-) Gruss Nancy -- "Karen has her own i, and she is not going to let Frank put his data into it." (F. D. Boswell) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ToniM Mitglied Rekrut

 Beiträge: 17 Registriert: 14.07.2005 AutoCAD 2005
|
erstellt am: 26. Jul. 2005 07:01 <-- editieren / zitieren --> Unities abgeben:         
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |