Deklarując zmienne, zamiast pozostawiać je w typie obiektu (fonction_echelle jak na przykład SldWorks.Feature), myślę, że pójdzie lepiej.
Po tym, jak domyślam się, brakuje nam części kodu, więc musielibyśmy przejść przez niego krok po kroku, aby zobaczyć, gdzie się zacina (może to pochodzić na przykład z wyboru encji, który jest pusty).
Następnie powinniśmy sprawdzić odwołania do makr, jeśli na liście znajduje się SW2020.
Zgodnie z dokumentacją, funkcja InsertScale działa tylko w przypadku obiektów bryłowych lub powierzchniowych. Ale "REFSURFACE" wskazuje na funkcję, która stworzyła ciało, a nie na samo ciało. Fakt, że korpus powierzchni ma taką samą nazwę jak funkcja, może wyjaśniać , dlaczego nadal działał w 2016 roku.
To działa dla mnie w 2020 roku:
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
Uwaga: dwa ostatnie wyrazy funkcji InsertScale nie są brane pod uwagę, gdy drugi składnik ma wartość "True" (skala jednolita)
Witam, oto mój kod, a moja część, którą otwieram, to zaimportowana powierzchnia.
Format XT
Sub main()
Ustaw swApp = Application.SldWorks
Ustaw ModelDoc = swApp.ActiveDoc
Ustaw część = swApp.ActiveDoc
linia 100: '-------------------------------------------------------------------------------------------------------------------- Dim choix_matiere As String Dim coef_echelle Ace Double choix_matiere = InputBox("Jaki jest materiał? 1-APET 2-PS 3-PP") Jeśli choix_matiere = "1", to coef_echelle = 1,004 Jeśli choix_matiere = "2", to coef_echelle = 1,006 Jeśli choix_matiere = "3", to coef_echelle = 1,015 Jeśli choix_matiere <> "1" i choix_matiere <> "2" i choix_matiere <> "3", to MsgBox ("Wprowadź tylko 1, 2 lub 3") Idź do linii 100 Zakończ jeżeli:
Tworzenie skali Przyciemnij myModelView jako obiekt
Więc co przetestowałem i znalazłem, jeśli zaimportowana powierzchnia jest powierzchnią złożoną (tj. prawie zamknięta), makro nie działa (Ustaw fonction_echelle zwraca Nic).
Nagrywając makro i wykonując manipulację, oszczędza mi równoważny kod, ale już nie działa i zwraca również Nic.
Edycja: działa na powierzchni odsuniętej od modelu objętościowego, nie działa na powierzchniach importowanych. Prawdopodobnie regresja, jeśli działała wcześniej.