Aktualisieren des Formulars nach einer Makrofüllung

Hallo

Ich habe ein kleines Makro, das Elemente des Dateinamens abruft. Bereit, das Formular auszufüllen, um Diskrepanzen zwischen " Dateiname " und " Nomenklaturinfo " für eine spätere automatisierte Verwaltung zu vermeiden...
Die Eigenschaften lassen sich gut ausfüllen, aber das Formular wird leer angezeigt. Ich kann F5 machen oder neu erstellen, nichts passiert


Was kann ich am Ende meines Makros hinzufügen, um das Formular zu aktualisieren?
Grundsätzlich müssen Sie das 3D öffnen, damit das Formular korrekt angezeigt wird, während zu diesem Zeitpunkt parallel die Kartusche des Teileplans fertiggestellt wird...

Hier ist mein Code

Dimmen swApp als Objekt
Dim swModel As ModelDoc2
Dim-Konfiguration als SldWorks.Configuration
Dim swCustProp As CustomPropertyManager
Dim lRetVal so lange
Dim myValue0 als Zeichenfolge
Dim myValue1 als Zeichenfolge
Dim myValue2 als Zeichenfolge
Dim myValue3 als Zeichenfolge
Dimmen myValue4 als Zeichenfolge
Dim myValue5 als Zeichenfolge
Dimmen myValue6 als Zeichenfolge
Dim myValue7 als Zeichenfolge

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)

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

Ende Sub'

Hallo

Ich benutze das Formular nicht, aber Strg+Q löst das Problem nicht? (nach Makro, forcerebuild)

2 „Gefällt mir“

Hallo.
"+1 für den Wiederaufbau.
Ich füge eine Datensatzzeile hinzu.
swModel.Save3(swSaveAsOptions_Silent, lErrors, lWarnings)

2 „Gefällt mir“

Strg+Q (Es ist so "weg" nach Hause, dass ich im SW nie darüber nachdenke!)
Es funktioniert auf halbem Weg, es zeigt mir nur den Schiedsrichter ^^"

Zum Sparen... Nichts Besseres :cry:

Auf der anderen Seite sehe ich zufällig, dass, wenn ich von der Designbibliothek zum Formular gehe, es abgeschlossen neu geladen wird. Warum wird bei einer einfachen Neuerstellung das von den Eigenschaften ausgefüllte Formular nicht geladen?

STRG+Q gegen F5 :grin: ... Das F5 in Solidworks wird verwendet, um die Symbolleiste des Auswahlfilters ein-/auszublenden... :rofl:
Das heißt, ich beiße mir in die Finger, wenn ich in einer anderen Software STRG+Q mache...
Fragen:
Ist Ihr Formular aktiv, wenn Sie das Makro starten?
Verwenden Sie Konfigurationen? (Wenn dies der Fall ist und die Rekonstruktion bereits Teil des Jobs ist, denke ich, dass diese Rekonstruktion auf alle Konfigurationen ausgeweitet werden sollte...)
Ändern Sie ForceRebuilt in ForceRebuild3 (False).
Entspricht STRG+UMSCHALT+Q

Leider der gleiche Effekt für die 2 "ForceRebuilds". Es wird nur meine Referenz angezeigt, nicht die Bezeichnung. Und wenn ich aufgefordert werde, das Formular zu speichern, wird die Bezeichnung in den Eigenschaften entfernt, als ob das Formular zum Master geworden wäre.

Also ja, das Formular ist immer noch aktiv. Bisher passte es mir gut, die Nachrichten in meinen Ensembles zu managen.
Das Aus- und Einschalten funktioniert. Aber warum nicht in meinem Makro? grrr

Also ja, vielleicht ein Update der Konfigurationen. Aber bei diesem Teststück habe ich nur den Fehler.

Das Makro wirkt sich nicht auf das Formular, sondern auf die Eigenschaften aus. Vielleicht ist es möglich, es geschlossen über APIs zu öffnen?

Wahrscheinlich
Aber da! Ich bin schon weit davon entfernt, ein Ass in Sachen Makro zu sein.

Ich kann mir vorstellen, dass Sie die Mycad-Suite mit Smartproperties nicht haben... Es wird viele Ihrer Probleme lösen.

3 „Gefällt mir“

So versuchen Sie es in Ihrem Makro:

swApp.ActivateTaskPane swDesignLibrary

[Ihr Makro]

swApp.ActivateTaskPane swCustomProps

→ Grundsätzlich simulieren wir eine Änderung im TaskPane-Panel (Registerkarten rechts neben 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 „Gefällt mir“

Ich denke , @Maclane hält die Wahrheit oder kommt zumindest dem Test nahe!
Ansonsten habe ich in einem deutschen Forum diesen gefunden, der auch nahe dran ist:

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

Feder:
https://ww3.cad.de/foren/ubb/Forum2/HTML/033024.shtml
Edit SW-Hilfe:
https://help.solidworks.com/2024/English/api/swconst/SolidWorks.Interop.swconst~SolidWorks.Interop.swconst.swTaskPaneTab_e.html?id=2e29ce3

1 „Gefällt mir“

Hallo ihr alle

Die Lösung von @sbadenis funktioniert perfekt.
Ein großes Dankeschön an euch alle für eure Hilfe.

Hier ist mein endgültiger Code, wenn er jemandem helfen kann

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

Ich bin mir nicht sicher, ob diese Zeile nützlich ist, sie muss eine FTL-Bessh-Eigenschaft mit "Hallo" als Wert hinzufügen:

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

Sie können @Maclane danken, ohne die ich diese Lösung nie gefunden hätte.

2 „Gefällt mir“

Argg!, ich war fast da! :grin:
Gute Arbeit @sbadenis :stuck_out_tongue:

1 „Gefällt mir“

Tatsächlich
ohne '''
swModel.CustomInfo("FTL-Besch") = "Hallo"

ça marche tout pareil.

Encore merci à tous !
1 „Gefällt mir“

Und schließlich isst ein kleines Backup am Ende kein Brot.

Ich kombiniere oft ein bisschen auf der Stelle, gebe ich zu. Es ist vielleicht nicht optimal, aber es funktioniert!

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 „Gefällt mir“

Hallo zusammen und vor allem @Maclane, die mich gut entsperrt haben.
Ich hatte es geschafft, etwas zu haben, das großartig funktioniert, und seit gestern funktioniert es nicht mehr.
Ich hatte gebastelt, weil ich endlich keine Configs mehr schaffe, die mir übrigens Probleme bereiteten.
Ich habe das codiert:
Jetzt löscht es den Typ meiner " text " -Eigenschaft und füllt den Wert nicht mehr aus.

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

Ich denke, da geht es schief: lRetVal = swModel.AddCustomInfo3("", "N° Plan / Réf / Dim", PropertyManagerPage, maValeur3)

AddCustomInfo3 sollte wie folgt eingerichtet werden:

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

Also denke ich, dass es FiledType ist, das falsch informiert ist... Fügen Sie anstelle von PorpertyManagerPage swCustomInfoType_e.swCustomInfoText ein.

2 „Gefällt mir“

Übrigens, alle Ihre AddCustominfo3-Zeilen sollen zurückgenommen werden...
=> Siehe die Antwort von @Cyril.f , aber auch die vorherigen Versionen des Makros...
https://help.solidworks.com/2022/english/api/sldworksapi/SOLIDWORKS.Interop.sldworks~SOLIDWORKS.Interop.sldworks.IModelDoc2~AddCustomInfo3.html

Um noch weiter zu gehen:
AddCustominfo3 gilt als veraltet (SOLIDWORKS Version 2022 und +)
Zu ersetzen durch Add3
Daraus ergibt sich:
Wert = Instanz. Add3(Feldname, Feldtyp, Feldwert, ÜberschreibenVorhanden)
https://help.solidworks.com/2022/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.icustompropertymanager~add3.html

1 „Gefällt mir“

Gut... Auf jeden Fall läuft zunächst alles gut, wenn man nur den kleinen Austausch macht, den @Cyril.F vorgeschlagen hat.

Mit klarem Kopf würde ich tiefer gehen. Ich verliere viele Neuronen, wenn ich mich darauf einlasse.

Du bist oben!
Vielen Dank.