VBA Solidworks, Abrufen einer benutzerdefinierten Eigenschaft eines Teils

Hallo ihr alle

Ich programmiere viel in VBA Excel und möchte es in SW verwenden.

Ich möchte die benutzerdefinierten Daten eines Teils in einem Excel-Dokument extrahieren.

Also, wenn mir jemand helfen kann, lassen Sie mich einfach eine personalisierte Eigenschaft eines Raumes in msgbox erscheinen, nachdem ich mich auf den Rest vorbereitet habe. 

 

Vielen Dank im Voraus

 

 

Hallo

Siehe Code unten:

Option Explicit

Sub main()

Dim swApp                   As SldWorks.SldWorks
Dim swModel                 As SldWorks.ModelDoc2
Dim swModelDocExt           As SldWorks.ModelDocExtension

Dim val                     As String
Dim valout                  As String
Dim bool                    As Boolean

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swModelDocExt = swModel.Extension

Dim cusPropMgr As SldWorks.CustomPropertyManager
Dim nNbrProps As Long
Dim vPropNames As Variant
Dim K As Long

Set cusPropMgr = swModelDocExt.CustomPropertyManager("")

nNbrProps = cusPropMgr.Count
vPropNames = cusPropMgr.GetNames
For K = 0 To nNbrProps - 1
    bool = cusPropMgr.Get4(vPropNames(K), False, val, valout)
    MsgBox vPropNames(K) & " - " & val & " - " & valout
Next K

End Sub

Herzliche Grüße

2 „Gefällt mir“

Hallo

Thema wurde schon mehrfach diskutiert, aber: http://help.solidworks.com/2016/english/api/sldworksapi/Get_Custom_Properties_of_Referenced_Part_Example_VB.htm

Die obigen Beispiele ermöglichen es Ihnen, die benutzerdefinierten Eigenschaften der Registerkarte "Anpassen" abzurufen, wenn Sie auch die der Registerkarte "Konfigurationsspezifisch" für jede Konfiguration abrufen möchten, können Sie ein Beispiel unter dem folgenden Link sehen: http://help.solidworks.com/2013/English/api/sldworksapi/Get_Custom_Properties_Example_VB.htm

Herzliche Grüße

Hallo zusammen und vielen Dank für Ihre Reaktionsfähigkeit. Meins ist nicht so gut, weil ich gerade sehr beschäftigt bin...

Ich hatte die verschiedenen Beiträge bemerkt, aber wenn ich in meinem Zimmer die benutzerdefinierte Eigenschaft "Finishing" habe und ich eine msgbox "RAL9010" möchte, wenn ich mein Makro ausführe, kann ich es nicht tun...  

 

 

Hallo

Wenn Sie Ihr Makro posten könnten, wäre es einfacher.

Hallo

Wenn Sie SolidWorks von Excel aus steuern möchten, müssen Siedarüber nachdenken, SolidWorks in Excel mit einem "CreateObject" zu deklarieren und die notwendigen Referenzen in Ihr Makro einzufügen.  Das Makro im ersten Beitrag funktioniert und zeigt eine msgbox an, die den "Eigenschaftsnamen - Textausdruck - Ausgewerteter Wert" für jede Eigenschaft auf der Registerkarte "Anpassen" enthält.

Herzliche Grüße

Deshalb:

und:

Sub Macro1()
    
Dim swApp                   As SldWorks.SldWorks
Dim swModel                 As SldWorks.ModelDoc2
Dim swModelDocExt           As SldWorks.ModelDocExtension

Dim val                     As String
Dim valout                  As String
Dim bool                    As Boolean

Set swApp = CreateObject("SldWorks.Application")
swApp.Visible = True
        
Set swModel = swApp.ActiveDoc
Set swModelDocExt = swModel.Extension

Dim cusPropMgr As SldWorks.CustomPropertyManager
Dim nNbrProps As Long
Dim vPropNames As Variant
Dim K As Long

Set cusPropMgr = swModelDocExt.CustomPropertyManager("")

nNbrProps = cusPropMgr.Count
vPropNames = cusPropMgr.GetNames
For K = 0 To nNbrProps - 1
    bool = cusPropMgr.Get4(vPropNames(K), False, val, valout)
    MsgBox vPropNames(K) & " - " & val & " - " & valout
Next K

End Sub

 

Gibt:

Herzliche Grüße

Tatsächlich funktioniert es sehr gut, es ist nur so, dass ich die benutzerdefinierte Eigenschaft und das konfigurationsspezifische lzq verwechselt habe... Was für eine Nudel pffff

Ist es möglich, das Gleiche mit den Besonderheiten zu tun?

Vielen Dank an alle!

Hallo

Ja, es ist oben markiert:

Die obigen Beispiele ermöglichen es Ihnen, die benutzerdefinierten Eigenschaften der Registerkarte "Anpassen" abzurufen, wenn Sie auch die der Registerkarte "Konfigurationsspezifisch" für jede Konfiguration abrufen möchten, können Sie ein Beispiel unter dem folgenden Link sehen: http://help.solidworks.com/2013/English/api/sldworksapi/Get_Custom_Properties_Example_VB.htm

Herzliche Grüße

1 „Gefällt mir“

An der Spitze!!

Eine letzte Frage: Ich möchte den Schätzwert zurückfordern und nicht den Wert. 

nNumProp = swConfig.GetCustomProperties(vPropName, vPropValue, vPropType)

Vielen Dank im Voraus

Hallo

Ich für meinen Teil verwende stattdessen dies:

Set swCustProp = swConfig.CustomPropertyManager
boolstatus = swCustProp.Get5("xxx", False, ValOut, ResolvedValOut, WasResolved) 'Changer "xxx" par le nom de la propriété du fichier 3D

Valout = Wert des Ausdrucks

ResolvedValout = Berechneter Wert

Ich stimme Cyril.f zu, hier ist ein Beispiel zum Lesen der Werte "Eigenschaftsname - Textausdruck - Wert ausgewertet" für jede Eigenschaft der aktiven Konfiguration:

Option Explicit

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim config As SldWorks.Configuration
Dim cusPropMgr As SldWorks.CustomPropertyManager
Dim lRetVal As Long
Dim vPropNames As Variant
Dim ValOut As String
Dim ResolvedValOut As String
Dim wasResolved As Boolean
Dim nNbrProps As Long
Dim j As Long

Sub main()

    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set config = swModel.GetActiveConfiguration
    Set cusPropMgr = config.CustomPropertyManager

    nNbrProps = cusPropMgr.Count
    vPropNames = cusPropMgr.GetNames

    For j = 0 To nNbrProps - 1
        lRetVal = cusPropMgr.Get5(vPropNames(j), False, ValOut, ResolvedValOut, wasResolved)
        Debug.Print vPropNames(j) & ", " & ValOut & ", " & ResolvedValOut
    Next j

End Sub

Herzliche Grüße

1 „Gefällt mir“

Oder, wenn Sie den Namen Ihrer Konfiguration kennen, müssen Sie nur die Zeile ändern:

Set cusPropMgr = swModelDocExt.CustomPropertyManager("")

bis:

Set cusPropMgr = swModelDocExt.CustomPropertyManager("xxxxxxx")

Im Makro in der besten Antwort ist xxxxxxx der Name der Konfiguration.

Herzliche Grüße

1 „Gefällt mir“

Perfekt!!! Ich habe mein Programm beendet und es funktioniert perfekt...

Jetzt muss ich suchen, um die benutzerdefinierten Eigenschaften jedes Teils einer Baugruppe abzurufen ...

Nochmals vielen Dank an das gesamte Team.

1 „Gefällt mir“

Tag zusammen

Ich hatte einen Code, den ich unter SW2014 erstellt hatte, der auch wunderbar funktionierte, aber in SW2016 nicht mehr funktioniert.

Hier ist der fragliche Code:

Option Explicit

Dim swApp As SldWorks.SldWorks
Dim swModelDoc As SldWorks.ModelDoc2
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim swPackAndGo As SldWorks.PackAndGo
Dim openFile As String
Dim myFileName As String
Dim pgFileNames As Variant
Dim pgFileStatus As Variant
Dim pgSetFileNames() As String
Dim pgGetFileNames As Variant
Dim pgDocumentStatus As Variant
Dim status As Boolean
Dim warnings As Long
Dim errors As Long
Dim i As Long
Dim j As Long
Dim namesCount As Long
Dim myPath As String
Dim statuses As Variant

Public Chemin, OldFile As String
Public Ligne1, DernligneASM

Sub ListerOldFichiers()

Dim Fichier As String

Range("A2:B1000") = "" 'Vidage des cellules

Chemin = CheminUser
OldFile = Dir(Chemin & "*.sldasm")

'Appel de la progressbar

UserForm1.Show vbModeless
UserForm1.ProgressBar1.Value = 0

Dim ProgressBar, barre

UserForm1.ProgressBar1.Value = 10

'Ecrire les noms de fichiers dans colone A

Ligne1 = 2 'Départ pour rentrer les noms de fichiers

    Do While OldFile <> ""
    
        Cells(Ligne1, 1) = OldFile
        OldFile = Dir()
        Ligne1 = Ligne1 + 1
    
    Loop

DernligneASM = Range("a65536").End(xlUp).Row

Dim Dernligne2
Dernligne2 = Range("a65536").End(xlUp).Row + 1

OldFile = Dir(Chemin & "*.sldprt")

    Do While OldFile <> ""
    
        Cells(Dernligne2, 1) = OldFile
        OldFile = Dir()
        Dernligne2 = Dernligne2 + 1
        
    Loop

UserForm1.ProgressBar1.Value = 50


Dim Dernligne3
Dernligne3 = Range("a65536").End(xlUp).Row

Ligne1 = 2

For Ligne1 = Ligne1 To Dernligne3

        Dim DSO As DSOFile.OleDocumentProperties
        Dim File1, OldDes, k, PropName, Compteur

        File1 = Cells(Ligne1, 1).Value

        Set DSO = New DSOFile.OleDocumentProperties
        DSO.Open sfilename:=Chemin & File1

        Compteur = DSO.CustomProperties.Count

        If Compteur <> 0 Then

            For k = 1 To Compteur - 1

                PropName = DSO.CustomProperties.Item(k).Name

                If PropName = "Designation-1" Then

                    OldDes = DSO.CustomProperties.Item("Designation-1").Value
                    Cells(Ligne1, 2) = OldDes

                End If

            Next k

        End If

        DSO.Save
        DSO.Close

Next

'Fini de remplir et Decharger l'userform

barre = 100
UserForm1.ProgressBar1.Value = barre
Unload UserForm1
ProgressBar = 0 'Réinitialisation

MsgBox "Remplissez la colonne des Nouveaux noms a attribuer puis cliquez sur ''Renommer''"

End Sub

 

Die "DSO. "CustomProperties.Count" funktioniert nicht mehr... Nach dem, was ich sehen konnte, wäre es der DSO-Teil, der nicht mehr berücksichtigt wird. Aber ich weiß nicht, womit ich es ersetzen soll...

Danke für Ihre Hilfe

 

 

Hallo

Es wäre besser, eine neue Frage zu erstellen, als eine bereits gelöste Frage in die Warteschlange zu stellen, da es einfacher ist, Antworten auf gegebene Probleme zu finden.

Für Ihr DSO-Problem, das nicht mehr funktioniert, müssen Sie Ihr Makro meiner Meinung nach neu schreiben, siehe https://forum.solidworks.com/thread/88676.

Herzliche Grüße

2 „Gefällt mir“

Oh, tut mir leid... Können wir diesen Austausch auf ein neues Thema übertragen?

Vielen Dank für Ihre Antwort. Wie sieht die Methode seit 2015 aus?

Öffnen Sie eine weitere Frage Vielen Dank

@+

1 „Gefällt mir“

Da haben Sie es: http://www.lynkoa.com/forum/solidworks/r%C3%A9cupererecrire-propri%C3%A9t%C3%A9s-personalis%C3%A9s-avec-excel-sans-methode-dso-inactive-depuis