Indem Variablen deklariert werden, anstatt sie im Objekttyp zu belassen (z. B. fonction_echelle als SldWorks.Feature), denke ich, dass es besser gehen wird.
Nachdem ich denke, dass uns ein Teil des Codes fehlt, müssten wir ihn Schritt für Schritt durchgehen, um zu sehen, wo er hängen bleibt (er kann beispielsweise aus der Entitätsauswahl stammen, die leer ist).
Danach sollten wir die Makroreferenzen überprüfen, ob SW2020 aufgeführt ist.
Laut der Dokumentation funktioniert die Funktion InsertScale nur bei Volumenkörpern oder Flächenkörpern. Aber "REFSURFACE" verweist auf die Funktion, die den Körper erschaffen hat, nicht auf den Körper selbst. Die Tatsache, dass der Flächenkörper den gleichen Namen wie die Funktion hat , könnte erklären , warum es mit 2016 trotzdem funktionierte.
Das funktioniert bei mir im Jahr 2020:
Option Explicit
Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swFeat As SldWorks.Feature
Dim boolstatus As Boolean
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
boolstatus = swModel.Extension.SelectByID2("Surface-Importée1", "SURFACEBODY", 0, 0, 0, False, 0, Nothing, 0)
Set swFeat = swModel.FeatureManager.InsertScale(swScaleType_e.swScaleAboutCentroid, True, 1.5, 0, 0)
End Sub
Hinweis: Die letzten beiden Terme der Funktion InsertScale werden nicht berücksichtigt, wenn der zweite Term "True" ist (einheitliche Skalierung)
Hallo, hier ist mein Code und mein Teil, den ich öffne, ist eine importierte Oberfläche.
XT-Format
Sub main()
Legen Sie swApp = Application.SldWorks fest
Festlegen von ModelDoc = swApp.ActiveDoc
Set Part = swApp.ActiveDoc
Zeile100: '-------------------------------------------------------------------------------------------------------------------- choix_matiere als Zeichenfolge dimmen Dim coef_echelle Ace Double choix_matiere = InputBox("Was ist das Material? 1-APET 2-PS 3-PP") Wenn choix_matiere = "1", dann coef_echelle = 1,004 Wenn choix_matiere = "2", dann coef_echelle = 1,006 Wenn choix_matiere = "3", dann coef_echelle = 1,015 Wenn choix_matiere <> "1" und choix_matiere <> "2" und choix_matiere <> "3" drücken, dann MsgBox ("Geben Sie entweder 1, 2 oder 3 ein") Gehe zu line100 Ende, wenn
Erstellen der Skala myModelView als Objekt dimmen
boolstatus = Part.Extension.SelectByID2("Surface-Imported1", "SURFACEBODY", 0, 0, 0, Falsch, 0, Nichts, 0) Sun fonction_echelle als SldWorks.Feature Legen Sie fonction_echelle = Part.FeatureManager.InsertScale(swScaleType_e.swScaleAboutCentroid, True, coef_echelle, coef_echelle, coef_echelle) fest
Was ich also getestet und festgestellt habe, ist, dass das Makro nicht funktioniert, wenn es sich bei der importierten Oberfläche um eine komplexe Oberfläche handelt (d. h. fonction_echelle fast geschlossen).
Durch das Aufzeichnen des Makros und das Ausführen der Manipulation wird mir zwar ein gleichwertiger Code gespart, der jedoch nicht mehr funktioniert und auch Nothing zurückgibt.
Bearbeiten: Es funktioniert auf einer versetzten Fläche aus einem Volumenmodell, es funktioniert nicht auf importierten Flächen. Wahrscheinlich eine Regression, wenn es vorher funktioniert hat.