Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  Block Attribute

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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


Sehen Sie sich das Profil von JoKurt87 an!   Senden Sie eine Private Message an JoKurt87  Schreiben Sie einen Gästebucheintrag für JoKurt87

Beiträge: 37
Registriert: 08.11.2013

AutoCAD-Anfaenger
Autodesk AutoCAD 2014 mit VBA Modul

erstellt am: 22. Nov. 2013 15:24    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von AndreasDEU an!   Senden Sie eine Private Message an AndreasDEU  Schreiben Sie einen Gästebucheintrag für AndreasDEU

Beiträge: 15
Registriert: 14.06.2013

erstellt am: 22. Nov. 2013 16:09    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für JoKurt87 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von JoKurt87 an!   Senden Sie eine Private Message an JoKurt87  Schreiben Sie einen Gästebucheintrag für JoKurt87

Beiträge: 37
Registriert: 08.11.2013

AutoCAD-Anfaenger
Autodesk AutoCAD 2014 mit VBA Modul

erstellt am: 22. Nov. 2013 16:28    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von AndreasDEU an!   Senden Sie eine Private Message an AndreasDEU  Schreiben Sie einen Gästebucheintrag für AndreasDEU

Beiträge: 15
Registriert: 14.06.2013

erstellt am: 22. Nov. 2013 16:55    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für JoKurt87 10 Unities + Antwort hilfreich

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 acadblockreference

grpCode(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


Sehen Sie sich das Profil von JoKurt87 an!   Senden Sie eine Private Message an JoKurt87  Schreiben Sie einen Gästebucheintrag für JoKurt87

Beiträge: 37
Registriert: 08.11.2013

AutoCAD-Anfaenger
Autodesk AutoCAD 2014 mit VBA Modul

erstellt am: 22. Nov. 2013 17:50    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von AndreasDEU an!   Senden Sie eine Private Message an AndreasDEU  Schreiben Sie einen Gästebucheintrag für AndreasDEU

Beiträge: 15
Registriert: 14.06.2013

erstellt am: 22. Nov. 2013 19:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für JoKurt87 10 Unities + Antwort hilfreich

Hallo,

Soll natuerlich:

Code:
Next oBlockRef

Gruss
Andrzej

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

JoKurt87
Mitglied
Student E-Technik


Sehen Sie sich das Profil von JoKurt87 an!   Senden Sie eine Private Message an JoKurt87  Schreiben Sie einen Gästebucheintrag für JoKurt87

Beiträge: 37
Registriert: 08.11.2013

AutoCAD-Anfaenger
Autodesk AutoCAD 2014 mit VBA Modul

erstellt am: 22. Nov. 2013 20:19    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von AndreasDEU an!   Senden Sie eine Private Message an AndreasDEU  Schreiben Sie einen Gästebucheintrag für AndreasDEU

Beiträge: 15
Registriert: 14.06.2013

erstellt am: 23. Nov. 2013 07:30    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für JoKurt87 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von JoKurt87 an!   Senden Sie eine Private Message an JoKurt87  Schreiben Sie einen Gästebucheintrag für JoKurt87

Beiträge: 37
Registriert: 08.11.2013

AutoCAD-Anfaenger
Autodesk AutoCAD 2014 mit VBA Modul

erstellt am: 26. Nov. 2013 19:28    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz