Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  AutoCAD VBA
  Frage zu Blockattributen

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
  
PNY: der unverzichtbare Partner für umfassende KI-Lösungen von Workstations bis zu Edge Computing und KI-Cluster-Bereitstellung, eine Pressemitteilung
Autor Thema:  Frage zu Blockattributen (2801 mal gelesen)
Frank136
Mitglied



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

Beiträge: 45
Registriert: 06.04.2009

P4 WinXP Acad2004,2005,2008 Office2003

erstellt am: 16. Apr. 2009 17: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

Hallo liebe CAD-Gemeinde,
kurz vorab, ich bin erst seit 3 wochen mit VBA und AutoCad vertraut, also bitte nicht gleich schimpfen 

Meine Frage/Aufgabe:
Ich möchte an eine mit VBA neu erstellte Blockreferenz mehrere Attribute anhängen. Wenn ich das richtig verstanden habe, dann kann ich beim Erstellen eines Attributes einen Tag(verstehe ich als Name) und einen Value(ZahlenWert, der zum Namen gehört) anhängen. Leider je Attribut nur je einen. Ich möchte aber an eine Blockreferenz mehrere Attribute anhängen(zB Reihe 21, TeilNr 12, Blatt 7), um den einzelnen Block später aus einer Vielzahl von Blöcken wieder eindeutig herausfinden zu können. Ich habe mal mit hilfe von alten Beiträgen ein wenig rumprobiert(siehe Anhang). Habe ich das jetzt richtig gemacht, dass ich 3 mal ein Attribut angehängt habe, oder gibt es da noch ne andere Möglichkeit? Kann ich diese Attribute später auch wieder mit VBA auslesen und evtl sogar in Excel expotieren?

schon mal Danke für die Hilfe!!!

Mein erster Versuch:
Sub Attributes()
   
    Dim A, B, C As Integer
    A = 243                  ' sollen später aus Excel Datei kommen
    B = 26
    C = 5
   
    ' Blockdefinition anlegen
    Dim blockObj As AcadBlock
    Dim Radius As Double
    Dim N As Integer
    Dim Kreis As AcadCircle
    Dim insertionPnt(0 To 2) As Double
    Radius = 2
    insertionPnt(0) = 5: insertionPnt(1) = 5: insertionPnt(2) = 0
    Set blockObj = ThisDrawing.Blocks.Add(insertionPnt, "Kreis")
    Set Kreis = blockObj.AddCircle(insertionPnt, Radius)
    Kreis.color = 90
       
    ' Attributdefinition
    Dim attributeObj As AcadAttribute
    Dim height As Double
    Dim mode As Long
    Dim prompt As String
    Dim insertionPoint(0 To 2) As Double
    Dim tag(0 To 2) As String
    Dim value(0 To 2) As String
    height = 1
    mode = acAttributeModeInvisible
    prompt = ""
    insertionPoint(0) = 4: insertionPoint(1) = 4: insertionPoint(2) = 0
   
    tag(0) = "KreisNr"
    tag(1) = "BlattNr"
    tag(2) = "ReiheNr"
    value(0) = A
    value(1) = B
    value(2) = C
   
    ' Create the attribute definition object in model space
 
    Set attributeObj = blockObj.AddAttribute(height, mode, prompt, insertionPoint, tag(0), value(0))
    Set attributeObj = blockObj.AddAttribute(height, mode, prompt, insertionPoint, tag(1), value(1))
    Set attributeObj = blockObj.AddAttribute(height, mode, prompt, insertionPoint, tag(2), value(2))
   
    ' Einfügen der Blockreference
    Dim blockRefObj As AcadBlockReference
    insertionPnt(0) = 2: insertionPnt(1) = 2: insertionPnt(2) = 0
    Set blockRefObj = ThisDrawing.ModelSpace.InsertBlock(insertionPnt, "Kreis", 1, 1, 1, 0)
    ZoomAll
   
    ' Auslesen der Attribute
    Dim varAttributes As Variant
    varAttributes = blockRefObj.GetAttributes
   
    ' Attribute in einen String schreiben, damit man Sie mit einer MsgBox ausgeben kann
    Dim strAttributes As String
    Dim I As Integer
    For I = LBound(varAttributes) To UBound(varAttributes)
        strAttributes = strAttributes & "  Tag: " & varAttributes(I).TagString & _
                        "  Value: " & varAttributes(I).TextString & "    "
    Next
    MsgBox "Die Attribue vom Block " & blockRefObj.Name & " sind: " & strAttributes, , "Infokasten (Da kann man mal schauen, ob das Teil auch funktioniert)"
   
End Sub


mfg Frank

------------------
Wenn das Wasser bis zum Hals steht, sollte man den Kopf nicht hängen lassen...

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

Stelli1
Moderator
Verm.-Ing.


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

Beiträge: 1526
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 16. Apr. 2009 18:45    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 Frank136 10 Unities + Antwort hilfreich

Hallo Frank,

erst mal herzlich willkommen in VBA Forum für AutoCAD aud Cad.de 

Sieht doch gar nicht schlecht aus. 

Wenn du die Daten mit VBA raus schreiben willst (nach Excel oder text) solltest du auch das Handle oder die ObjektID des Blockes mit in die Liste schreiben.

Später kannst du dadurch direkt auf den gewünschten Block zugreifen.

Code:
    Dim tempObj As AcadObject
    Set tempObj = ThisDrawing.ObjectIdToObject(objectID)
oder
    Set tempObj = ThisDrawing.HandleToObject(Handle)

Wilfried Stelberg

------------------
Warum lisp'eln wenn's auch anders geht.
www.ib-stelberg.de

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



Anzeige:Infos zum Werbeplatz >>

ELCOVISION 10 CAD APP für GIS, Vermessung und Kartografie, Messtechnik, Tiefbau

ELCOVISION 10 berechnet aus Bildern normaler Kameras oder Drohnen vollautomatisch hochgenaue und hochdetaillierte 3D Modelle und Punktwolken in nahezu Laserscanqualität. Diese Punktwolken können dann z.B. einfach nach BricsCAD für weitere Auswertung importiert werden.

Frank136
Mitglied



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

Beiträge: 45
Registriert: 06.04.2009

P4 WinXP Acad2004,2005,2008 Office2003

erstellt am: 24. Apr. 2009 17:23    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

Hallo,
habe das Problem gelöst bekommen. Habs per ObjectId gemacht.

Danke für die Hilfe!

------------------
Wenn das Wasser bis zum Hals steht, sollte man den Kopf nicht hängen lassen...

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)2025 CAD.de | Impressum | Datenschutz