Het formulier vernieuwen na het invullen van een macro

Hallo

Ik heb een kleine macro die elementen van de bestandsnaam ophaalt. Klaar om het formulier in te vullen om discrepanties tussen ' bestandsnaam ' en ' nomenclatuurinformatie ' te vermijden voor geautomatiseerd beheer dat later komt...
De eigenschappen vullen zich goed in, maar het formulier lijkt leeg. Ik kan F5 doen of herbouwen, er gebeurt niets


Wat kan ik aan het einde van mijn macro toevoegen om het formulier te vernieuwen?
Kortom, u moet de 3D openen om het formulier correct weer te geven, terwijl op dat moment parallel de cartouche van het onderdeelplan wordt voltooid...

Hier is mijn code

Dim swApp als object
Dim swModel als ModelDoc2
Dim config As SldWorks.Configuration
Dim swCustProp als CustomPropertyManager
Dim lRetVal zo lang
Dim myValue0 als tekenreeks
myValue1 dimmen als tekenreeks
Dim myValue2 als tekenreeks
myValue3 dimmen als tekenreeks
Dim myValue4 als tekenreeks
Dim myValue5 als tekenreeks
Dim myValue6 als tekenreeks
Dim myValue7 als tekenreeks

Sub hoofd()

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
maValeur0 = swModel.GetTitle 'On récupère le nom du fichier
maValeur1 = Left(maValeur0, 6) 'On récupère les 6 premiers caractères du nom du fichier'
maValeur2 = Left(maValeur0, 12) 'On récupère les 12 premiers caractères du nom du fichier'
maValeur3 = Right(maValeur2, Len(maValeur2) - Len(maValeur1)) '2 moins 1'
maValeur4 = Right(maValeur0, 7) 'On récupère l'extension'
maValeur5 = Left(maValeur0, 13) 'On récupère les 13 premiers caractères du nom du fichier'
maValeur6 = Right(maValeur0, Len(maValeur0) - Len(maValeur5)) 'On récupére tout au delà du 13éme caractére'
maValeur7 = Left(maValeur6, Len(maValeur6) - Len(maValeur4)) 'on enlève l'extention à 5'
Set config = swModel.GetActiveConfiguration
Set cusPropMgr = config.CustomPropertyManager
lRetVal = cusPropMgr.Add3("N° Plan / Réf / Dim", swCustomInfoType_e.swCustomInfoText, maValeur3, swCustomPropertyAddOption_e.swCustomPropertyDeleteAndAdd)
lRetVal = cusPropMgr.Add3("Désignation", swCustomInfoType_e.swCustomInfoText, maValeur7, swCustomPropertyAddOption_e.swCustomPropertyDeleteAndAdd)

MsgBox "Formulaire complété" & Path, vbInformation

Einde Sub'

Hallo

Ik gebruik het formulier niet, maar een Ctrl+Q lost het probleem niet op? (per macro, geforceerde herbouw)

2 likes

Hallo.
"+1 voor wederopbouw.
Ik zal een recordregel toevoegen.
swModel.Save3(swSaveAsOptions_Silent, lErrors, lWarnings)

2 likes

Ctrl+Q (Het is zo "weggaan" naar huis dat ik er nooit aan denk op SW!)
Het werkt halverwege, het laat me alleen de ref zien ^^'

Voor de bespaar... Niets beters :cry:

Aan de andere kant zie ik bij toeval dat wanneer ik van de ontwerpbibliotheek naar het formulier ga, het voltooid opnieuw wordt geladen. Waarom wordt bij een eenvoudige verbouwing het formulier dat door de eigenschappen is ingevuld niet geladen?

CTRL+Q versus F5 :grin: ... de F5 in Solidworks wordt gebruikt om de werkbalk van het selectiefilter te tonen/verbergen... :rofl:
Dat gezegd hebbende, ik bijt op mijn vingers als ik een CTRL+Q doe in een andere software ...
Vragen:
Is uw formulier actief wanneer u de macro start?
Maakt u gebruik van configuraties? (Als dit het geval is, en de reconstructie maakt al deel uit van het werk, denk ik dat deze reconstructie moet worden uitgebreid naar alle configuraties...)
verander ForceRebuilt in ForceRebuild3(Onwaar)
Komt overeen met CTRL+SHIFT+Q

Helaas hetzelfde effect voor de 2 "ForceRebuilds". Alleen mijn ref wordt weergegeven, niet de aanduiding. En als het me vraagt om het formulier op te slaan, verwijdert het de aanduiding in de eigenschappen alsof het formulier meester is geworden.

Dus ja, het formulier is nog steeds actief. Tot nu toe kwam het me goed uit om het nieuws in mijn ensembles te managen.
Het uit- en aanzetten werkt. Maar waarom niet in mijn macro? grrr

Dus ja, misschien een update van de configuraties. Maar in dit teststuk heb ik alleen het minpuntje.

De macro heeft geen invloed op het formulier, maar op de eigenschappen. Misschien is het mogelijk om het via API's gesloten te openen?

Waarschijnlijk
Maar daar! Ik ben al verre van een aas in macro.

Ik kan me voorstellen dat je de Mycad-suite met Smartproperties niet hebt... Het zal veel van je problemen oplossen.

3 likes

Ga als volgt te werk om het in uw macro te proberen:

swApp.ActivateTaskPane swDesignLibrary

[uw macro]

swApp.ActivateTaskPane swCustomProps

→ Kortom, we simuleren een wijziging in het Taakvenster-paneel (tabbladen aan de rechterkant van Solidworks)

Dim swApp As Object
Dim swModel As ModelDoc2
Dim config As SldWorks.Configuration
Dim swCustProp As CustomPropertyManager
Dim lRetVal As Long
Dim maValeur0 As String
Dim maValeur1 As String
Dim maValeur2 As String
Dim maValeur3 As String
Dim maValeur4 As String
Dim maValeur5 As String
Dim maValeur6 As String
Dim maValeur7 As String

Sub main()

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

swApp.ActivateTaskPane swDesignLibrary

maValeur0 = swModel.GetTitle 'On récupère le nom du fichier
maValeur1 = Left(maValeur0, 6) 'On récupère les 6 premiers caractères du nom du fichier'
maValeur2 = Left(maValeur0, 12) 'On récupère les 12 premiers caractères du nom du fichier'
maValeur3 = Right(maValeur2, Len(maValeur2) - Len(maValeur1)) '2 moins 1'
maValeur4 = Right(maValeur0, 7) 'On récupère l'extension'
maValeur5 = Left(maValeur0, 13) 'On récupère les 13 premiers caractères du nom du fichier'
maValeur6 = Right(maValeur0, Len(maValeur0) - Len(maValeur5)) 'On récupére tout au delà du 13éme caractére'
maValeur7 = Left(maValeur6, Len(maValeur6) - Len(maValeur4)) 'on enlève l'extention à 5'
Set config = swModel.GetActiveConfiguration
Set cusPropMgr = config.CustomPropertyManager
lRetVal = cusPropMgr.Add3("N° Plan / Réf / Dim", swCustomInfoType_e.swCustomInfoText, maValeur3, swCustomPropertyAddOption_e.swCustomPropertyDeleteAndAdd)
lRetVal = cusPropMgr.Add3("Désignation", swCustomInfoType_e.swCustomInfoText, maValeur7, swCustomPropertyAddOption_e.swCustomPropertyDeleteAndAdd)

swApp.ActivateTaskPane swCustomProps

MsgBox "Formulaire complété" & Path, vbInformation

End Sub`
1 like

Ik denk dat @Maclane de waarheid in pacht heeft of in ieder geval in de buurt komt van testen!
Anders vond ik deze die er ook dicht bij in de buurt komt, op een Duits forum:

Sub main()
    Dim swApp              As SldWorks.SldWorks
    Dim swModel            As SldWorks.ModelDoc2
   
    'Auf SW zugreifen
    Set swApp = Application.SldWorks
   
    'An aktives Dokument anklinken
    Set swModel = swApp.ActiveDoc
    swModel.CustomInfo("FTL-Besch") = "Hallo"
   
    'Wechsel auf "SOLIDWORKS Ressourcen "
    swApp.ActivateTaskPane (3) '(swTaskPaneTab_e.swResources)
    'Wechsel auf "Benutzerdefinierte Eigenschaften"
    swApp.ActivateTaskPane (5) '(swTaskPaneTab_e.swCustomProps)
End Sub

Lente:
https://ww3.cad.de/foren/ubb/Forum2/HTML/033024.shtml
Hulp bij het bewerken van SW:
https://help.solidworks.com/2024/English/api/swconst/SolidWorks.Interop.swconst~SolidWorks.Interop.swconst.swTaskPaneTab_e.html?id=2e29ce3

1 like

Hoi allemaal

De oplossing van @sbadenis werkt perfect.
Hartelijk dank aan jullie allemaal voor jullie hulp.

Hier is mijn definitieve code, als het iemand kan helpen

Dim swApp As Object
Dim swModel As ModelDoc2
Dim config As SldWorks.Configuration
Dim swCustProp As CustomPropertyManager
Dim lRetVal As Long
Dim maValeur0 As String
Dim maValeur1 As String
Dim maValeur2 As String
Dim maValeur3 As String
Dim maValeur4 As String
Dim maValeur5 As String
Dim maValeur6 As String
Dim maValeur7 As String

Sub main()

    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    maValeur0 = swModel.GetTitle 'On récupère le nom du fichier
    maValeur1 = Left(maValeur0, 6) 'On récupère les 6 premiers caractères du nom du fichier'
    maValeur2 = Left(maValeur0, 12) 'On récupère les 12 premiers caractères du nom du fichier'
    maValeur3 = Right(maValeur2, Len(maValeur2) - Len(maValeur1)) '2 moins 1'
    maValeur4 = Right(maValeur0, 7) 'On récupère l'extension'
    maValeur5 = Left(maValeur0, 13) 'On récupère les 13 premiers caractères du nom du fichier'
    maValeur6 = Right(maValeur0, Len(maValeur0) - Len(maValeur5)) 'On récupére tout au delà du 13éme caractére'
    maValeur7 = Left(maValeur6, Len(maValeur6) - Len(maValeur4)) 'on enlève l'extention à 5'
    Set config = swModel.GetActiveConfiguration
    Set cusPropMgr = config.CustomPropertyManager
    lRetVal = cusPropMgr.Add3("N° Plan / Réf / Dim", swCustomInfoType_e.swCustomInfoText, maValeur3, swCustomPropertyAddOption_e.swCustomPropertyDeleteAndAdd)
    lRetVal = cusPropMgr.Add3("Désignation", swCustomInfoType_e.swCustomInfoText, maValeur7, swCustomPropertyAddOption_e.swCustomPropertyDeleteAndAdd)

swModel.CustomInfo("FTL-Besch") = "Hallo"
swApp.ActivateTaskPane (3)
swApp.ActivateTaskPane (5)
    
    MsgBox "Formulaire complété" & Path, vbInformation

End Sub

Ik weet niet zeker of deze regel nuttig is, maar er moet een FTL-Bessh-eigenschap worden toegevoegd met "Hallo" als waarde:

swModel.CustomInfo("FTL-Besch") = "Hallo"

Je kunt @Maclane bedanken zonder wie ik deze oplossing nooit zou hebben gevonden.

2 likes

Argg!, ik was er bijna! :grin:
Goed gedaan @sbadenis :stuck_out_tongue:

1 like

Feitelijk
zonder '''
swModel.CustomInfo("FTL-Besch") = "Hallo"

ça marche tout pareil.

Encore merci à tous !
1 like

En tot slot, een kleine back-up aan het einde eet geen brood.

Ik combineer vaak een beetje ter plekke, dat geef ik toe. Het is misschien niet optimaal, maar het werkt!

Dim swApp As Object
Dim part As Object
Dim swModel As ModelDoc2
Dim config As SldWorks.Configuration
Dim swCustProp As CustomPropertyManager
Dim lRetVal As Long
Dim maValeur0 As String
Dim maValeur1 As String
Dim maValeur2 As String
Dim maValeur3 As String
Dim maValeur4 As String
Dim maValeur5 As String
Dim maValeur6 As String
Dim maValeur7 As String




Sub main()

    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    maValeur0 = swModel.GetTitle 'On récupère le nom du fichier
    maValeur1 = Left(maValeur0, 6) 'On récupère les 6 premiers caractères du nom du fichier'
    maValeur2 = Left(maValeur0, 12) 'On récupère les 12 premiers caractères du nom du fichier'
    maValeur3 = Right(maValeur2, Len(maValeur2) - Len(maValeur1)) '2 moins 1'
    maValeur4 = Right(maValeur0, 7) 'On récupère l'extension'
    maValeur5 = Left(maValeur0, 13) 'On récupère les 13 premiers caractères du nom du fichier'
    maValeur6 = Right(maValeur0, Len(maValeur0) - Len(maValeur5)) 'On récupére tout au delà du 13éme caractére'
    maValeur7 = Left(maValeur6, Len(maValeur6) - Len(maValeur4)) 'on enlève l'extention à 5'
    Set config = swModel.GetActiveConfiguration
    Set cusPropMgr = config.CustomPropertyManager
    lRetVal = cusPropMgr.Add3("N° Plan / Réf / Dim", swCustomInfoType_e.swCustomInfoText, maValeur3, swCustomPropertyAddOption_e.swCustomPropertyDeleteAndAdd)
    lRetVal = cusPropMgr.Add3("Désignation", swCustomInfoType_e.swCustomInfoText, maValeur7, swCustomPropertyAddOption_e.swCustomPropertyDeleteAndAdd)

swApp.ActivateTaskPane (3)
swApp.ActivateTaskPane (5)

Set part = swApp.ActiveDoc
Dim swErrors As Long
Dim swWarnings As Long
boolstatus = part.Save3(1, swErrors, swWarnings)

    MsgBox "Formulaire complété" & Path, vbInformation

End Sub
1 like

Hallo allemaal en vooral @Maclane die me goed hadden gedeblokkeerd.
Het was me gelukt om iets te hebben dat geweldig werkt, en sinds gisteren werkt het niet meer.
Ik had gesleuteld omdat ik eindelijk geen configuraties meer beheer die me trouwens problemen bezorgden.
Ik heb dit gecodeerd:
Nu verwijdert het het type van mijn " tekst " eigenschap en vult het de waarde niet langer in.

Dim swApp As Object
Dim part As Object
Dim swModel As ModelDoc2
Dim swCustProp As CustomPropertyManager
Dim lRetVal As Long
Dim maValeur0 As String
Dim maValeur1 As String
Dim maValeur2 As String
Dim maValeur3 As String
Dim maValeur4 As String
Dim maValeur5 As String
Dim maValeur6 As String
Dim maValeur7 As String

Sub main()

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

maValeur0 = swModel.GetTitle 'On récupère le nom du fichier
maValeur1 = Left(maValeur0, 6) 'On récupère les 6 premiers caractères du nom du fichier'
maValeur2 = Left(maValeur0, 12) 'On récupère les 12 premiers caractères du nom du fichier'
maValeur3 = Right(maValeur2, Len(maValeur2) - Len(maValeur1)) '2 moins 1'
maValeur4 = Right(maValeur0, 7) 'On récupère l'extension'
maValeur5 = Left(maValeur0, 13) 'On récupère les 13 premiers caractères du nom du fichier'
maValeur6 = Right(maValeur0, Len(maValeur0) - Len(maValeur5)) 'On récupére tout au delà du 13éme caractére'
maValeur7 = Left(maValeur6, Len(maValeur6) - Len(maValeur4)) 'on enlève l'extention à 5'
    
   
lRetVal = swModel.DeleteCustomInfo("N° Plan / Réf / Dim")
lRetVal = swModel.AddCustomInfo3("", "N° Plan / Réf / Dim", PropertyManagerPage, maValeur3)
lRetVal = swModel.DeleteCustomInfo("Désignation")
lRetVal = swModel.AddCustomInfo3("", "Désignation", PropertyManagerPage, maValeur7)


'swApp.ActivateTaskPane (3)
'swApp.ActivateTaskPane (5)

Set part = swApp.ActiveDoc
Dim swErrors As Long
Dim swWarnings As Long
boolstatus = part.Save3(1, swErrors, swWarnings)

    MsgBox "NOM : " + maValeur7 + " - N° :" + maValeur3 + " - Enregistré" & Path, vbInformation

End Sub

Hallo

Ik denk dat het daar misgaat: lRetVal = swModel.AddCustomInfo3("", "N° Plan / Réf / Dim", PropertyManagerPage, maValeur3)

AddCustomInfo3 moet als volgt worden ingesteld:

value = instance.AddCustomInfo3(Configuration, FieldName, FieldType, FieldValue)

Dus ik denk dat het FiledType is dat verkeerd geïnformeerd is... Zet in plaats van PorpertyManagerPage swCustomInfoType_e.swCustomInfoText

2 likes

Trouwens, al uw AddCustominfo3 regels moeten worden teruggenomen...
=> Zie het antwoord van @Cyril_f , maar ook de vorige versies van de macro...
https://help.solidworks.com/2022/english/api/sldworksapi/SOLIDWORKS.Interop.sldworks~SOLIDWORKS.Interop.sldworks.IModelDoc2~AddCustomInfo3.html

Om verder te gaan:
AddCustominfo3 wordt als verouderd beschouwd (solidworks versie 2022 en +)
Te vervangen door Add3
Dit geeft:
waarde = instantie. Add3(FieldName, FieldType, FieldValue, OverwriteExisting)
https://help.solidworks.com/2022/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.icustompropertymanager~add3.html

1 like

Goed... In ieder geval gaat alles in eerste instantie goed door alleen de kleine vervanging te doen die door @Cyril_f wordt voorgesteld.

Ik zou dieper gaan met een helder hoofd. Ik verlies veel neuronen als ik erin kom.

Je staat bovenaan!
Bedankt.