Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  Werte aus Teilereferenz per VBA auslesen

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:  Werte aus Teilereferenz per VBA auslesen (1467 mal gelesen)
insidERR
Mitglied
2/3D Konstruktion, VBA/.net/Android Programmierung, EDV


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

Beiträge: 128
Registriert: 27.08.2007

erstellt am: 13. Feb. 2020 15:22    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 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 

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

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



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

Beiträge: 2624
Registriert: 02.05.2006

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

erstellt am: 13. Feb. 2020 18:26    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 insidERR 10 Unities + Antwort hilfreich

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   

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

insidERR
Mitglied
2/3D Konstruktion, VBA/.net/Android Programmierung, EDV


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

Beiträge: 128
Registriert: 27.08.2007

erstellt am: 14. Feb. 2020 07:51    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 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?

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

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



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

Beiträge: 2624
Registriert: 02.05.2006

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

erstellt am: 14. Feb. 2020 10: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 Nur für insidERR 10 Unities + Antwort hilfreich

Hi,

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

Grüße
Klaus 

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

insidERR
Mitglied
2/3D Konstruktion, VBA/.net/Android Programmierung, EDV


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

Beiträge: 128
Registriert: 27.08.2007

erstellt am: 14. Feb. 2020 11:14    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


PositionsNr.dwg

 
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.

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

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



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

Beiträge: 2624
Registriert: 02.05.2006

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

erstellt am: 14. Feb. 2020 11:52    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 insidERR 10 Unities + Antwort hilfreich

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 

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

insidERR
Mitglied
2/3D Konstruktion, VBA/.net/Android Programmierung, EDV


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

Beiträge: 128
Registriert: 27.08.2007

erstellt am: 14. Feb. 2020 12:12    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 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.

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

insidERR
Mitglied
2/3D Konstruktion, VBA/.net/Android Programmierung, EDV


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

Beiträge: 128
Registriert: 27.08.2007

Win10 x64 Pro, ACAD Mech.2022, AI 2022 Sim., AV WG 2022, VBA/.NET, Android Studio, Arduino

erstellt am: 04. Mrz. 2020 09:54    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

Bin nun mit Hilfe aus einem anderen Forum drauf gekommen.
So sieht der code nun aus der mich weiter bringt.

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
      vData = BlockCol(i).Data
      For j = 0 To 4
        MsgBox "Data " & j & " : " & vData(j, 0) & " : " & vData(j, 1)
      Next j
    Next i
End Sub

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