| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Block Attribute (2668 mal gelesen)
|
JoKurt87 Mitglied Student E-Technik
Beiträge: 37 Registriert: 08.11.2013 AutoCAD-Anfaenger Autodesk AutoCAD 2014 mit VBA Modul
|
erstellt am: 22. Nov. 2013 15:24 <-- editieren / zitieren --> Unities abgeben:
Hi ihr schlauen Menschen, ich bin ratlos. Ich weiss wie ich mittels VBA einen Block erstelle, in diesen Block Attribute einfuege und anschliessend diesen Block in der Zeichnung platziere. Was ist aber, wenn ich eine Zeichnung habe, die schon einen Block mit Attributen enthaelt und ich moechte per VBA auf diese Attribute zugreifen, um deren Wert zu aendern? Ich weiss nicht, wie ich da ran komme. Koennt ihr mir weiterhelfen? MfG und vDiV JoKurt87 ------------------ shit's getting real: (sqrt(-shit))^2 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndreasDEU Mitglied Ingenieur
Beiträge: 15 Registriert: 14.06.2013
|
erstellt am: 22. Nov. 2013 16:09 <-- editieren / zitieren --> Unities abgeben: Nur für JoKurt87
Hallo, Die Attributen werden so ausgelesen: Code: vAttributen = oBlockRef.GetAttributes()
Die Variable vAttributen ist Variant (eine Tabelle) mit allen Attributen die im Deinen Block sitzen. Dann musst Du Dein Attribut identifizieren und den Text auslesen: Code: If vAttributen(i).TagString= Tag_vom_mein_Attribut Then Msgbox vAttributen(i).TextString
Gruß Andrzej Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JoKurt87 Mitglied Student E-Technik
Beiträge: 37 Registriert: 08.11.2013 AutoCAD-Anfaenger Autodesk AutoCAD 2014 mit VBA Modul
|
erstellt am: 22. Nov. 2013 16:28 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von AndreasDEU: Hallo,Die Attributen werden so ausgelesen: Code: vAttributen = oBlockRef.GetAttributes()
Aber um das verwenden zu koennen, muss ich ja auf die in der Zeichnung bestehende Blockreferenz "oBlockRef" zugreifen. Geht das oder muss ich eine neue einfuegen, mit: Code: Set oBlockRef = Thisdrawing.ModelSpace.InsertBlock(dblKoordinaten, "BlockMitAttribut", 1, 1, 1, 0)
Ich hoffe, du verstehst was ich meine. ------------------ shit's getting real: (sqrt(-shit))^2 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndreasDEU Mitglied Ingenieur
Beiträge: 15 Registriert: 14.06.2013
|
erstellt am: 22. Nov. 2013 16:55 <-- editieren / zitieren --> Unities abgeben: Nur für JoKurt87
Hallo, Es gibt ja viele Möglichkeiten um die bestehende Blöcke zu zugreifen. Zum Beispiel: Code: Dim grpCode(0 To 0) Dim dataVal(0 To 0) Dim oBlockRef As acadblockreferencegrpCode(0) = 0: dataVal(0) = "INSERT" Dim ssetObj As AcadSelectionSet Set ssetObj = oAcad.SelectionSets.Add("SS01") ssetObj.Select acSelectionSetAll, , , grpCode, dataVal For Each oBlockRef In ssetObj If oBlockRef.HasAttributes Then vAtt=oBlockRef.GetAttributes() '........... End If Next entObj ssetObj.Delete
Gruß Andrzej Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JoKurt87 Mitglied Student E-Technik
Beiträge: 37 Registriert: 08.11.2013 AutoCAD-Anfaenger Autodesk AutoCAD 2014 mit VBA Modul
|
erstellt am: 22. Nov. 2013 17:50 <-- editieren / zitieren --> Unities abgeben:
Danke erstmal fuer die schnelle Antwort! Dein Code funktioniert auch, nur der Teil Code: Next entObj
bringt mir einen Fehler und das Programm bricht ab. ------------------ shit's getting real: (sqrt(-shit))^2 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndreasDEU Mitglied Ingenieur
Beiträge: 15 Registriert: 14.06.2013
|
erstellt am: 22. Nov. 2013 19:31 <-- editieren / zitieren --> Unities abgeben: Nur für JoKurt87
|
JoKurt87 Mitglied Student E-Technik
Beiträge: 37 Registriert: 08.11.2013 AutoCAD-Anfaenger Autodesk AutoCAD 2014 mit VBA Modul
|
erstellt am: 22. Nov. 2013 20:19 <-- editieren / zitieren --> Unities abgeben:
Der Fehler kommt weiterhin, wenn du jetzt aber noch folgendes aenderst, funktioniert es sogar: Code: Dim grpCode(0 To 0) Dim dataVal(0 To 0)
aendern zu: Code: Dim grpCode(0) As Integer Dim dataVal(0) As Variant
MfG JoKurt87 ------------------ shit's getting real: (sqrt(-shit))^2 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndreasDEU Mitglied Ingenieur
Beiträge: 15 Registriert: 14.06.2013
|
erstellt am: 23. Nov. 2013 07:30 <-- editieren / zitieren --> Unities abgeben: Nur für JoKurt87
Guten morgen, Der Code war so ohne zu überprüfen geschrieben. Jetzt ist alles korrigiert. Siehe unten:
Code: Sub Attribut1()Dim grpCode(0 To 0) As Integer Dim dataVal(0 To 0) As Variant Dim ssetObj As AcadSelectionSet Dim vAtt As Variant Dim oBlockRef As AcadBlockReference grpCode(0) = 0: dataVal(0) = "INSERT" Set ssetObj = ActiveDocument.SelectionSets.Add("SS01") ssetObj.Select acSelectionSetAll, , , grpCode, dataVal For Each oBlockRef In ssetObj If oBlockRef.HasAttributes Then vAtt = oBlockRef.GetAttributes() MsgBox vAtt(0).TextString End If Next oBlockRef ssetObj.Delete End Sub
Hier kannst Du das BlockReference direkt auswählen:
Code: Sub Attribut2()On Error Resume Next Dim oBlockRef As AcadEntity Dim vP As Variant Dim vAtt As Variant ThisDrawing.Utility.GetEntity oBlockRef, vP, "Block auswählen" If oBlockRef.EntityType = 7 Then If oBlockRef.HasAttributes Then vAtt = oBlockRef.GetAttributes() MsgBox vAtt(0).TextString End If End If End Sub
Gruß Andrzej [Diese Nachricht wurde von AndreasDEU am 23. Nov. 2013 editiert.] [Diese Nachricht wurde von AndreasDEU am 23. Nov. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JoKurt87 Mitglied Student E-Technik
Beiträge: 37 Registriert: 08.11.2013 AutoCAD-Anfaenger Autodesk AutoCAD 2014 mit VBA Modul
|
erstellt am: 26. Nov. 2013 19:28 <-- editieren / zitieren --> Unities abgeben:
Danke! Eine kleine Ergaenzung: Wenn man auf alle Attribute in der Liste zugreifen will, um z.B. nach einem bestimmten Attribut zu suchen, dann: Code: For i = LBound(varAtt) To UBound(varAtt) If varAtt(i).TagString = "bestimmtes_Attribut" Then 'hier kann man dann z.B. den Wert des Attributs aendern... End If Next
------------------ shit's getting real: (sqrt(-shit))^2 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |