Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  Stefan Berlitz Makro erweitern

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 SOLIDWORKS
  
On-Demand-Webinare zu SOLIDWORKS (SOLIDWORKS)
Autor Thema:  Stefan Berlitz Makro erweitern (818 mal gelesen)
Maddog2805
Mitglied
Konstrukteur

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

Beiträge: 2
Registriert: 01.04.2021

SolidWorks 2018, Excel 2016

erstellt am: 06. Mai. 2021 15:03    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 ins Forum,
ich habe mir das Makro von Stefan Berlitz "Masse aller Baugruppenkomponenten auslesen Version 1.0.1" genommen und bin dabei diese ein bisschen zu erweitern.
Ich habe schon mal eine zweite Spalte mit dem Volumen des Teil hinzufügen können.
Alle Spalten auf optimale Breite und das Errechnen des Spezifischen Gewichts klappt auch schon.
Dann hatte ich gesehen das Stefan in seiner API Hilfe die Materialdichte aus dem Teil ausließt. Das hatte ich versucht, zu integrieren. Nur klappt das leider nicht, mangels Wissen. Ich würde auch gerne, anstatt des Dateinamen, die Artikel Nr. aus dem Teil auslesen. Da weiß ich aber auch nicht, wo ich da bei SolidWorks per API hin schauen muss.
Ich wäre sehr dankbar für ein wenig Hilfe.

Makro:

Option Explicit

' Globale Variable
Dim zeile As Integer        ' Zeilenzähler für Ausgabe im Blatt
Sub Baugruppengewichte()
    ' aus aktivem SolidWorks Assembly für alle Komponenten
    ' Dichte und Masse auslesen. Keine Fehlerabragen etc.
    ' SolidWorks sollte oben und das zu untersuchende Assembly
    ' als aktives Dokument geladen sein. Auf Basis des Traverse-Assy
    ' aus dem API-HELP File von SolidWorks
    ' 12.09.2000 Stefan Berlitz http://solidworks.cad.de

    Dim swApp As Object
    Dim AssemblyDoc As Object
    Dim Configuration As Object
    Dim RootComponent As Object

    ' an SolidWorks anklinken und aktives Assembly holen
    Set swApp = CreateObject("SldWorks.Application")
    Set AssemblyDoc = swApp.ActiveDoc

    ' Root-Komponente des Assemblies als Ausgangspunkt festmachen
    Set Configuration = AssemblyDoc.GetActiveConfiguration()
    Set RootComponent = Configuration.GetRootComponent()

    ' erst Blatt leeren, dann Spaltenbeschriftung im Excel-Blatt
    Cells.Select
    Selection.ClearContents
    Range("A1").Select
    ActiveCell.FormulaR1C1 = "Level"
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "Komponentenname"
    Range("C1").Select
    ActiveCell.FormulaR1C1 = "Masse in kg"
    Range("D1").Select
    ActiveCell.FormulaR1C1 = "Volumen in qmm"
    Range("E1").Select
    ActiveCell.FormulaR1C1 = "Materialdichte"
    zeile = 2  ' Zeilenzähler zur Ausgabe in Tabellenblatt

    ' und jetzt rekursiv durch alle Ebenen
    If Not RootComponent Is Nothing Then
        TraverseComponent 1, RootComponent
    End If

End Sub
Private Function TraverseComponent(Level As Integer, Component As Object)
    ' rekursive Routine, die alle Komponenten durchläuft

    On Error Resume Next

    Dim i As Integer
    Dim Children As Variant
    Dim Child As Object
    Dim ChildCount As Integer
    Dim ModelDoc As Object
    Dim ConfigName As String
    Dim MassProp As Variant
    Dim ret As Boolean
    Dim retval As Boolean
   
    ' in Excelblatt den aktuellen level, den Komponentennamen eintragen ...
    Range("A" & zeile).Select
    ActiveCell.FormulaR1C1 = Level
    Range("B" & zeile).Select
    ActiveCell.FormulaR1C1 = Component.Name

    ' und dann für diese Komponente die Masse auslesen
    Range("C" & zeile).Select
    If Component.IsSuppressed Then
        ActiveCell.FormulaR1C1 = "*** Komponente unterdrückt ***"
    Else
        ' dann das ModelDoc der Komponente herausholen
        ConfigName = Component.ReferencedConfiguration
        Set ModelDoc = Component.GetModelDoc()
        If Not ModelDoc Is Nothing Then
            ' und die MassProperties auslesen
            ModelDoc.ShowConfiguration (ConfigName)
            MassProp = ModelDoc.GetMassProperties()
            ' die Reihenfolge der MassProps im Variant ist:
            ' CenterOfMassX, CenterOfMassY, CenterOfMassZ, Volume, Area, Mass,
            ' MomXX, MomYY, MomZZ, MomXY, MomZX, MomYZ
            ' Masse ist die 6. Eigenschaft, also Index 5
            ActiveCell.FormulaR1C1 = MassProp(5)
        Else
            ActiveCell.FormulaR1C1 = "*** Kein ModelDoc, Rootkomponente? ***"
        End If
    End If
   
    'Volumen aus Model holen
    Range("D" & zeile).Select
    If Component.IsSuppressed Then
        ActiveCell.FormulaR1C1 = "*** Komponente unterdrückt ***"
    Else
        ' dann das ModelDoc der Komponente herausholen
        ConfigName = Component.ReferencedConfiguration
        Set ModelDoc = Component.GetModelDoc()
        If Not ModelDoc Is Nothing Then
            ' und die MassProperties auslesen
            ModelDoc.ShowConfiguration (ConfigName)
            MassProp = ModelDoc.GetMassProperties()
            ' die Reihenfolge der MassProps im Variant ist:
            ' CenterOfMassX, CenterOfMassY, CenterOfMassZ, Volume, Area, Mass,
            ' MomXX, MomYY, MomZZ, MomXY, MomZX, MomYZ
            ' Masse ist die 6. Eigenschaft, also Index 5
            ActiveCell.FormulaR1C1 = MassProp(3)
        Else
            ActiveCell.FormulaR1C1 = "*** Kein ModelDoc, Rootkomponente? ***"
        End If
    End If
   
'Spezifische Gewicht
   
' Range("E" & zeile).Select
' If Component.IsSuppressed Then
' ActiveCell.FormulaR1C1 = "*** Komponente unterdrückt ***"
' Else
' dann das ModelDoc der Komponente herausholen
' ConfigName = Component.ReferencedConfiguration
' Set ModelDoc = Component.GetModelDoc()
' If Not ModelDoc Is Nothing Then
' ModelDoc.ShowConfiguration (ConfigName)
' retval = ModelDoc.SetUserPreferenceDoubleValue(swMaterialPropertyDensity, DichteWert(cmbAuswahl.ListIndex))
' ActiveCell.FormulaR1C1 = retval
' Else
' ActiveCell.FormulaR1C1 = "Kein ModelDoc, Rootkomponente?"
' End If
' End If
   
    'Spezifisches Gewicht errechnen
    Range("E" & zeile).Select
    ActiveCell.FormulaR1C1 = "=RC[-2]/RC[-1]/1000"
       
    ' dann für die Ausgabe nächste Zeile vorbelegen
    zeile = zeile + 1
    ' schauen, ob's ein Subassy ist und ggf. über die Kinder rüberschauen
    Children = Component.GetChildren
    ChildCount = UBound(Children) + 1
    For i = 0 To (ChildCount - 1)
        Set Child = Children(i)
        TraverseComponent Level + 1, Child

     
    Next i
   
    Columns("A:E").EntireColumn.AutoFit
   
End Function


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

bk.sc
Ehrenmitglied V.I.P. h.c.
Konstrukteur Sondermaschinenbau



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

Beiträge: 2776
Registriert: 18.07.2012

-Solid Works 2019 SP5
-Pro Engineer WF 3

erstellt am: 10. Mai. 2021 13: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 Nur für Maddog2805 10 Unities + Antwort hilfreich

Hallo,

wo steht die Artikelnummer den? Wenn diese in den Benutzerdefinierten Eigenschaften steht kommst du an diese über "CustomInfo2 Property (IModelDoc2)" ran.

Für das Auslesen der Masse, Dichte etc. kannst du dir mal das Beispiel "Get Mass Properties Example (VBA)" anschauen.

Gruß
Bernd

------------------
--- Man muß nicht alles wissen, man muß nur wissen wo es steht ---

Staatlich anerkannte Deutschniete 

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



Techniker / Konstrukteur (m/w/d) Maschinen und Anlagebau
NORD Engineering ist Ihr zuverlässiger Partner für anspruchsvolle technische Projekte und Herausforderungen in ganz Norddeutschland. Wir verbinden Talente und Profis mit den passenden Unternehmen für langfristige Projekte aus verschiedensten Bereichen wie z.B. Maschinenbau, Elektrotechnik oder Schiffbau.

Sie haben Ihre Ausbildung im technischen Bereich und Ihre Weiterbildung zum ...
Anzeige ansehenKonstruktion, Visualisierung
Maddog2805
Mitglied
Konstrukteur

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

Beiträge: 2
Registriert: 01.04.2021

SolidWorks 2018, Excel 2016

erstellt am: 11. Mai. 2021 07:04    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


Artikelnr.jpg

 
Hallo Bernd,
erstmal danke für die Hilfe. Die Artikel Nr. ist in unseren Benutzerdefinierten Eigenschaften (siehe Anhang). Ist nur die frage wie ich die genau ansprechen muss. Das VBA Beispiel schaue ich mir gerne mal an. Mal sehen was ich damit machen kann.
Vielen Dank

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