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
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
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 ... de F5 in Solidworks wordt gebruikt om de werkbalk van het selectiefilter te tonen/verbergen... 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.
→ 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`
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
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
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
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