Forum:AutoCAD VBA
Thema:Werte aus Teilereferenz per VBA auslesen
Möchten Sie sich registrieren?
Wer darf antworten? Registrierte Benutzer können Beiträge verfassen.
Hinweise zur Registrierung Sie müssen registriert sein, um Beiträge oder Antworten auf Beiträge schreiben zu können.
Ihr Benutzername:
Ihr Kennwort:   Kennwort vergessen?
Anhang:    Datei(en) anhängen  <?>   Anhänge verwalten  <?>
Grafik für den Beitrag:                                                
                                                       
Ihre Antwort:

Fachbegriff
URL
Email
Fett
Kursiv
Durchgestr.
Liste
*
Bild
Zitat
Code

*HTML ist AUS
*UBB-Code ist AN
Smilies Legende
Netiquette

10 20 40

Optionen Smilies in diesem Beitrag deaktivieren.
Signatur anfügen: die Sie bei den Voreinstellungen angegeben haben.

Wenn Sie bereits registriert sind, aber Ihr Kennwort vergessen haben, klicken Sie bitte hier.

Bitte drücken Sie nicht mehrfach auf "Antwort speichern".

*Ist HTML- und/oder UBB-Code aktiviert, dann können Sie HTML und/oder UBB Code in Ihrem Beitrag verwenden.

T H E M A     A N S E H E N
insidERR

Beiträge: 105 / 0

Win10 x64 Pro, ACAD Mech.2018, AI 2018 Sim., AV WG 2018, VBA/.NET

Hallo Leute, 
ich bastle gerade ein Makro, welches die Zeichnung nach Teilereferenzen (_ampartref) absucht und die darin enthaltenen Werte ausliest.

Bin soweit dass ich im Debugger die Werte sehen kann. Kann sie aber mit VBA nicht auslesen.
Auf dem folgendem Bild sieht man welche Werte ich suche.

So sieht mein Code aktuel aus.

Code:
Private Sub checkPositionsNummern() '05.02.2020
    On Error Resume Next
    Dim BlockCol As Collection, erLine As Single, Objekt As Object
    erLine = 0
    Set BlockCol = New Collection
   
    For Each Objekt In ThisDrawing.ModelSpace
        If TypeName(Objekt) = "IMcadPartReference3" Then BlockCol.Add Objekt
       
    Next
   
    For i = 1 To BlockCol.Count
      'hier alle gefundenen Teilereferenzen durchlaufen und die Werte "Data(1,0)" , "Data(1,1)" usw. auslesen
    Next i
End Sub

ein vergleichbares Makro für/in Inventor läuft wunderbar. Da lese ich die Objekte aber anders aus.

Hat eine/r ne Idee, wie ich die Werte "Data(1,0)" , "Data(1,1)" usw. auslesen kann? 

Danke 

KlaK

Beiträge: 2170 / 81

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2019
Plateia, Canalis
Visual Basic

Hi,

kannst Du mal eine Beispielzeichnung anhängen? Habe kein Inventor.
Evtl. müßte man auch noch Verweise setzen, dann wäre ich auch raus.
Aber prinzipiell solltest Du doch den Variant Data einem Variant zuweisen können und dann ganz normalen Zugriff auf diesen haben.

Code:

    DIM vData as Variant
    For i = 0 To BlockCol.Count-1 ' Zählung beginnt bei 0 wenn nicht Optionbase 1 gesetzt ist
      'hier alle gefundenen Teilereferenzen durchlaufen und die Werte "Data(1,0)" , "Data(1,1)" usw. auslesen
      set vData = BlockCol(i).Data
      For J = 0 to 4
        Debug.Print "Data " & J & " : ",vData(J,0), vData(J,1)
      Next J
    Next i


(ungetestet)

Alternativ:

Code:

    For each BC in BlockCol
      set vData = BC.Data
      For J = 0 to 4
        Debug.Print "Data " & J & " : ",vData(J,0), vData(J,1)
      Next J
    Next


Grüße
Klaus   

insidERR

Beiträge: 105 / 0

Win10 x64 Pro, ACAD Mech.2018, AI 2018 Sim., AV WG 2018, VBA/.NET

Hallo Klaus,
danke für deine Antwort.

Ich bekomme in den Zeilen "Set vData = BlockCol(1).Data" und "set vData = BC.Data" sofort die Fehlermeldung "Laufzeitfehler 13: Typen unverträglich

Hier zum Verdeutlichen an welche Daten ich kommen will.

----------------

Wolltest du das passende Makro für Inventor, oder ein Bild von Inventor sehen, wo man die Positionsnummern sehen kann?

KlaK

Beiträge: 2170 / 81

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2019
Plateia, Canalis
Visual Basic

Hi,

Wie schon geschrieben, ohne Beispielzeichnung schwer nachzuvollziehen bzw. zu testen.

Grüße
Klaus 

insidERR

Beiträge: 105 / 0

Win10 x64 Pro, ACAD Mech.2018, AI 2018 Sim., AV WG 2018, VBA/.NET

Hatte verstanden dass du eine Zeichnung für Inventor haben willst.
Um Inventor geht es im aktuellen Fall aber nicht, sondern AutoCAD.
Habe jetzt eine *.dwg angehängt.
KlaK

Beiträge: 2170 / 81

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2019
Plateia, Canalis
Visual Basic

Hi,

Wie schon vermutet werden die Elemente bei mir nur als Proxy angezeigt.
Da muß Dir jemand mit Mechanical helfen, sorry

Aber evtl. machst Du ja noch einmal einen Versuch mit einem Variantarray
DIM vData() as Variant

Grüße
Klaus 

insidERR

Beiträge: 105 / 0

Win10 x64 Pro, ACAD Mech.2018, AI 2018 Sim., AV WG 2018, VBA/.NET

Danke für deine Ideen.
Klappt leider nicht.
Bekomme die Fehlermeldung "Keine Zuweisung an Datenfeld möglich" und bei
Code:
Set vData = BlockCol(i).Data
wird vData markiert.

Hier nochma der ganze Code

Code:
Private Sub checkPositionsNummern() '05.02.2020
    'On Error Resume Next
    Dim BlockCol As Collection, erLine As Single, Objekt As Object
    Set BlockCol = New Collection
   
    For Each Objekt In ThisDrawing.ModelSpace
        If TypeName(Objekt) = "IMcadPartReference3" Then BlockCol.Add Objekt
       
    Next
   
    Dim vData() As Variant
    For i = 1 To BlockCol.Count
        'hier alle gefundenen Teilereferenzen durchlaufen und die Werte "Data(1,0)" , "Data(1,1)" usw. auslesen
        'UNFERTIG: hier sollten alle Details der "Positionsnummern" aufgelistet werden. So könnte man doppelte Einträge in Schnittzeichnungen finden.
      Set vData = BlockCol(i).Data
      For j = 0 To 4
        Debug.Print "Data " & j & " : ", vData(j, 0), vData(j, 1)
      Next j
    Next i
End Sub

Schade, vielleicht findet das hier jemand der auch Mechanical hat.