Macro avec l'enregistreur de macro qui ne fonctionne pas

Bonjour à tous,

Pourquoi une macro enregistré avec l’enregistreur de macro, ne fonctionne pas quand on la lance ?
Avec Excel il n’y a généralement jamais de soucis, mais avec SolidWorks, c’est quasiment l’inverse.
Voici ma macro enregistré une fois édité dans l’assemblage :

Dim swApp As Object

Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Sub main()

Set swApp = Application.SldWorks

Set Part = swApp.ActiveDoc

' Redraw
Part.GraphicsRedraw2

' Redraw
Part.GraphicsRedraw2

' Redraw
Part.GraphicsRedraw2

' Redraw
Part.GraphicsRedraw2
Dim BoundingBox As Object
Set BoundingBox = Part.FeatureManager.InsertGlobalBoundingBox(swGlobalBoundingBoxFitOptions_e.swBoundingBoxType_BestFit, False, False, longstatus)
Part.ClearSelection2 True

' Redraw
Part.GraphicsRedraw2

' Redraw
Part.GraphicsRedraw2

' Redraw
Part.GraphicsRedraw2

' Redraw
Part.GraphicsRedraw2
End Sub

comme pour mon enregistrement j’édite ma pièce dans l’assemblage et je lance ma macro, et rien ne se passe.

Pourquoi ?

Merci d’avance

L’enregistreur de macro sous SW, n’est effectivement pas le meilleurs, loin de là…
En général cela sert dans de très rare cas à identifier la fonction nécessaire.
Mais il te génère dans tout les cas un tas de code inutile et absolument dégueulasse!
Ici Part.GraphicsRedraw2 que l’on retrouve trop souvent.
Je ne sais pas ce que tu cherchais à faire, peut être la bounding box?
Mais internet est souvent une meilleurs solution à l’enregistreur.

3 « J'aime »

Bonjour.

Je suis d’accord avec @sbadenis …l’enregistreur est largement perfectible.

essayez plutôt:

https://help.solidworks.com/2021/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.ifeaturemanager~insertglobalboundingbox.html?verRedirect=1
associé à:
https://help.solidworks.com/2021/english/api/sldworksapi/redraw_graphics_example_vb.htm

Dim swApp As SldWorks.SldWorks
Dim Part As SldWorks.ModelDoc2    
Dim swModel As SldWorks.ModelDoc2
Dim boolstatus As Boolean
Dim longstatus As Long
Option Explicit

Sub main()
    
    Set swApp = Application.SldWorks
    Set Part = swApp.ActiveDoc 
    Set swModel = swApp.ActiveDoc

    ' Display the Bounding Box sketch
    boolstatus = Part.SetUserPreferenceToggle)swViewDispGlobalBBox, True)
    
    Dim BoundingBox As SldWorks.Feature
    Set BoundingBox = Part.FeatureManager.InsertGlobalBoundingBox(swBoundingBoxType_BestFit, True, False, longstatus)

    Part.ClearSelection2 True

    ' Hide the Bounding Box sketch
    boolstatus = Part.SetUserPreferenceToggle)swViewDispGlobalBBox, False)

swModel.GraphicsRedraw2

End Sub

Cordialement.

3 « J'aime »