Tak, swapp jest zadeklarowany jako SldWorks.sldworks
Suszę, czy mógłbyś umieścić cały kod, wstawiając go z opcją wstawienia kodu z forum, abym mógł go odzyskać do zobaczenia.
W przeciwnym razie należy przynajmniej zaewidencjonować odwołania (Narzędzia> odwołania), jeśli włączone są następujące odwołania:
Biblioteka typów rozszerzalności Solidworks 201X
Biblioteka typów Sldworks 201X
Biblioteka typów stałych Solidworks 201X
Biblioteka typów poleceń Solidworks 201X
Ze swojej strony jestem na 2016 roku i nie ma problemów.
Przepraszamy, oto początkowy kod:
Dim swApp jako SldWorks.SldWorks
Przyciemnij część jako SldWorks.ModelDoc2
Dim boolstatus As Boolean
Dim skSegment As Object
Przyciemnij myDisplayDim Jako obiekt
Przyciemnij myDimension jako obiekt
Sub main()
Ustaw swApp = Application.SldWorks
Ustaw część = swApp.ActiveDoc
Part.SketchManager.InsertSketch Prawda
boolstatus = Part.Extension.SelectByID2("Plan twarzy", "PŁASZCZYZNA", -6.71223122593068E-02, 0.049524099883856, 0, Fałsz, 0, Nic, 0)
Ustaw skSegment = Part.SketchManager.CreateLine(0#, 0#, 0#, 0.052237, 0#, 0#)
Part.ClearSelection2 Prawda
boolstatus = Part.Extension.SelectByID2("Line1", "SKETCHSEGMENT", 3.01706029555596E-02, 3.7613240418119E-04, 0, False, 0, Nic, 0)
Ustaw myDisplayDim = Part.AddDimension2(2.91675832110764E-02, -1.54214285714286E-02, 0)
Part.ClearSelection2 Prawda
Ustaw myDimension = Part.Parameter("D1@Esquisse1")
myDimension.SystemValue = 0,05
Part.ClearSelection2 Prawda
Part.SketchManager.InsertSketch Prawda
Koniec subwoofera
Jest w SolidWorks 2016
Oto referencje:

Oto drugi edytowany kod:
Dim swApp jako SldWorks.SldWorks
Przyciemnij część jako SldWorks.ModelDoc2
Dim boolstatus As Boolean
Dim skSegment As Object
Przyciemnij myDisplayDim Jako obiekt
Przyciemnij myDimension jako obiekt
Sub main()
Ustaw swApp = Application.SldWorks
Ustaw część = swApp.ActiveDoc
boolstatus = swApp.SetUserPreferenceToggle(swInputDimValOnCreate, False)
Part.SketchManager.InsertSketch Prawda
boolstatus = Part.Extension.SelectByID2("Plan twarzy", "PŁASZCZYZNA", -6.71223122593068E-02, 0.049524099883856, 0, Fałsz, 0, Nic, 0)
Ustaw skSegment = Part.SketchManager.CreateLine(0#, 0#, 0#, 0.052237, 0#, 0#)
boolstatus = Part.Extension.SelectByID2("Line1", "SKETCHSEGMENT", 3.01706029555596E-02, 3.7613240418119E-04, 0, False, 0, Nic, 0)
Ustaw myDisplayDim = Part.AddDimension2(2.91675832110764E-02, -1.54214285714286E-02, 0)
Ustaw myDimension = Part.Parameter("D1@Esquisse1")
myDimension.SystemValue = 0,05
Part.SketchManager.InsertSketch Prawda
boolstatus = swApp.SetUserPreferenceToggle(swInputDimValOnCreate, Prawda)
Koniec subwoofera
Witam
Zamień "Dim swApp As SldWorks.SldWorks" na "Dim swApp As Object", to powinno zadziałać.
Pozdrowienia
A także, bądź ostrożny, gdy dotkniesz parametrów SW, lepiej jest odczytać wartość parametru i, jeśli musisz go zmodyfikować na potrzeby zabiegu, przywrócić go do stanu początkowego po zakończeniu zabiegu:
Dim value As Boolean
value = swApp.GetUserPreferenceToggle(swUserPreferenceToggle_e.swInputDimValOnCreate)
If value = True Then
boolstatus = swApp.SetUserPreferenceToggle(swUserPreferenceToggle_e.swInputDimValOnCreate, False)
End If
###### Là tu mets ton traitement #######
boolstatus = swApp.SetUserPreferenceToggle(swUserPreferenceToggle_e.swInputDimValOnCreate, value)
Pozdrowienia
Rzeczywiście, d.roger, nie sprecyzowałem, ponieważ jego sw miał wejść do kursów.
W każdym razie, ustawienie na False, a następnie True działa nawet wtedy, gdy opcja jest już zaznaczona lub odznaczona (celowo uprościłem).
W przypadku swApp jako obiektu, próbowałem z obydwoma (sldworks.sldworks i object) w 2016 roku działa dla mnie. Zaletą drugiego jest to, że ma autouzupełnianie przy wprowadzaniu kodu i przegląd tego, czego oczekuje każde wywołanie funkcji, bez konieczności trzymania pomocy cały czas otwartej ;)
Edycja: Wreszcie działa z Object, z SldWorks.SldWorks generuje błąd kompilacji, wydaje mi się, że wczoraj trzymał typ Object w pamięci.
Nie ma sposobu, aby nie wprowadzić wymiaru, po prostu za pomocą argumentu funkcji, zamiast cofnąć, a następnie przywrócić ogólne parametry...??
Uwaga: jeśli plik zawiera już szkic, ten utworzony przez makro nie będzie miał charakteru "sketch1", ale będzie miał inny numer... (??)
@ Olivier42 : Witam, nie można użyć argumentu, ponieważ jest to parametr ogólny. O ile mi wiadomo, w interfejsach API nie ma nic, co pozwalałoby na zastąpienie tych parametrów za pomocą argumentu.
Jest to potwierdzone przez pomoc API oprogramowania: Przed wywołaniem tej metody możesz wywołać ISldWorks::SetUserPreferenceToggle z swUserPreferenceToggle_e.swInputDimValOnCreate , aby pominąć okno dialogowe, które pozwala użytkownikowi na wpisanie wartości wymiaru.
Witam
Ogólna idea polega na tym, aby wykonać kompletne szkice zwymiarowane za pomocą programowania, a następnie oczywiście umieścić na nich funkcje głośności. Ważne jest jednak, aby na szkicu były boki. Stąd test z pojedynczą linią i jego szanse.
Za jakiś czas wypróbuję modyfikacje.
Dziękuję za pomoc!
Nadal nie.
Oto nowy kod
Dim swApp As Object
Przyciemnij część jako obiekt
Dim boolstatus As Boolean
Wartość przyciemniona Jako wartość logiczna
Sub main()
Ustaw swApp = Application.SldWorks
Ustaw część = swApp.ActiveDoc
wartość = swApp.GetUserPreferenceToggle(swUserPreferenceToggle_e.swInputDimValOnCreate)
Jeśli wartość = Prawda, to
boolstatus = swApp.SetUserPreferenceToggle(swUserPreferenceToggle_e.swInputDimValOnCreate, False)
Zakończ jeżeli:
boolstatus = Part.Extension.SelectByID2("Płaszczyzna twarzy", "PŁASZCZYZNA", 0, 0, 0, Fałsz, 0, Nic, 0)
Part.SketchManager.InsertSketch Prawda
Dim skSegment As Object
Ustaw skSegment = Part.SketchManager.CreateLine(0#, 0#, 0#, 0.051925, 0#, 0#)
boolstatus = Part.Extension.SelectByID2("Line1", "SKETCHSEGMENT", 1.97416243507319E-02, -1.20689440993789E-03, 0, False, 0, Nic, 0)
Przyciemnij myDisplayDim Jako obiekt
Ustaw myDisplayDim = Part.AddDimension2(2.59101957793034E-02, -1.59578260869565E-02, 0)
Przyciemnij myDimension jako obiekt
Ustaw myDimension = Part.Parameter("D1@Esquisse1")
myDimension.SystemValue = 0,05
Part.SketchManager.InsertSketch Prawda
boolstatus = swApp.SetUserPreferenceToggle(swUserPreferenceToggle_e.swInputDimValOnCreate, wartość)
Koniec subwoofera
Utknie w tym samym miejscu

Oto komunikat o błędzie:

Moim zdaniem wynika to z Twojego wyboru nazwy oceny. Jeśli próbowałeś kilka razy, SW zwiększa numery szkicu, więc jeśli nie zostanie wywołany D1@Esquisse1 zawartość mydimension jest pusta.
Więc spróbuj tego zamiast tego:
Dim swApp As Object
Dim Part As SldWorks.ModelDoc2
Dim boolstatus As Boolean
Dim value As Boolean
Sub main()
Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc
value = swApp.GetUserPreferenceToggle(swUserPreferenceToggle_e.swInputDimValOnCreate)
If value = True Then
boolstatus = swApp.SetUserPreferenceToggle(swUserPreferenceToggle_e.swInputDimValOnCreate, False)
End If
boolstatus = Part.Extension.SelectByID2("Plan de face", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
Part.SketchManager.InsertSketch True
Dim skSegment As Object
Set skSegment = Part.SketchManager.CreateLine(0#, 0#, 0#, 0.051925, 0#, 0#)
boolstatus = Part.Extension.SelectByID2("Line1", "SKETCHSEGMENT", 1.97416243507319E-02, -1.20689440993789E-03, 0, False, 0, Nothing, 0)
Dim myDisplayDim As SldWorks.DisplayDimension
Set myDisplayDim = Part.AddDimension2(2.59101957793034E-02, -1.59578260869565E-02, 0)
Dim myDimension As SldWorks.Dimension
Set myDimension = myDisplayDim.GetDimension
myDimension.SystemValue = 0.05
Part.SketchManager.InsertSketch True
boolstatus = swApp.SetUserPreferenceToggle(swUserPreferenceToggle_e.swInputDimValOnCreate, value)
End Sub
Jeśli nie, wypróbuj makro w nowym pokoju!? Szkice i nazwy wymiarów wrócą do zera!?
Tak @Cyril.f, wydaje się, że to działa!!
Analizuję kod, dziękuję!
W porządku, to jest to, czego chciałem.
Dziękuję wszystkim za pomoc!!