Autor
|
Thema: Auslesen von Blockeigenschaften mittels VBA möglich? (12900 mal gelesen)
|
BloodyMess Mitglied Applicationingenieur
Beiträge: 603 Registriert: 06.06.2002 AutoCAD Map 3D 2005 Win XP pro
|
erstellt am: 02. Nov. 2004 13:52 <-- editieren / zitieren --> Unities abgeben:
Hallo kiltswitch,dann kann ich Dir nichts weiter raten, ausser den Code auseinander zu nehmen und zu schauen, ob er in die Schleife reingeht und was da evtl. schief läuft. Der Code nimmt ganz sicher alle Blockreferenzen einer Zeichnung und deren jeweilige Attribute auseinander und speichert diese in der besagten Datei. Keine Blockdefinitionen, sondern Blockreferenzen! Gruß TP ------------------ 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: 02. Nov. 2004 13:29 <-- editieren / zitieren --> Unities abgeben:
Das darf ich leider nicht, da es firmeninterne Dateien sind. Tut mir leid. Sollte ich dies doch machen, fällt das auf, da alle Aktionen mitgeloggt werden.K Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BloodyMess Mitglied Applicationingenieur
Beiträge: 603 Registriert: 06.06.2002 AutoCAD Map 3D 2005 Win XP pro
|
erstellt am: 02. Nov. 2004 13:00 <-- editieren / zitieren --> Unities abgeben:
Hallo kiltswitch,häng eine Datei mit zwei oder drei Blöcken mal an, dann kuck ich mal. Gruß TP ------------------ 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: 02. Nov. 2004 12:56 <-- editieren / zitieren --> Unities abgeben:
Na die bei mir vorhandenen Zeichnungen bestehen alle aus Blöcken. Und ich habe zum Testen Deines Codes in meiner dwg einen einfachen Block angelegt und dachte nun, dass seine Attribute in die Textdatei übertragen werden. Es gibt wohl nicht immer Attribute von Blöcken? Zitat: Original erstellt von BloodyMess: Hallo kiltswitch,>Ich habe vor, dieses Menü in AutoCAD anzulegen, in welchem ich die Blöcke ansprechen und die Attribute ändern kann. Wie wäre es, wenn Du auf den Block zoomst, dann muss der Benutzer nur noch einen Doppelklick auf den Block machen und hat automatisch die Attributbearbeitung offen. Du kannst Dich einmal per Einzelschritt durch den Code bewegen und diese Zeile auf true und false beobachten. 'If AcMapEntity.ObjectName = "AcDbBlockReference" Then' Wird die Schleife aufgerufen, gibt es einen Block. Das muss aber noch nicht heissen, dass dieser auch Attribute hat. Denn nur diese werden in der Textdatei ausgegeben. Es kann auch sein, dass es keinen Block gibt, sondern es sich um ein anderes Element handelt, dann läuft er auch nicht in die Schleife rein. Gruß TP
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BloodyMess Mitglied Applicationingenieur
Beiträge: 603 Registriert: 06.06.2002 AutoCAD Map 3D 2005 Win XP pro
|
erstellt am: 02. Nov. 2004 11:46 <-- editieren / zitieren --> Unities abgeben:
Hallo kiltswitch,>Ich habe vor, dieses Menü in AutoCAD anzulegen, in welchem ich die Blöcke ansprechen und die Attribute ändern kann. Wie wäre es, wenn Du auf den Block zoomst, dann muss der Benutzer nur noch einen Doppelklick auf den Block machen und hat automatisch die Attributbearbeitung offen. Du kannst Dich einmal per Einzelschritt durch den Code bewegen und diese Zeile auf true und false beobachten. 'If AcMapEntity.ObjectName = "AcDbBlockReference" Then' Wird die Schleife aufgerufen, gibt es einen Block. Das muss aber noch nicht heissen, dass dieser auch Attribute hat. Denn nur diese werden in der Textdatei ausgegeben. Es kann auch sein, dass es keinen Block gibt, sondern es sich um ein anderes Element handelt, dann läuft er auch nicht in die Schleife rein. Gruß TP ------------------ 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: 02. Nov. 2004 11:04 <-- editieren / zitieren --> Unities abgeben:
Ich nochmal,das Auslesen der Blockattribute benötige ich direkt in AutoCAD zur Weiterverarbeitung - genauer Änderungsmöglichkeit - der Blöcke in einem Menü. Ich habe vor, dieses Menü in AutoCAD anzulegen, in welchem ich die Blöcke ansprechen und die Attribute ändern kann. Kann mir irgend jemand mit einem Tipp weiterhelfen? K 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: 02. Nov. 2004 08:25 <-- editieren / zitieren --> Unities abgeben:
Ah, jetzt habe ich das mit dem Microsoft Scripting Runtime gefunden und es kommt beim Ausführen auch kein Fehler mehr.Er legt auch die Textdatei an, aber die ist leer - völlig ohne Inhalt? Muß ich noch irgendwas beachten? K 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: 02. Nov. 2004 08:18 <-- editieren / zitieren --> Unities abgeben:
Wie ist das mit der Microsoft Scripting Runtime- Aktivierung gemeint? Wo mache ich das?Der Code wie er unten steht, funktioniert irgendwie nicht. Er bringt einen Fehler beim Kompilieren und meint bei der Zeile: Dim fso As FileSystemObject "benutzerdefinierter Typ nicht definiert" Was kann da falsch sein? K Zitat: Original erstellt von BloodyMess: Hallo kiltswitch,ja es ist möglich. Das Ausdokumentieren des Codes habe ich mir erspart, aber vielleicht mal selber reinschauen. So schwer ist es ja nicht. Was mit Eigenschaften und Informationen gemeint ist, weiß ich nicht. Folgender Code liest alle Attribute von Blöcken in der aktuellen Zeichnung in eine Textdatei aus. Unter den Verweisen 'Microsoft Scripting Runtime' aktivieren. Code: Sub ReadBlockProperties()Dim AcMapEntity As AcadEntity Dim AcMapBlock As AcadBlockReference Dim AcMapBlockAttributes As Variant Dim iZaehler As Integer Dim fso As FileSystemObject Set fso = New FileSystemObject Dim TxtFile As TextStream Set TxtFile = fso.OpenTextFile("c:\ausgabe.txt", ForWriting, True) For Each AcMapEntity In ThisDrawing.ModelSpace If AcMapEntity.ObjectName = "AcDbBlockReference" Then Set AcMapBlock = AcMapEntity AcMapBlockAttributes = AcMapBlock.GetAttributes For iZaehler = 0 To UBound(AcMapBlockAttributes) TxtFile.WriteLine (AcMapBlockAttributes(iZaehler).TagString & _ vbTab & AcMapBlockAttributes(iZaehler).TextString) Next iZaehler TxtFile.WriteLine vbCr End If Next TxtFile.Close Set TxtFile = Nothing Set fso = Nothing Set AcMapEntity = Nothing Set AcMapBlock = Nothing Set AcMapBlockAttributes = Nothing End Sub
Gruß TP
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: 02. Nov. 2004 08:09 <-- editieren / zitieren --> Unities abgeben:
Danke für die Hilfe. Mit Eigenschaften und Informationen meinte ich die Attribute des Blockes.K Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BloodyMess Mitglied Applicationingenieur
Beiträge: 603 Registriert: 06.06.2002 AutoCAD Map 3D 2005 Win XP pro
|
erstellt am: 01. Nov. 2004 21:48 <-- editieren / zitieren --> Unities abgeben:
Hallo kiltswitch,ja es ist möglich. Das Ausdokumentieren des Codes habe ich mir erspart, aber vielleicht mal selber reinschauen. So schwer ist es ja nicht. Was mit Eigenschaften und Informationen gemeint ist, weiß ich nicht. Folgender Code liest alle Attribute von Blöcken in der aktuellen Zeichnung in eine Textdatei aus. Unter den Verweisen 'Microsoft Scripting Runtime' aktivieren. Code: Sub ReadBlockProperties()Dim AcMapEntity As AcadEntity Dim AcMapBlock As AcadBlockReference Dim AcMapBlockAttributes As Variant Dim iZaehler As Integer Dim fso As FileSystemObject Set fso = New FileSystemObject Dim TxtFile As TextStream Set TxtFile = fso.OpenTextFile("c:\ausgabe.txt", ForWriting, True) For Each AcMapEntity In ThisDrawing.ModelSpace If AcMapEntity.ObjectName = "AcDbBlockReference" Then Set AcMapBlock = AcMapEntity AcMapBlockAttributes = AcMapBlock.GetAttributes For iZaehler = 0 To UBound(AcMapBlockAttributes) TxtFile.WriteLine (AcMapBlockAttributes(iZaehler).TagString & _ vbTab & AcMapBlockAttributes(iZaehler).TextString) Next iZaehler TxtFile.WriteLine vbCr End If Next TxtFile.Close Set TxtFile = Nothing Set fso = Nothing Set AcMapEntity = Nothing Set AcMapBlock = Nothing Set AcMapBlockAttributes = Nothing End Sub
Gruß TP ------------------ [Diese Nachricht wurde von BloodyMess am 01. Nov. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |