API / VBA voor het ophalen van aangepaste eigenschappen van een onderdeel van een assembly

Hoi allemaal

Ik werk momenteel aan een project om een aantal mappen te automatiseren en ik wil graag een aantal functies integreren in mijn bestaande macro, waarmee een stuklijst wordt ingevoegd en geëxporteerd in een assembly in TXT-indeling.

Ik dank degenen die de tijd zullen nemen om me te lezen en me een paar momenten te geven om mezelf te deblokkeren. :)

Het export- en opslaggedeelte van de BOM gaat goed, maar ik heb een probleem wanneer ik probeer de waarden van de eigenschappen van een van de componenten (de enige die deze eigenschappen heeft) op te halen: CLIENT, LOCAL, CPLT LOCAL, DEAL, DRAFTSMAN, QTE ASS) voordat ik ze kopieer onder dezelfde naam = waarde in de assembly.

Ik had iets gesleuteld door de geëxporteerde Excel-tabel te "manipuleren" op basis van:

AFFAIRE = Range("BG2:BG1000").Find("*", , , , xlByColumns).Value            'Cherche la première valeur non vide
On Error Resume Next                                            

 

Maar dit werkt alleen als de woning wel bestaat. Kortom, ik zou graag een preciezere en veiligere oplossing vinden.

Ik heb veel stukjes code en/of oplossingen gezocht en geprobeerd die ik op de site of elders heb gevonden, maar ik weet echt niet genoeg over API's en VBA-code om het aan mijn behoeften aan te passen.

Ik heb echter een aantal interessante functies geïdentificeerd, waarvan hier een voorbeeld hieronder is om eenvoudig de CODE-eigenschappen in een MsgBox te lezen. (dat zou al een goede stap zijn:) maar werkt helaas niet)  

 Dim swSelMgr                As SldWorks.SelectionMgr
    Dim swSelComp               As Variant
    Dim swSelModel              As SldWorks.ModelDoc2
    Dim swCustPropMgr           As CustomPropertyManager
    Dim swEnt                   As SldWorks.Entity
    Dim val                     As String
    Dim valout                  As String
 
   
    Set swSelComp = swBOMAnnotation.GetComponents2(2, Configuration)
    
    Set swCustPropMgr = swSelComp.Extension.CustomPropertyManager("")
    
    swCustPropMgr.Get4 "CODE", False, val, valout 'Change property name here
    MsgBox "Value: " & val & "Evaluated value: " & valout

 

Het uiteindelijke idee zou daarom zijn om de componentvariabele op te halen, deze in de assemblage te kopiëren en vervolgens in elk van de onderdelen met de eigenschappen CODIFICATION ="X"

Heb je advies en voor de hand liggende correcties om met me te delen om me te deblokkeren? Ik dank u hartelijk bij voorbaat. Aarzel niet om mij om meer details te vragen.

Ik voeg mijn twee stukjes code toe, waarvan er één echt ruw is en wordt gebruikt voor mijn onderzoek / test ... De tweede is de eenvoudigste die werkt wanneer de eigenschappen worden ingevoerd.

PS: Ik moet erop wijzen dat ik de myCADtools niet beschikbaar heb.

Dank u allen.

 

Michael                              


test_export_txt_nomenclature.swp

En hier is het tweede "eenvoudigere" codefragment dat werkt wanneer eigenschappen worden ingevoerd.:)


enregistrement_nomenclature.swp

Hallo

begin met het wijzigen van uw "enregistrement_nomenclature" macro door de regel "On Error Resume Next" aan het begin van de code te plaatsen (net onder uw "Sub main()" regel) en het is niet nodig om er meerdere te plaatsen, deze regel is een opdracht voor het afhandelen van fouten, geen link met een lus, Bekijk het hier .

Vriendelijke groeten

1 like

Voor punt 2: om de eigenschappen van de onderdelen te kunnen wijzigen moet je daadwerkelijk de functie GetComponents2 gebruiken en vervolgens voor elke component de functie GetModelDoc2 gebruiken om aan deze eigenschappen te kunnen werken.

Vriendelijke groeten

1 like

Hallo

Ik was inderdaad veel van uw antwoorden tegengekomen tijdens mijn onderzoek, ik rekende op uw tussenkomst. :)

En heel erg bedankt, ik heb zojuist mijn functie "On Error Resume Next" naar het begin verplaatst en vervolgens ook toegevoegd:

If Cells(I + 1, J + 1) = " " Then
        Cells(I + 1, J + 1).ClearContents
        End If

  want na de export van de eigenschappen zijn de cellen niet leeg, maar bevatten ze allemaal een spatie (" "). Ik denk dat het verstoorde de rest van mijn macro ... Vooral de:

AFFAIRE = Range("BG2:BG1000").Find("*", , , , xlByColumns).Value            'Cherche la première valeur non vide

 

Aan de andere kant zou ik nog steeds graag een manier willen vinden om de aangepaste eigenschappen van de componenten rechtstreeks via    GetComponents2 en vervolgens  GetModelDoc2 te extraheren, maar daarvoor zal ik mijn onderzoek moeten voortzetten en waarschijnlijk om een beetje hulp moeten vragen;)

Duizend keer bedankt dat je me in ieder geval van dit eerste geval hebt gedeblokkeerd. :)

 

Zeer goed einde van de dag voor jou,

 

Vriendelijke groeten

 

Mickaël