| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | | | Maximizing AI Training with NVIDIA AI Platform and accelerated solutions, ein Webinar am 30.01.2025
|
Autor
|
Thema: Werte aus Teilereferenz per VBA auslesen (1610 / mal gelesen)
|
insidERR Mitglied 2/3D Konstruktion, VBA/.net/Android/Arduino Programmierung, EDV
Beiträge: 138 Registriert: 27.08.2007
|
erstellt am: 13. Feb. 2020 15:22 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 2812 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 / zitieren --> Unities abgeben: Nur für insidERR
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/Arduino Programmierung, EDV
Beiträge: 138 Registriert: 27.08.2007
|
erstellt am: 14. Feb. 2020 07:51 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 2812 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 / zitieren --> Unities abgeben: Nur für insidERR
|
insidERR Mitglied 2/3D Konstruktion, VBA/.net/Android/Arduino Programmierung, EDV
Beiträge: 138 Registriert: 27.08.2007
|
erstellt am: 14. Feb. 2020 11:14 <-- editieren / zitieren --> Unities abgeben:
|
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2812 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 / zitieren --> Unities abgeben: Nur für insidERR
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/Arduino Programmierung, EDV
Beiträge: 138 Registriert: 27.08.2007
|
erstellt am: 14. Feb. 2020 12:12 <-- editieren / zitieren --> Unities abgeben:
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/Arduino Programmierung, EDV
Beiträge: 138 Registriert: 27.08.2007 Win10 x64 Pro, ACAD Mech.2024, Inventor 2024 Sim., Vault Pro 2024, VBA/.NET, Android Studio, Arduino
|
erstellt am: 04. Mrz. 2020 09:54 <-- editieren / zitieren --> Unities abgeben:
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 >>)
|