VBA Solidworks, het ophalen van een aangepaste eigenschap van een onderdeel

Hoi allemaal

Ik codeer veel op VBA Excel, en ik zou het graag in SW willen gebruiken.

Ik wil graag de aangepaste gegevens van een onderdeel in een Excel-document extraheren.

Dus als iemand me kan helpen, laat me dan verschijnen als een gepersonaliseerde eigendom van een kamer in msgbox nadat ik me klaar maak voor de rest. 

 

Bij voorbaat dank

 

 

Hallo

Zie onderstaande code:

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

Vriendelijke groeten

2 likes

Hallo

Onderwerp al meerdere keren besproken maar: http://help.solidworks.com/2016/english/api/sldworksapi/Get_Custom_Properties_of_Referenced_Part_Example_VB.htm

Met de bovenstaande voorbeelden kunt u de aangepaste eigenschappen van het tabblad "Aanpassen" ophalen, als u ook die van het tabblad "Configuratiespecifiek" voor elke configuratie wilt ophalen, kunt u een voorbeeld zien op de volgende link: http://help.solidworks.com/2013/English/api/sldworksapi/Get_Custom_Properties_Example_VB.htm

Vriendelijke groeten

Hallo allemaal en bedankt voor jullie reactievermogen. De mijne is niet zo goed omdat ik het momenteel erg druk heb...

Ik had de verschillende berichten opgemerkt, maar als ik in mijn kamer ben, heb ik de aangepaste eigenschap "Afwerking" en ik wil een msgbox "RAL9010" wanneer ik mijn macro uitvoer, ik kan het niet doen...  

 

 

Hallo

Als u uw macro zou kunnen posten, zou het gemakkelijker zijn.

Hallo

Als je Solidworks vanuit Excel wilt aansturen, moet jeerover nadenken om SolidWorks in Excel te declareren met een "CreateObject" en de benodigde referenties in je macro te zetten.  De macro in het eerste bericht werkt en geeft een msgbox weer met de "Eigenschapsnaam - Tekstuitdrukking - Geëvalueerde waarde" voor elke eigenschap in het tabblad Aanpassen.

Vriendelijke groeten

Daarom:

en:

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

 

Geeft:

Vriendelijke groeten

In feite werkt het heel goed, het is alleen dat ik de aangepaste eigenschap en de configuratiespecifieke lzq heb verward... wat een noodle pffff

Is het mogelijk om hetzelfde te doen met de details?

Bedankt allemaal!

Hallo

Ja, het is hierboven gemarkeerd:

Met de bovenstaande voorbeelden kunt u de aangepaste eigenschappen van het tabblad "Aanpassen" ophalen, als u ook die van het tabblad "Configuratiespecifiek" voor elke configuratie wilt ophalen, kunt u een voorbeeld zien op de volgende link: http://help.solidworks.com/2013/English/api/sldworksapi/Get_Custom_Properties_Example_VB.htm

Vriendelijke groeten

1 like

Aan de top!!

Nog een laatste vraag: ik ben op zoek naar de geschatte waarde, en niet naar de waarde. 

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

Bij voorbaat dank

Hallo

Van mijn kant gebruik ik in plaats daarvan dit:

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 = Waarde van de uitdrukking

ResolvedValout = berekende waarde

Ik ben het eens met Cyril.f, hier is een voorbeeld om de waarden "eigenschapsnaam - Tekstuitdrukking - Geëvalueerde waarde" te lezen voor elke eigenschap van de actieve configuratie:

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

Vriendelijke groeten

1 like

Of, als u de naam van uw configuratie kent, hoeft u alleen maar de regel te wijzigen:

Stel cusPropMgr in = swModelDocExt.CustomPropertyManager("")

bij:

Stel cusPropMgr in = swModelDocExt.CustomPropertyManager("xxxxxxx")

In de macro die in het beste antwoord wordt gegeven, is xxxxxxx de naam van de configuratie.

Vriendelijke groeten

1 like

Perfect!!! Ik ben klaar met mijn programma en het werkt perfect...

Nu moet ik kijken om de aangepaste eigenschappen van elk onderdeel van een assemblage op te halen...

Nogmaals dank aan het hele team.

1 like

Hallo allemaal

Ik had een code die ik onder SW2014 had gemaakt die ook uitstekend werkte, maar die niet meer werkt in SW2016.

Dit is de code in kwestie:

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

 

De "DSO. CustomProperties.Count" werkt niet meer... van wat ik kon zien, zou het het DSO-gedeelte zijn dat niet langer in aanmerking wordt genomen. Maar ik weet niet waarmee ik het moet vervangen...

Bedankt voor je hulp

 

 

Hallo

Het zou beter zijn om een nieuwe vraag te maken in plaats van een vraag die al is opgelost in de wachtrij te zetten, het is gemakkelijker om antwoorden te vinden op gegeven problemen.

Voor je DSO probleem dat niet meer werkt denk ik dat je je macro moet herschrijven, zie https://forum.solidworks.com/thread/88676.

Vriendelijke groeten

2 likes

Oh sorry... Kunnen we deze uitwisseling overbrengen naar een nieuw onderwerp?

Dank u voor uw antwoord. Wat is de methode sinds 2015?

Open nog een vraag bedankt

@+

1 like

Daar heb je het: http://www.lynkoa.com/forum/solidworks/r%C3%A9cupererecrire-propri%C3%A9t%C3%A9s-personalis%C3%A9s-avec-excel-sans-methode-dso-inactive-depuis