| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | | | PNY bietet das umfangreichste Ökosystem von B2B als auch B2C-Lösungen für IT-Akteure auf dem Markt, eine Pressemitteilung
|
Autor
|
Thema: alle Blöcke (und deren Werte) einer Zeichnung in Datei auslesen (7686 mal gelesen)
|
kiltswitch Mitglied
Beiträge: 189 Registriert: 27.10.2004 Windows 98 (Version 4.10.1998) AutoCAD 2000i
|
erstellt am: 22. Nov. 2004 12:09 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe eine Frage: wie kann ich mit VBA alle Blöcke einer Zeichnung in eine Datei auslesen? Wichtig sind mir dabei die Koordinaten der Referenz-(Basis-)Punkte von den Blöcken, ihre Drehwinkel sowie ihr Name. Denn mit denen will ich weiterarbeiten. Die Darstellung der Daten soll tabellarisch sein -gibts Alternativen zu Excel?. Ich habe hier schon ein bißchen in anderen Threads rumgeschaut, aber noch nicht das richtig passende gefunden. Hat irgendwer einen Tipp oder sogar einen Code? Thanx Tobias Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kiltswitch Mitglied
Beiträge: 189 Registriert: 27.10.2004 Windows 98 (Version 4.10.1998) AutoCAD 2000i
|
erstellt am: 22. Nov. 2004 13:12 <-- editieren / zitieren --> Unities abgeben:
Also ideal wäre eine Datei, die in VBA integriert ist, somit man nicht auf externe Programme wie Excel zurückgreifen muß (wenn es jedoch nicht anders gehen sollte, dann wäre das doch eine Variante). Die Daten sollen tabellarisch aufgelistet werden: Blockname, X-Koordinate, Y-Koordinate, Z-Koordinate, Drehwinkel Und ganz wichtig: ich muß diese Daten weiterverarbeiten können. ----- Ich habe einen Code (auch mal hier bekommen), bei dem die Blockattribute in eine Textdatei exportiert werden. Aber die Werte werden ungeordnet dargestellt - auch wenn ich als Ausgabedatei eine Excel-Datei wähle. ----- Tobias Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kiltswitch Mitglied
Beiträge: 189 Registriert: 27.10.2004 Windows 98 (Version 4.10.1998) AutoCAD 2000i
|
erstellt am: 22. Nov. 2004 14:19 <-- editieren / zitieren --> Unities abgeben:
Also so sieht mein Code derzeit aus. Was mir noch nicht gefällt, ist, dass er mir die Koordinaten der Blöcke mit etlichen Stellen ausliest. Kann ich da irgendwas dran deichseln, dass der mir z.B. nur zwei Nachkommastellen einträgt? Sub ReadBlockProperties()
Dim AcMapEntity As AcadEntity Dim AcMapBlock As AcadBlockReference Dim fso As FileSystemObject Set fso = New FileSystemObject Dim TxtFile As TextStream Set TxtFile = fso.OpenTextFile("v:\ausgabe.xls", ForWriting, True) For Each AcMapEntity In ThisDrawing.ModelSpace If AcMapEntity.ObjectName = "AcDbBlockReference" Then Set AcMapBlock = AcMapEntity TxtFile.WriteLine AcMapBlock.Name & _ vbTab & AcMapBlock.InsertionPoint(0) & _ vbTab & AcMapBlock.InsertionPoint(1) & _ vbTab & AcMapBlock.InsertionPoint(2) & _ vbTab & AcMapBlock.Rotation & vbCr End If Next TxtFile.Close Set TxtFile = Nothing Set fso = Nothing Set AcMapEntity = Nothing Set AcMapBlock = Nothing End Sub Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9803 Registriert: 01.12.2003 AutoCAD 2.5 - 2022, LDD, MDT, RD, ADT, Civil Inventor AIP 4-11, 2008 -2022 Win 10
|
erstellt am: 22. Nov. 2004 14:20 <-- editieren / zitieren --> Unities abgeben: Nur für kiltswitch
Auf die erste Frage war mein Tippp, lies dir die VBA Beispiele im Samples\VBA Ordner von AutoCAD mal durch (speziell BlockReplace.dvb oder attext.dvb). Natürlich geht auch ein simples ATTEXT oder EATTEXT evt. in Verbindung mit SendCommand. Zur 2. Frage eine Gegenfrage Wonach sollen die Werte den sortiert werden, Namen, aufsteigende Werte der X oder Y-Koordinate? Da gibt es so viele Möglichkeiten, das muss man eben selbst wie gewünscht programmieren. Es gibt ja fertige Sortieralgoritmmen in VBA. Mit freundlichem Gruß Udo Hübner ------------------ Das Siddharta Prinzip: Mit zwei Schritten kann man keinen Fluß überqueren. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kiltswitch Mitglied
Beiträge: 189 Registriert: 27.10.2004 Windows 98 (Version 4.10.1998) AutoCAD 2000i
|
erstellt am: 22. Nov. 2004 14:50 <-- editieren / zitieren --> Unities abgeben:
Zunächst Danke für Deine Antwort. Den Tipp, mal den Ordner Samples zu durchstöbern, werde ich gern annehmen. Mit ungeordnet meinte ich nur, dass die Werte nicht separat in eigene Spalten abgelegt worden, sondern hintereinanderweg da standen. Aber das Problem habe ich lösen können. Es sollen wie schon erwähnt alle Blöcke/Blockreferenzen der aktuellen Zeichnung in eine Datei ausgelesen werden. Dabei ist der Blockname, die Koordinaten seines Basispunktes sowie sein Drehwinkel von Interesse. Mein Code tut das ja auch, nur gibt es noch einige Fehler: 1. Er stellt mir einige Koordinaten unverständlicherweise in einem Vielfachen des eigentlichen Wertes dar (also z.B. statt 1500 --> 150.000.000.000.000 !!!) 2. Den Wert der Drehung übernimmt er auch nicht richtig aus CAD - bei manchen Blöcken steht ein Wert da (aber falsch), bei anderen gar nichts, obwohl der Block in CAD gedreht ist usw.!!! Woran könnte das denn liegen? Tobias Zitat: Original erstellt von CAD-Huebner: Auf die erste Frage war mein Tippp, lies dir die VBA Beispiele im Samples\VBA Ordner von AutoCAD mal durch (speziell BlockReplace.dvb oder attext.dvb). Natürlich geht auch ein simples ATTEXT oder EATTEXT evt. in Verbindung mit SendCommand. Zur 2. Frage eine Gegenfrage Wonach sollen die Werte den sortiert werden, Namen, aufsteigende Werte der X oder Y-Koordinate? Da gibt es so viele Möglichkeiten, das muss man eben selbst wie gewünscht programmieren. Es gibt ja fertige Sortieralgoritmmen in VBA.Mit freundlichem Gruß Udo Hübner
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kiltswitch Mitglied
Beiträge: 189 Registriert: 27.10.2004 Windows 98 (Version 4.10.1998) AutoCAD 2000i
|
erstellt am: 22. Nov. 2004 16:37 <-- editieren / zitieren --> Unities abgeben:
Hat irgendwer eine Idee, woran es liegen kann, dass die Koordinatenwerte so groß sind? Könnten das durch Rundungsfehler sein? Und was könnte der Grund sein, warum manche Drehwinkel-Werte nicht (korrekt) in die Datei übernommen werden? Bspw. hat ein Block in der Zeichnung die Verdrehung 90°, aber in der Excel-Datei steht der Wert 0 ?! Und meine letzte Frage, die habe ich vorhin schon einmal gestellt: kann ich mit VBA auch eine interne Datei - also keine eines externen Programmes wie Excel - erstellen, welche mir die Daten tabellarisch darstellt und die weiterverarbeitbar ist (z.B. zurücklesen der Daten)? Ich bin über jeden Tipp dankbar. Danke Tobias Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RoSiNiNo Mitglied Konstrukteur
Beiträge: 1126 Registriert: 09.10.2002 Acad 2011-deutsch, Express Tools 3ds Max 2010 Win 7-Professional HP Workstation Z400, 6GB GeForce GTX 470
|
erstellt am: 22. Nov. 2004 16:39 <-- editieren / zitieren --> Unities abgeben: Nur für kiltswitch
Es ist irgendwie sehr interessant wie du eine Excelldatei öffnest und auch hineinschreibst. Steht etwas anders in der ACAD-Hilfe, sieh einmal das Beispiel dort an. Der Winkel ist in Radian, vielleicht stört dich das etwas. Die Anzahl der Nachkommastellen kannst du ja in Excell auch noch einstellen, ist nicht unbedingt notwendig das schon in Acad zu erledigen, wenn du das aber möchtest gibt es da mehrere Möglichkeiten: 1. Round 2. Format Beschreibung steht in der Hilfe. ------------------ Roland Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RoSiNiNo Mitglied Konstrukteur
Beiträge: 1126 Registriert: 09.10.2002 Acad 2011-deutsch, Express Tools 3ds Max 2010 Win 7-Professional HP Workstation Z400, 6GB GeForce GTX 470
|
erstellt am: 22. Nov. 2004 16:45 <-- editieren / zitieren --> Unities abgeben: Nur für kiltswitch
|
kiltswitch Mitglied
Beiträge: 189 Registriert: 27.10.2004 Windows 98 (Version 4.10.1998) AutoCAD 2000i
|
erstellt am: 22. Nov. 2004 16:55 <-- editieren / zitieren --> Unities abgeben:
Die Kommawerte habe ich gar nicht beachtet, sondern lasse die Werte - ohne Einflüsse durch mich - einfach nach Excel übertragen. Der Tipp mit Round war gut, die Koordinaten stimmen jetzt. Nur bei dem Drehwinkel bin ich noch nicht im klaren, ob er stimmt. Ich vermute, der Wert in Excel (z.B. steht da 4,71) ist das umgerechnete Bogenmaß. Ich muß das mal zurückrechnen. Mich wundert nur, dass z.B. bei einer Angabe von 10° in der Zeichnung kein Wert in Excel eingetragen wird, da müßte doch wenigstens IRGENDWAS stehen? Und nicht bloß "0"?? Mmh... Zitat: Original erstellt von RoSiNiNo: Hast du die Komma richtig dargestellt, in Excell ist es wichtig die Werte mit dem richtigen Kommazeichen einzufügen, also Komma oder Punkt beachten!
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. Nov. 2004 23:12 <-- editieren / zitieren --> Unities abgeben: Nur für kiltswitch
|
kiltswitch Mitglied
Beiträge: 189 Registriert: 27.10.2004 Windows 98 (Version 4.10.1998) AutoCAD 2000i
|
erstellt am: 23. Nov. 2004 08:44 <-- editieren / zitieren --> Unities abgeben:
Also hat es wie von mir schon vermutet mit dem Bogenmaß zu tun und Excel hat damit Probleme? Wie kann man denn dieses Problem lösen? Wie bekomme ich es hin, dass mir Excel die Werte richtig darstellt, am besten in Grad wie in der CAD-Zeichnung? Gibt es zu Excel eine Alternative? Mein Vorgesetzter meinte, in VBA direkt gäbe es evtl. auch die Möglichkeit, eine Datei zu schreiben - man bräuchte dann evtl. nicht Excel als externes Programm. Stimmt das und wenn ja, was für ein Dateityp wäre das dann und wie kann ich die Datei anlegen? Kann ich die Daten sortieren lassen, z.B. nach dem Blocknamen? Und wie kann ich am Anfang der Tabelle einen Spaltenkopf integrieren? Noch zu dem Thema Trennzeichen: also mit Round konnte ich die Werte runden, z.B. zwei Stellen nach dem Komma. Er stellt mir die Koordinaten nun korrekt dar. Nur das mit dem Drehwinkel funktioniert noch nicht. Zitat: Original erstellt von mapcar: Alle Winkel kleiner als ca. 57° sind kleiner als 1, wenn sie in Rad dargestellt werden. Liegt da ein Trennzeichen-Konflikt vor, werden alle Winkel kleiner als diese 57° als 0 in Excel dargestellt (bis 114° ist es dann 1 usw.)Excel/MSOffice liest das verwendete Trennzeichen aus den Windows-Ländereinstellungen aus, AutoCAD verwendet immer den Punkt (ausser bei Bemaßungstexten, wenn das eingestellt ist). Verwirrend aber, dass VBA bei der Eingabe von float/double-Literalen plötzlich auch den Punkt als Trennzeichen verlangt. Gruß, Axel Strube-Zettler
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Ehrenmitglied V.I.P. h.c. CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 ACAD20XX, defun-tools
|
erstellt am: 23. Nov. 2004 09:01 <-- editieren / zitieren --> Unities abgeben: Nur für kiltswitch
Zitat: Original erstellt von kiltswitch: Also hat es wie von mir schon vermutet mit dem Bogenmaß zu tun und Excel hat damit Probleme? Wie kann man denn dieses Problem lösen?Wie bekomme ich es hin, dass mir Excel die Werte richtig darstellt, am besten in Grad wie in der CAD-Zeichnung?
erstellt von Brischke am: 04. Nov. 2004 10:13 in diesem Thread Zitat: Original erstellt von kiltswitch: Gibt es zu Excel eine Alternative? Mein Vorgesetzter meinte, in VBA direkt gäbe es evtl. auch die Möglichkeit, eine Datei zu schreiben - man bräuchte dann evtl. nicht Excel als externes Programm. Stimmt das und wenn ja, was für ein Dateityp wäre das dann und wie kann ich die Datei anlegen?
Dem VBA-Programm ist es vollkommen egal, was für eine Datei es schreibt, diese muss nur in der entsprechenden Syntax des Zielprogrammes geschrieben sein. Der Weg, die Daten jedoch direkt in eine Excel-Datei zu schreiben ist doch recht praktisch, gerade im Hinblick auf ... Zitat: Original erstellt von kiltswitch: Kann ich die Daten sortieren lassen, z.B. nach dem Blocknamen? Und wie kann ich am Anfang der Tabelle einen Spaltenkopf integrieren?
... klingt doch verdammt nach Excel Zitat: Original erstellt von kiltswitch: Noch zu dem Thema Trennzeichen: also mit [b]Round konnte ich die Werte runden, z.B. zwei Stellen nach dem Komma. Er stellt mir die Koordinaten nun korrekt dar. Nur das mit dem Drehwinkel funktioniert noch nicht.[/B]
... siehe oben Grüße Holger ------------------ Holger Brischke (defun - Lisp over night! AutoLISP-Programmierung für AutoCAD Da weiß man, wann man's hat! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 ACAD 2008 Mechanical
|
erstellt am: 23. Nov. 2004 09:09 <-- editieren / zitieren --> Unities abgeben: Nur für kiltswitch
Also hat es wie von mir schon vermutet mit dem Bogenmaß zu tun und Excel hat damit Probleme? Wie kann man denn dieses Problem lösen?Sag mal ist das jetzt ver***, oder hast du in Mathe echt nicht aufgepasst? Winkel in Grad = Winkel in Bogenmaß * 180 / Pi Gibt es zu Excel eine Alternative? Mein Vorgesetzter meinte, in VBA direkt gäbe es evtl. auch die Möglichkeit, eine Datei zu schreiben - man bräuchte dann evtl. nicht Excel als externes Programm. Stimmt das und wenn ja, was für ein Dateityp wäre das dann und wie kann ich die Datei anlegen
Auch 'ne ver*** ? <dream> .. du kannst mit VBA / Lisp / Delphi Text, Bild , Access, html und was weiß ich für Dateien erstellen, du mußt bloß die genaue Dateispezifikation(= Aufbau kennen). Wenn die diese kennst,öffnest du einfach mit einer OS-Funktion (evtl. in VBA/Lisp usw. integriert) eine Datei und schreibst die Zeichen in der Reihenfolge rein, das sie das spätere Progamm lesen kann. So einfach. Ich vermute bloß, das du das Dateiformat nicht kennst! Deshalb nimm Excel , oder ne Textdatei, da kannste am wenigsten falsch machen. Sag das deinem Chef! ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kiltswitch Mitglied
Beiträge: 189 Registriert: 27.10.2004 Windows 98 (Version 4.10.1998) AutoCAD 2000i
|
erstellt am: 23. Nov. 2004 09:15 <-- editieren / zitieren --> Unities abgeben:
Hallo Holger, danke für Deinen Beitrag hier. Nun, die Umrechnung von DEG in RAD ist mir ja bekannt (hast Du mir ja damals gesagt), aber das eigentliche Problem ist: wenn ich das im Code anwende, funktioniert es nicht! Hier mal mein Code, vielleicht findest Du einen Fehler. Oder hast Du eine bessere Idee bezüglich des Codes? Sub ReadBlockProperties() Dim AcMapEntity As AcadEntity Dim AcMapBlock As AcadBlockReference Dim fso As FileSystemObject Set fso = New FileSystemObject Dim TxtFile As TextStream Set TxtFile = fso.OpenTextFile("v:\Praxis_Konstruktionsabteilung\Blockauslesung\ausgabe.xls", ForWriting, True) TxtFile.WriteLine ("Blockname") & _ vbTab & ("Block-ID") & _ vbTab & ("X-Koordinate") & _ vbTab & ("Y-Koordinate") & _ vbTab & ("Z-Koordinate") & _ vbTab & ("Drehwinkel") & vbCr For Each AcMapEntity In ThisDrawing.ModelSpace If AcMapEntity.ObjectName = "AcDbBlockReference" Then Set AcMapBlock = AcMapEntity TxtFile.WriteLine AcMapBlock.Name & _ vbTab & AcMapBlock.ObjectID & _ vbTab & Round(AcMapBlock.InsertionPoint(0), 2) & _ vbTab & Round(AcMapBlock.InsertionPoint(1), 2) & _ vbTab & Round(AcMapBlock.InsertionPoint(2), 2) & _ vbTab & Round((AcMapBlock.Rotation*180/Pi), 2) & vbCr End If Next TxtFile.Close Set TxtFile = Nothing Set fso = Nothing Set AcMapEntity = Nothing Set AcMapBlock = Nothing End Sub Wenn ich das mit *180/Pi reinschreibe (wie oben im Code), bringt er mir einen Laufzeitfehler. Habe ich das einen Fehler drin? Das mit dem Sortieren in Excel ist auch klar, aber mir gehts darum, wie ich das mit VBA gleich programmtechnisch machen kann? Gibts da eine Möglichkeit?
Gibt es denn nun ein eigenes Dateiformat in VBA zum tabellarischen Ablegen von ausgelesenen Daten? Tobias Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kiltswitch Mitglied
Beiträge: 189 Registriert: 27.10.2004 Windows 98 (Version 4.10.1998) AutoCAD 2000i
|
erstellt am: 23. Nov. 2004 09:21 <-- editieren / zitieren --> Unities abgeben:
Nein, mit Ver*** hat das Ganze nun wahrlich nichts zu tun. Mir ist auch durchaus bekannt, wie man Grad in Bogenmaß umrechnet. Darum gehts mir ja auch nicht, sondern wie der CODE dazu aussieht! Zitat: Original erstellt von CADmium: [b]Also hat es wie von mir schon vermutet mit dem Bogenmaß zu tun und Excel hat damit Probleme? Wie kann man denn dieses Problem lösen?Sag mal ist das jetzt ver***, oder hast du in Mathe echt nicht aufgepasst? Winkel in Grad = Winkel in Bogenmaß * 180 / Pi Gibt es zu Excel eine Alternative? Mein Vorgesetzter meinte, in VBA direkt gäbe es evtl. auch die Möglichkeit, eine Datei zu schreiben - man bräuchte dann evtl. nicht Excel als externes Programm. Stimmt das und wenn ja, was für ein Dateityp wäre das dann und wie kann ich die Datei anlegen
Auch 'ne ver*** ? <dream> .. du kannst mit VBA / Lisp / Delphi Text, Bild , Access, html und was weiß ich für Dateien erstellen, du mußt bloß die genaue Dateispezifikation(= Aufbau kennen). Wenn die diese kennst,öffnest du einfach mit einer OS-Funktion (evtl. in VBA/Lisp usw. integriert) eine Datei und schreibst die Zeichen in der Reihenfolge rein, das sie das spätere Progamm lesen kann. So einfach. Ich vermute bloß, das du das Dateiformat nicht kennst! Deshalb nimm Excel , oder ne Textdatei, da kannste am wenigsten falsch machen. Sag das deinem Chef! [/B]
Na gut, dann wird es wohl bei Excel oder einer Textdatei bleiben. Ich dachte nur, dass es direkt in VBA auch eine Möglichkeit gibt, sich die Daten in tabellarischer Form ausgeben zu lassen. Weil mit diesen Daten in VBA weitergearbeitet werden soll, dann bräuchte man vielleicht kein externes Programm. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 ACAD 2008 Mechanical
|
erstellt am: 23. Nov. 2004 09:38 <-- editieren / zitieren --> Unities abgeben: Nur für kiltswitch
Zitat: Original erstellt von kiltswitch: Na gut, dann wird es wohl bei Excel oder einer Textdatei bleiben. Ich dachte nur, dass es direkt in VBA auch eine Möglichkeit gibt, sich die Daten in tabellarischer Form ausgeben zu lassen. Weil mit diesen Daten in VBA weitergearbeitet werden soll, dann bräuchte man vielleicht kein externes Programm.[/B]
wenn du mit deinem VBA-Programm die Daten in eine Datei schreibst, und später diese Daten mit deinem VBA-Programm wieder einlesen willst, kannst du das Format der Daten doch selbst festlegen. Und VBA ist es total egal, ob die Daten Tabellarisch vorliegen ,oder nicht. Wenn du allerdings mit einem 3.Proggi die Daten Betrachten/ Bearbeiten willst, mußt du natürlich dessen Datenformat nehmen. Ist das so schwer? Ende!
------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Moderator Architekt
Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 23. Nov. 2004 09:40 <-- editieren / zitieren --> Unities abgeben: Nur für kiltswitch
Tobias, VBA kennt kein Pi. Die Zahl wirst Du wohl oder übel erstmal hinterlegen müssen. > Gibt es denn nun ein eigenes Dateiformat in VBA zum tabellarischen Ablegen von ausgelesenen Daten? Nun, am besten Du lässt die Endung gleich ganz weg ... Das ist doch schnurz, es kommt auf's Trennzeichen an, Tab, Kommata, Semikolon, $, |, weissderGeier Momentan schreibst Du eh' nur ein Textfile mit der Endung *.xls, wenn Du diese mit Excel öffnest, hast Du sicher schon bemerkt, dass erst mal der Texterkennungsassi aufgeht und nach dem Spaltenseparator fragt. Öffne mal eine Original xls Datei mit nem Editor und vergleiche sie mal mit der von Dir erstellten, dann solltes klarer werden. Gruss Nancy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kiltswitch Mitglied
Beiträge: 189 Registriert: 27.10.2004 Windows 98 (Version 4.10.1998) AutoCAD 2000i
|
erstellt am: 23. Nov. 2004 09:44 <-- editieren / zitieren --> Unities abgeben:
na ich will die Daten auf jeden Fall betrachten. Also ist wohl Excel dann eine Lösung. Ich dachte aber eben, es gäbe vielleicht direkt in VBA so eine Ausgabemöglichkeit in Tabellenform zum betrachten? Hast Du einen Tipp, warum das bei mir mit dem Drehwinkel der Blöcke nicht funktionieren tut? Erkennst Du einen Fehler im oben dargestellten Code? Zitat: Original erstellt von CADmium: wenn du mit deinem VBA-Programm die Daten in eine Datei schreibst, und später diese Daten mit deinem VBA-Programm wieder einlesen willst, kannst du das Format der Daten doch selbst festlegen. Und VBA ist es total egal, ob die Daten Tabellarisch vorliegen ,oder nicht. Wenn du allerdings mit einem 3.Proggi die Daten Betrachten/ Bearbeiten willst, mußt du natürlich dessen Datenformat nehmen.Ist das so schwer? Ende!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RoSiNiNo Mitglied Konstrukteur
Beiträge: 1126 Registriert: 09.10.2002 Acad 2011-deutsch, Express Tools 3ds Max 2010 Win 7-Professional HP Workstation Z400, 6GB GeForce GTX 470
|
erstellt am: 23. Nov. 2004 09:50 <-- editieren / zitieren --> Unities abgeben: Nur für kiltswitch
Was soll ich nun noch sagen, Axel hat dir eigentlich schon erklärt waran es höschstwarscheinlich liegt. Auch ich habe dir diesen Hinweis schon etwas weiter oben angegeben. Meine erste Antwort hat sich auch schon auf deine Methode eine XLS-Datei zu öffnen bezogen. Darum meine Frage, hast du dir meine oder Axel's Antworten überhaupt angesehen und vielleicht einmal die Hilfe zu Hand genommen? Ich wage zu behaupten, NEIN!!!
------------------ Roland Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kiltswitch Mitglied
Beiträge: 189 Registriert: 27.10.2004 Windows 98 (Version 4.10.1998) AutoCAD 2000i
|
erstellt am: 23. Nov. 2004 09:59 <-- editieren / zitieren --> Unities abgeben:
Natürlich habe ich mir eure Antworten durchgelesen! Und ich weiß auch, was ihr damit meint. Das Einzigste, was ich nicht weiß, ist, wie ich diese Erkenntnisse nun im Code verarbeite??? DAS ist mein Problem. Die Hilfe habe ich auch schon bemüht, aber noch nicht das Brauchbare gefunden.
Zitat: Original erstellt von RoSiNiNo: Was soll ich nun noch sagen, Axel hat dir eigentlich schon erklärt waran es höschstwarscheinlich liegt. Auch ich habe dir diesen Hinweis schon etwas weiter oben angegeben. Meine erste Antwort hat sich auch schon auf deine Methode eine XLS-Datei zu öffnen bezogen. Darum meine Frage, hast du dir meine oder Axel's Antworten überhaupt angesehen und vielleicht einmal die Hilfe zu Hand genommen?Ich wage zu behaupten, NEIN!!!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RoSiNiNo Mitglied Konstrukteur
Beiträge: 1126 Registriert: 09.10.2002 Acad 2011-deutsch, Express Tools 3ds Max 2010 Win 7-Professional HP Workstation Z400, 6GB GeForce GTX 470
|
erstellt am: 23. Nov. 2004 10:05 <-- editieren / zitieren --> Unities abgeben: Nur für kiltswitch
Ich habe jetzt ca. zwei Minuten gebraucht um folgendes in der ACAD-Hilfe zu finden: Auflisten von AutoCAD-Attributen in einer Excel-Tabelle
Dieses Unterprogramm sucht alle Blockreferenzen in der aktuellen Zeichnung. Anschließend sucht es die mit diesen Blockreferenzen verknüpften Attribute und listet sie in einer Excel-Tabelle auf. Gehen Sie zum Ausführen dieses Beispiels wie folgt vor: Öffnen Sie eine Zeichnung, die Blockreferenzen mit Attributen enthält. (Die Musterzeichnung sample/activeX/attrib.dwg enthält solche Blockreferenzen.) Öffnen Sie die VBA-IDE mit dem AutoCAD-Befehl VBAIDE. Wählen Sie in der VBA-IDE mit der Menüoption Extras Verweise das Objektmodell Microsoft Excel 8.0. Kopieren Sie dieses Unterprogramm in ein VBA-Codefenster, und führen Sie es aus. Sub Ch12_Extract() Dim Excel As Excel.Application Dim ExcelSheet As Object Dim ExcelWorkbook As Object Dim RowNum As Integer Dim Header As Boolean Dim elem As AcadEntity Dim Array1 As Variant Dim Count As Integer ' Excel starten. Set Excel = New Excel.Application ' Erstellen einer neuen Arbeitsmappe und Suchen des aktiven Arbeitsblatts. Set ExcelWorkbook = Excel.Workbooks.Add Set ExcelSheet = Excel.ActiveSheet ExcelWorkbook.SaveAs "Attribute.xls" RowNum = 1 Header = False ' Modellbereich durchlaufen, um ' alle Blockreferenzen zu finden. For Each elem In ThisDrawing.ModelSpace With elem ' Gefundene Blockreferenz auf ' Attribute prüfen If StrComp(.EntityName, "AcDbBlockReference", 1) _ = 0 Then If .HasAttributes Then ' Attribute abrufen Array1 = .GetAttributes ' Tagstrings für die Attribute ' in Excel kopieren For Count = LBound(Array1) To UBound(Array1) If Header = False Then If StrComp(Array1(Count).EntityName, _ "AcDbAttribute", 1) = 0 Then ExcelSheet.Cells(RowNum, _ Count + 1).value = _ Array1(Count).TagString End If End If Next Count RowNum = RowNum + 1 For Count = LBound(Array1) To UBound(Array1) ExcelSheet.Cells(RowNum, Count + 1).value _ = Array1(Count).textString Next Count Header = True End If End If End With Next elem Excel.Application.Quit End Sub Also, such lieber noch einmal.
------------------ Roland Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kiltswitch Mitglied
Beiträge: 189 Registriert: 27.10.2004 Windows 98 (Version 4.10.1998) AutoCAD 2000i
|
erstellt am: 23. Nov. 2004 10:20 <-- editieren / zitieren --> Unities abgeben:
Der Code ist ja ganz gut und schön, aber diese Werte will ich doch gar nicht? Ich will keine Blockattribute haben. Sondern wie schon erwähnt: Blockname, ObjectID der Blöcke, Koordinaten des Basispunktes der Blöcke und den Drehwinkel der Blöcke in eine Excel-Tabelle ausgeben. Das klappt ja auch alles, nur stellt er mir die Werte des Drehwinkels auf Grund des Problems RAD <--> DEG nicht richtig dar. Ich habe auch schon die Umrechnung versucht, habe mit Runden gearbeitet - aber es ändert sich einfach nichts. Diesen Beispielcode finde ich nicht in meiner Hilfe? Wo gibts den denn? Was für ein Stichwort hast Du bei der Suche eingegeben? Tobias Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kiltswitch Mitglied
Beiträge: 189 Registriert: 27.10.2004 Windows 98 (Version 4.10.1998) AutoCAD 2000i
|
erstellt am: 23. Nov. 2004 10:57 <-- editieren / zitieren --> Unities abgeben:
Verdammt, ich bekomme es einfach nicht hin, dass die Werte der Drehwinkel der Blöcke mit ihrem korrekten Wert in Excel dargestellt werden. :-( Habe schon in der Hilfe rumgesucht, finde dort aber einfach nichts passendes. Auch im Internet schon rumgestöbert - nix brauchbares gefunden. :-( Kann mir keiner helfen? Oben steht ja mein Code da zum Anschauen, ob ein Fehler drin ist. Tobias Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
harryk Mitglied Projektleiter
Beiträge: 124 Registriert: 19.08.2003
|
erstellt am: 23. Nov. 2004 11:11 <-- editieren / zitieren --> Unities abgeben: Nur für kiltswitch
|
kiltswitch Mitglied
Beiträge: 189 Registriert: 27.10.2004 Windows 98 (Version 4.10.1998) AutoCAD 2000i
|
erstellt am: 23. Nov. 2004 11:21 <-- editieren / zitieren --> Unities abgeben:
Warum denn? Ich habe doch nichts falsches gesagt? Ich habe ein Problem und habe es hier in dem Thread dargestellt, sodaß mir andere evtl. helfen können. Das ist doch das Ziel des Forums? Ich weiß ja schon, wie ihr das mit den Antwort-Beiträgen meint und was das Problem sein könnte. Es geht mir hier doch aber einzig und allein darum, den Code entsprechend ändern zu können, sodaß es funktioniert. Kannst Du mir nochmal sagen, wo Du den Code in der Hilfe gefunden hast? Zitat: Original erstellt von harryk: ohoh, der thread ist gleich auch zu...harry
[Diese Nachricht wurde von kiltswitch am 23. Nov. 2004 editiert.] 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: 23. Nov. 2004 11:31 <-- editieren / zitieren --> Unities abgeben: Nur für kiltswitch
Tobias, du hast alles, was du brauchst. Wie man Einfügepunkt und Drehwinkel ausliest, hast du selber hier gepostet, ebenso, wie man eine Textdatei schreiben kann. Wie man direkt nach Excel überträgt, hat dir Roland aus der Hilfe reinkopiert. Wenn du keine Attributdaten brauchst, ersetze diesen Teil des Codes durch eigenen, der das leistet, was du brauchst. Das Problem mit den Trennzeichen wurde von Roland und mir ausführlich besprochen, und Nancy hat dir mitgeteilt, warum dein Code so nicht läuft. Schau in der VBA-Hilfe unter 'Function' und schreib dir zwei - die eine rechtet Radians in Grad um, die andere umgekehrt. Du wirst sie vielleicht noch öfters brauchen. Und nun noch ein Hinweis: Weder die AutoCAD-Hilfe noch dieses Forum noch das ganze Internet sind eine unendliche Bibliothek im Sinne von Jorge Luis Borges. Findest du in der Acad-Hilfe eine Anleitung zum Zeichnen eines grünen Kreis, wirst du wahrscheinlich keine zum Zeichnen eines roten Kreises finden. Wegen ihre exemplarischen Charakters heissen die Code-Bruchstücke auch 'Beispiele'. Es wird einfach vorausgesetzt, dass der Benutzer genügend Abstraktionsvermögen besitzt, das Beispiel 'grüner Kreis' auch als Grundlage für einen roten Kreis zu verwenden. Wenn es dir aber auf Dauer nicht gelingt, mit VBA-Mitteln eine Zahl durch Pi zu teilen und dann mit 180 zu multiplizieren, dann hast du ein echtes Problem. Es nützt auch gar nichts, wenn du da schon wieder nach Alternativen rufst! Meiner Ansicht ist Access sowie die bessere Alternative, denn Excel ist ja eine Tabellenkalkulation, wo nach dem Motto "Was wäre wenn..." gearbeitet wird. Du hast aber von einer Datenbank gesprochen, und die Datenbank im MSOffice-Paket ist nun mal Access. Aber das ist sowieso egal, denn glaubst du wirklich, dass bei Verwendung von Access irgendetwas von diesen kleinen Problemchen anders wäre? Ich jedenfalls werde mich nicht hinsetzen und deine Fehler suchen bzw. dir deinen Code schreiben. Wie gesagt, die Informationen hast du alle. Gruß, Axel Strube-Zettler ------------------ (defun - Lisp over night - AutoLisp-Programmierung für AutoCad - Da weiß man, wann man's hat 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 |
kiltswitch Mitglied
Beiträge: 189 Registriert: 27.10.2004 Windows 98 (Version 4.10.1998) AutoCAD 2000i
|
erstellt am: 23. Nov. 2004 13:14 <-- editieren / zitieren --> Unities abgeben:
Hallo Mapcar, mal zu Deinem Beitrag. Ich toleriere das, was Du schreibst, aber verstehe doch auch mal mich: ich will nichts weiter wissen als, wie ich das mit dem Drehwinkel hinbekomme. Den Code zum Auslesen habe ich ja da, aber es steckt nun mal ein Fehler drin, das mit RAD und DEG. Ich habe das mit DEG=RAD*180/Pi ja auch schon getestet, aber es klappt einfach nicht, dass die Werte richtig in Excel eingetragen werden. Ich will, dass die Grad-Werte des Drehwinkels vom Block - wie sie in AutoCAD im Eigenschaftenmenü stehen - genauso in Excel stehen. Das mit den Datenbanken ist noch Zukunftsmusik, mein Praktikum geht hier nur noch bis Weihnachten, also 4-5 Wochen, dann bin ich erstmal eine ganze Zeit nicht mehr da. Ich soll jetzt rausbekommen, wie das mit dem Auslesen von den Blöcken geht - mehr erstmal nicht. Tobias Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kiltswitch Mitglied
Beiträge: 189 Registriert: 27.10.2004 Windows 98 (Version 4.10.1998) AutoCAD 2000i
|
erstellt am: 23. Nov. 2004 13:56 <-- editieren / zitieren --> Unities abgeben:
Hier nochmal mein Code, was ist denn daran nur falsch, sodaß die Werte des Drehwinkels falsch übertragen werden...? Sub ReadBlockProperties() Dim AcMapEntity As AcadEntity Dim AcMapBlock As AcadBlockReference Dim fso As FileSystemObject Set fso = New FileSystemObject Dim TxtFile As TextStream Dim Pi As Double Pi = 3.141592654 Set TxtFile = fso.OpenTextFile("v:\Praxis_Konstruktionsabteilung\Blockauslesung\ausgabe.txt", ForWriting, True) TxtFile.WriteLine ("Blockname") & _ vbTab & ("Block-ID") & _ vbTab & ("X-Koordinate") & _ vbTab & ("Y-Koordinate") & _ vbTab & ("Z-Koordinate") & _ vbTab & ("Drehwinkel") & vbCr For Each AcMapEntity In ThisDrawing.ModelSpace If AcMapEntity.ObjectName = "AcDbBlockReference" Then Set AcMapBlock = AcMapEntity TxtFile.WriteLine AcMapBlock.Name & _ vbTab & AcMapBlock.ObjectID & _ vbTab & Round(AcMapBlock.InsertionPoint(0), 2) & _ vbTab & Round(AcMapBlock.InsertionPoint(1), 2) & _ vbTab & Round(AcMapBlock.InsertionPoint(2), 2) & _ vbTab & Round(((AcMapBlock.Rotation) * Pi / 180), 2) & vbCr End If Next TxtFile.Close Set TxtFile = Nothing Set fso = Nothing Set AcMapEntity = Nothing Set AcMapBlock = Nothing End Sub Wie ihr seht, habe ich auch mit Pi und 180 mein Glück probiert.
Tobias Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 ACAD 2008 Mechanical
|
erstellt am: 23. Nov. 2004 13:57 <-- editieren / zitieren --> Unities abgeben: Nur für kiltswitch
|
startrek Moderator Architekt
Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 23. Nov. 2004 14:03 <-- editieren / zitieren --> Unities abgeben: Nur für kiltswitch
Code:
Sub Träume_am_laufenden_Block() Dim elem As AcadEntity Dim rownum As Long, ip As Variant Dim ExcelApp As Excel.Application Dim ExcelWbk As Excel.Workbook Dim ExcelWks As Excel.Worksheet rownum = 2 Set ExcelApp = New Excel.Application Set ExcelWbk = ExcelApp.Workbooks.Add ExcelApp.ActiveWorkbook.SaveAs "D:\Mappe1.xls" Set ExcelWks = ExcelWbk.ActiveSheet With ExcelWks .Cells(1, 1) = "x": .Cells(1, 2) = "y" 'usw For Each elem In ThisDrawing.ModelSpace If TypeOf elem Is IAcadBlockReference Then ip = elem.InsertionPoint .Cells(rownum, 1) = ip(0) .Cells(rownum, 2) = ip(1) .Cells(rownum, 3) = ip(2) .Cells(rownum, 4) = elem.Rotation * 180 / WorksheetFunction.Pi rownum = rownum + 1 End If Next End With ExcelApp.ActiveWorkbook.Close 1 ExcelApp.Quit Set ExcelWks = Nothing Set ExcelWbk = Nothing Set ExcelApp = Nothing End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kiltswitch Mitglied
Beiträge: 189 Registriert: 27.10.2004 Windows 98 (Version 4.10.1998) AutoCAD 2000i
|
erstellt am: 23. Nov. 2004 14:08 <-- editieren / zitieren --> Unities abgeben:
|
kiltswitch Mitglied
Beiträge: 189 Registriert: 27.10.2004 Windows 98 (Version 4.10.1998) AutoCAD 2000i
|
erstellt am: 23. Nov. 2004 14:22 <-- editieren / zitieren --> Unities abgeben:
|
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: 23. Nov. 2004 14:22 <-- editieren / zitieren --> Unities abgeben: Nur für kiltswitch
@kiltswitch: Du hast ein erstaunliches Talent, die Leute dazu zu kriegen, deine Arbeit zu machen. Und wenn die Arbeit erledigt, ist bist du auch noch nicht zufrieden. Ich habe es zwar nicht ausprobiert, bin mir aber sehr sicher, dass Nancys Code ganz genau das macht, was du wolltest. Nancy benutzt aber die Pi-Konstante aus den Excel-Funtionen. Warum auch nicht, da gibt es ja eine Pi-Definition. Die gibt es aber nicht, wenn du in ein Textfile schreibst. In diesem Falle musst du Pi selber definieren. Allerdings ist der Vorschlag von Cadmium etwas schwach: Wenn schon, dann muss man Pi mit doppelter Fließkomma-Genauigkeit (Datentyp Double) definieren, in diesem Fall also am besten mit 16 Kommastellen. Gruß, Axel Strube-Zettler ------------------ (defun - Lisp over night - AutoLisp-Programmierung für AutoCad - Da weiß man, wann man's hat 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 |
kiltswitch Mitglied
Beiträge: 189 Registriert: 27.10.2004 Windows 98 (Version 4.10.1998) AutoCAD 2000i
|
erstellt am: 23. Nov. 2004 14:29 <-- editieren / zitieren --> Unities abgeben:
@mapcar: Das ist nun wirklich nicht mein Vorwand, andere Leute dazu zu zwingen, meine Arbeit zu machen!!! Wenn ich es nun mal nicht hinbekomme - rumprobiere, abändere und es trotzdem noch nicht geht - dann muß ich doch nun mal auf Hilfe anderer Leute hoffen? Der Code von Nancy funktioniert leider nicht so richtig. Wie gerade schon beschrieben, hängt sich bei mir immer die Excel-Datei auf, wenn ich sie öffnen will. Pi habe ich in meinem Code als Datentyp Double deklariert. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Moderator Architekt
Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 23. Nov. 2004 14:36 <-- editieren / zitieren --> Unities abgeben: Nur für kiltswitch
tja, dumm gelaufen ;-) versuchs mal mit Excelapp vor Worksheetfunction
Code:
.Cells(rownum, 4) = elem.Rotation * 180 / ExcelApp.WorksheetFunction.Pi
ansonsten bin ich für meinen Teil planlos. Nancy
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kiltswitch Mitglied
Beiträge: 189 Registriert: 27.10.2004 Windows 98 (Version 4.10.1998) AutoCAD 2000i
|
erstellt am: 23. Nov. 2004 14:39 <-- editieren / zitieren --> Unities abgeben:
Also Nancy ihr Code funktioniert, wenn ich das mit der Pi-Funktion von Excel (WorksheetFunction.Pi) herausnehme und dafür die Variable Pi einsetze, die ich vorher mit dem Datentyp Double deklariert habe. ABER: Es passiert genau das Gleiche wie bei meinem Code, die Werte des Drehwinkels sind in der Exceldatei einfach falsch. Mich wundert, dass es 5 Blöcke gibt, da steht ein Wert drin, der wie bei den anderen Blöcken nicht dem Wert "0" entspricht. Mmh.... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Ehrenmitglied V.I.P. h.c. CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 ACAD20XX, defun-tools
|
erstellt am: 23. Nov. 2004 14:41 <-- editieren / zitieren --> Unities abgeben: Nur für kiltswitch
Zitat: Original erstellt von kiltswitch: Wenn ich es nun mal nicht hinbekomme - rumprobiere, abändere und es trotzdem noch nicht geht - dann muß ich doch nun mal auf Hilfe anderer Leute hoffen?...
Falsch! Das ist die vollkommen verkehrte Herangehensweise. Du fummelst irgendwas, irgendwie, ziellos in dem zufällig gefundenen VBA-Editor rum. Der zufall entscheidet allein darüber, ob du nun ein paar lauffähige Zeilen damit erzeugt hast, oder auch nicht. Tobias, du solltest aufhören dein Halbwissen mit Fachwissen (der Antwortenden) zu vermengen. Bring dich erst einmal auf einen Stand, der dich befähigt die Antworten nicht nur lautgetreu, sondern auch verstehend zu lesen. Grundlagen können in einem Forum nicht vermittelt werden, denn gerade hier ist es erforderlich, dass das Grundwissen und Fachvokabular sitzt, denn sonst sind alle Mühen vergebens. Und genau an diesem Punkt sind wir hier. Alle deine Beiträge haben ein Vielfaches an der sonst eher geringen Zahl an Antworten hervorgebracht. Hast du eine Ahnung warum? Holger ------------------ Holger Brischke (defun - Lisp over night! AutoLISP-Programmierung für AutoCAD Da weiß man, wann man's hat! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 ACAD 2008 Mechanical
|
erstellt am: 23. Nov. 2004 14:42 <-- editieren / zitieren --> Unities abgeben: Nur für kiltswitch
Offtopic : @kiltswitch : Übrigens : Glückwunsch zum (über) 100. Post zum gleichen Thema!! Rekordverdächtig! SCNR ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kiltswitch Mitglied
Beiträge: 189 Registriert: 27.10.2004 Windows 98 (Version 4.10.1998) AutoCAD 2000i
|
erstellt am: 23. Nov. 2004 14:43 <-- editieren / zitieren --> Unities abgeben:
Nein, es funktioniert auch so nicht - genau das Gleiche: er legt die Datei an, aber ich kann sie nicht öffnen. Bzw. genauer: er will sie öffnen, aber Excel hängt sich auf. Zitat: Original erstellt von startrek: tja, dumm gelaufen ;-)versuchs mal mit Excelapp vor Worksheetfunction
Code:
.Cells(rownum, 4) = elem.Rotation * 180 / [b]ExcelApp.WorksheetFunction.Pi
ansonsten bin ich für meinen Teil planlos. Nancy[/B]
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kiltswitch Mitglied
Beiträge: 189 Registriert: 27.10.2004 Windows 98 (Version 4.10.1998) AutoCAD 2000i
|
erstellt am: 23. Nov. 2004 14:46 <-- editieren / zitieren --> Unities abgeben:
Weil man hier so fürsorgend ist und auch noch hoffnungslosen Fällen wie mir hilft... :-) Also der Code von Nancy und mein Code unterscheiden sich in keinster Weise beim Ergebnis. :-( Es tritt wieder das gleiche Problem wie immer auf: die Werte des Drehwinkels stimmen nicht. @Nancy: Trotzdem Danke für Deinen Code! Zitat: Original erstellt von Brischke: [b]Falsch! Das ist die vollkommen verkehrte Herangehensweise. Du fummelst irgendwas, irgendwie, ziellos in dem zufällig gefundenen VBA-Editor rum. Der zufall entscheidet allein darüber, ob du nun ein paar lauffähige Zeilen damit erzeugt hast, oder auch nicht.Tobias, du solltest aufhören dein Halbwissen mit Fachwissen (der Antwortenden) zu vermengen. Bring dich erst einmal auf einen Stand, der dich befähigt die Antworten nicht nur lautgetreu, sondern auch verstehend zu lesen. Grundlagen können in einem Forum nicht vermittelt werden, denn gerade hier ist es erforderlich, dass das Grundwissen und Fachvokabular sitzt, denn sonst sind alle Mühen vergebens. Und genau an diesem Punkt sind wir hier. Alle deine Beiträge haben ein Vielfaches an der sonst eher geringen Zahl an Antworten hervorgebracht. Hast du eine Ahnung warum? Holger [/B]
[Diese Nachricht wurde von kiltswitch am 23. Nov. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kiltswitch Mitglied
Beiträge: 189 Registriert: 27.10.2004 Windows 98 (Version 4.10.1998) AutoCAD 2000i
|
erstellt am: 23. Nov. 2004 15:02 <-- editieren / zitieren --> Unities abgeben:
Oh, danke! Nun, das Thema ist ja nun sehr komplex und es gibt viele viele Fragen und Teilprobleme: Datenbanken, automatisches Mastzusammensetzen, Blockauslesen, Konzeptbildung.... Da können schon schnell über 100 Beiträge zusammenkommen. Zitat: Original erstellt von CADmium: Offtopic : @kiltswitch : Übrigens : Glückwunsch zum (über) 100. Post zum gleichen Thema!! Rekordverdächtig! [b]SCNR [/B]
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kiltswitch Mitglied
Beiträge: 189 Registriert: 27.10.2004 Windows 98 (Version 4.10.1998) AutoCAD 2000i
|
erstellt am: 23. Nov. 2004 15:31 <-- editieren / zitieren --> Unities abgeben:
Also hier nochmal mein Code. Ich habe jetzt auch schon Bücher vor mir liegen und wälze darin rum, ob ich irgendwas zu dem Problem mit dem Drehwinkel finde - leider bisher ohne Erfolg. Mir ist es langsam unerklärlich, wieso das nicht richtig an die Datei übertragen wird. Es muß doch eine Lösung geben... :-( Sub ReadBlockProperties() Dim AcMapEntity As AcadEntity Dim AcMapBlock As AcadBlockReference Dim Pi As Double Dim fso As FileSystemObject Set fso = New FileSystemObject Pi = 3.141592654 Dim TxtFile As TextStream Set TxtFile = fso.OpenTextFile("v:\Praxis_Konstruktionsabteilung\Blockauslesung\Datei 1-Blockauslesung.xls", ForWriting, True) TxtFile.WriteLine ("Blockname") & _ vbTab & ("Block-ID") & _ vbTab & ("X-Koordinate") & _ vbTab & ("Y-Koordinate") & _ vbTab & ("Z-Koordinate") & _ vbTab & ("Drehwinkel") & vbCr For Each AcMapEntity In ThisDrawing.ModelSpace If AcMapEntity.ObjectName = "AcDbBlockReference" Then Set AcMapBlock = AcMapEntity TxtFile.WriteLine AcMapBlock.Name & _ vbTab & AcMapBlock.ObjectID & _ vbTab & Round(AcMapBlock.InsertionPoint(0), 2) & _ vbTab & Round(AcMapBlock.InsertionPoint(1), 2) & _ vbTab & Round(AcMapBlock.InsertionPoint(2), 2) & _ vbTab & Round((AcMapBlock.Rotation * 180 / Pi), 2) End If Next TxtFile.Close Set TxtFile = Nothing Set fso = Nothing Set AcMapEntity = Nothing Set AcMapBlock = Nothing End Sub Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Moderator Architekt
Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 23. Nov. 2004 16:45 <-- editieren / zitieren --> Unities abgeben: Nur für kiltswitch
Dein 'Winkelproblem' kann ich nicht nachvollziehen, ebensowenig wie das was Du da zusammencodest. Prüfe mal die Werte im Direktfenster / Lokalfenster [elem] Die kannst Du ja ggf. via copypaste in Excel einfügen und dann Daten/Text in Spalten ... Code:
Sub x() Const Pi# = 3.14159265358979 Dim elem As AcadEntity, ip For Each elem In ThisDrawing.ModelSpace If TypeOf elem Is IAcadBlockReference Then ip = elem.InsertionPoint Debug.Print ip(0), ip(1), ip(2), elem.Rotation * 180 / Pi End If Next End Sub
und versuche bitte bitte auch mal, das eine oder andere was hier gepostet wurde zu beherzigen. Mehr kann und will ich auch nicht dazu sagen. Nancy [Diese Nachricht wurde von startrek am 23. Nov. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kiltswitch Mitglied
Beiträge: 189 Registriert: 27.10.2004 Windows 98 (Version 4.10.1998) AutoCAD 2000i
|
erstellt am: 23. Nov. 2004 16:55 <-- editieren / zitieren --> Unities abgeben:
Danke für den Tipp. Aber wieso denkt ihr denn alle, ich würde eure Tipps nicht beherzigen?Dein Code von vorhin habe ich z.B. auch ausprobiert - ich habe ALLES getestet und jeden Tipp angenommen. Nur habe ich eben damti noch nicht das Problem lösen können. Tschüs Tobias Zitat: Original erstellt von startrek: und versuche bitte bitte auch mal, das eine oder andere was hier gepostet wurde zu beherzigen. Mehr kann und will ich auch nicht dazu sagen.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: 23. Nov. 2004 21:25 <-- editieren / zitieren --> Unities abgeben: Nur für kiltswitch
|
kiltswitch Mitglied
Beiträge: 189 Registriert: 27.10.2004 Windows 98 (Version 4.10.1998) AutoCAD 2000i
|
erstellt am: 24. Nov. 2004 08:04 <-- editieren / zitieren --> Unities abgeben:
Hallo Mapcar, in Ordnung, ich werde mich daran halten. Tobias Zitat: Original erstellt von mapcar: Tobias, bitte versuch mal, nur das zu zitieren, worauf du dich beziehst. Ich habe deinen letzten Beitrag dahingehend geändert (wie schon ein paarmal). Wiederholungen gibt es schon genug, und wenn Codepassagen dann auch immer noch in Zitaten wiederholt werden, wird das alles sehr schwer lesbar.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kiltswitch Mitglied
Beiträge: 189 Registriert: 27.10.2004 Windows 98 (Version 4.10.1998) AutoCAD 2000i
|
erstellt am: 24. Nov. 2004 08:43 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen Nancy, also ich habe jetzt mal Deinen Ratschlag befolgt und mit Deinem oben angegebenen Code die Werte im Direktfenster / Lokalfenster überprüft. Bei allen Blöcken (AcadBlockReference) stimmen die Werte der Rotation im Lokalfenster mit denen in der Exceltabelle überein. Das heißt ja dann wohl, die Werte werden richtig an Excel übertragen, oder...? Copy/Paste bringt mir nichts. Ich könnte zwar die Werte so in die Excel-Tabelle eintragen, aber das will ich ja nicht. Die Werte sollen automatisch in die Tabelle eingefügt werden, was ja auch klappt. Nur eines verstehe ich nicht: Woher die Werte der Rotation im Lokalfenster kommen. Dass es Bogenmaß ist, ist wohl klar, aber wenn ich das z.B. in Grad umrechne (*180/Pi), dann stimmen die Zahlen einfach nicht mit den Werten überein, die man im Eigenschaftenfenster von AutoCAD lesen kann? Habe ich hier einen Denkfehler drin? Weißt Du, was ich meine? Z.B. steht bei einem Block im Eigenschaftenmenü von AutoCAD eine Drehung von 170°, aber im Lokalfenster und Excel steht 4,8869. Rechne ich die 4,8869 in Grad um, so komme ich auf 280°?! Das ist das, was ich nicht kapiere? Ich habe mal einen neuen Block eingefügt und ein bißchen mit seinen Drehwinkelwerten experimentiert: bei 90° im Eigenschaftenmenü ---> 0 (= 0°) in Excel bei 100° -"- ---> 6,10865238 (= 350°) in Excel bei 0° -"- ---> 1,57079633 (= 90°) in Excel Kann man über eine Formel diese Unterschiede irgendwie ermitteln? Mir wäre es nämlich am liebsten, wenn in der Exceltabelle (auch) die Werte des Eigenschaftenmenüs stehen. Könnte es auch einen Zusammenhang zur Richtungssteuerung in AutoCAD (Menü: Format --> Einheiten) geben? Vielleicht hast Du oder jemand anderes einen Tipp für mich, warum dieser Unterschied auftritt. Tobias Zitat: Original erstellt von startrek: Dein 'Winkelproblem' kann ich nicht nachvollziehen, ebensowenig wie das was Du da zusammencodest. Prüfe mal die Werte im Direktfenster / Lokalfenster [elem] Die kannst Du ja ggf. via copypaste in Excel einfügen und dann Daten/Text in Spalten ...Nancy
[Diese Nachricht wurde von kiltswitch am 24. Nov. 2004 editiert.] [Diese Nachricht wurde von kiltswitch am 24. Nov. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Moderator Architekt
Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 24. Nov. 2004 09:31 <-- editieren / zitieren --> Unities abgeben: Nur für kiltswitch
Moin Tobias, nen Tip hab ich nicht auf die Schnelle, ausser geh' mal die Sub im Einzelschritt mit F8 durch. Im Lokalfenster schaust Du mal, sobald elem belegt wurde, was da unter Rotation steht und vergleichst mal mit den Werten im Direktfenster. Sorry, bin etwas in Eile, siehe Pic. Gruss Nancy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kiltswitch Mitglied
Beiträge: 189 Registriert: 27.10.2004 Windows 98 (Version 4.10.1998) AutoCAD 2000i
|
erstellt am: 24. Nov. 2004 09:48 <-- editieren / zitieren --> Unities abgeben:
Ok, habe das mal gemacht. Also aus dem Lokalfenster die Bogenmaßwerte werden über die Formel *180/Pi (im Code) in die Gradzahlen umgerechnet, welche dann im Direktfenster stehen. Diese Werte findet man dann auch in der Exceltabelle wieder, denn im Grunde ist diese Tabelle ja nur eine ähnliche Abbildung vom Direktfenster, könnte man so sagen. ABER: Was ich jetzt gerade geprüft habe, darum geht es mir ja jetzt gar nicht so richtig! Sondern ich will herausfinden, warum im AutoCAD-Menü "Eigenschaften" bei den Blöcken völlig andere Drehwinkel stehen. DAS ist das, was mich interessiert und WIE ich an diese Werte über die Werte in Excel herankomme! Ob es eine Umrechnungsmöglichkeit gibt, damit dieselben Werte auch in der Exceltabelle stehen. Was mich auch noch interessiert: kann ich über VBA die Exceltabelle gleich sortieren lassen, z.B. nach dem Blocknamen? Ich will das nicht erst nachträglich in Excel machen. Tobias Zitat: Original erstellt von startrek: Moin Tobias,nen Tip hab ich nicht auf die Schnelle, ausser geh' mal die Sub im Einzelschritt mit F8 durch. Im Lokalfenster schaust Du mal, sobald elem belegt wurde, was da unter Rotation steht und vergleichst mal mit den Werten im Direktfenster. Sorry, bin etwas in Eile, siehe Pic. 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: 24. Nov. 2004 09:55 <-- editieren / zitieren --> Unities abgeben: Nur für kiltswitch
Keine Ahnung, was du da machst. Ich habe diesen Code von Nancy ausprobiert: Code:
Sub x() Const Pi# = 3.14159265358979 Dim elem As AcadEntity, ip For Each elem In ThisDrawing.ModelSpace If TypeOf elem Is IAcadBlockReference Then ip = elem.InsertionPoint Debug.Print ip(0), ip(1), ip(2), elem.Rotation * 180 / Pi End If Next End Sub
Ein Block, sukzessive um 90° gedreht, ergibt dieses Ergebnis im DFenster: Code:
13,2 11,5 0 0 13,2 11,5 0 90,0000000000001 13,2 11,5 0 180 13,2 11,5 0 270
Ich hätte dir auch meine Testzeichnung drangehängt zum Vergleich, aber das ist zwecklos, da du trotz meiner entspr. Bitte du es immer noch nicht für nötig hältst, mal dein Profil auszufüllen. So weiss kein Mensch, mit welcher Acad-Version du arbeitest. Prüf mal deine Systemvariablen ANGBASE und ANGDIR, die sollten auf null stehen. Und setze AUPREC auf den Wert 8, sonst schneidet dein Eigenschaftenfenster alle Nachkommastellen von Winkeln ab. Gruß, Axel Strube-Zettler ------------------ (defun - Lisp over night - AutoLisp-Programmierung für AutoCad - Da weiß man, wann man's hat 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 |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|