Makro do otwierania zespołu

Witam

 

Próbuję utworzyć makro, aby otworzyć zestaw. Zainspirował mnie dokument zaproponowany przez Dassault, ale nie mogę tego zrobić...

Otrzymuję komunikat o błędzie czasu wykonywania typu 13 (niezgodność typów). Na poziomie mojej linii:

swModel = swApp.OpenDoc6(assemblyFile, swDocumentTypes_e.swDocASSEMBLY, swOpenDocOptions_e.swOpenDocOptions_Silent, "", błędy, ostrzeżenia)

Załączam moje makro.... Czy mógłbyś mi powiedzieć, co robię źle?

z góry dziękuję za pomoc

LSE

 

 

Sub main()

Dim swModel As ModelDoc2
Dim swModelDocExt As ModelDocExtension
Sun swSelMgr jako SelectionMgr
Przyciemnij partFile jako ciąg
Dim assemblyFile As String
Przyciemnij rysunekPlik jako ciąg
Błędy przyciemniania jako liczba całkowita
Ostrzeżenia o przyciemnieniu jako liczba całkowita


Ustaw swApp = Application.SldWorks

Ustaw część = swApp.ActiveDoc
Przyciemnij myModelView jako obiekt
Ustaw myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized


' Otwórz dokument złożenia i wybierz wszystkie komponenty w zespole

assemblyFile = "C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\samples\introsw\bolt-assembly.sldasm"
Ustaw swApp = CreateObject("SldWorks.Application")
Ustaw swModel = swApp.GetOpenDocumentByName(assemblyFile)

swModel = swApp.OpenDoc6(assemblyFile, swDocumentTypes_e.swDocASSEMBLY, swOpenDocOptions_e.swOpenDocOptions_Silent, "", błędy, ostrzeżenia)
swModelDocExt = swModel.Extension
swSelMgr = swModel.SelectionManager


Koniec subwoofera

Kilka błędów w makrze:

brak deklaracji dla swApp:

Dim swApp jako SldWorks.SldWorks

To samo dotyczy części (otrzymujesz aktywny dokument, ale nie uwidaczniasz go w dalszej części)

Do tego dochodzą jeszcze inne błędy, wtedy nie wiem od którego modelu zacząłeś, ale nie jest on najczystszy.

Wypróbuj to i dostosuj później:

https://help.solidworks.com/2020/English/api/sldworksapi/Open_Assembly_Document_Example_VB.htm?verRedirect=1

1 polubienie

Nie jestem pewien, czy Twój link jest najłatwiejszy.

Prosta wersja, solidworks jest otwarta. Otwiera żądany plik (sztywna ścieżka, wersja PART, a nie SLDASM

Zobacz tutaj: https://help.solidworks.com/2018/english/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.ISldWorks~OpenDoc6.html

Opcja jawna

Dim swApp jako SldWorks.SldWorks
Dim doc As SldWorks.ModelDoc2
Dim fileerror tak długo
Przyciemnij ostrzeżenie o pliku tak długo

Sub main()

    Ustaw swApp = Aplikacja. SldWorks
    swApp.Visible = Prawda
   

    ' Pobierz bieżący katalog roboczy przed otwarciem dokumentu
    Debug.Print "Bieżący katalog roboczy to " & swApp. GetCurrentWorkingDirectory (Weź Bieżący Katalog Roboczy)
   

    Ustaw doc = swApp. OpenDoc6("C:\Users\Public\Documents\SOLIDWORKS\SOLIDWORKS 2018\samples\tutorial\api\chair.sldprt", swDocPART, swOpenDocOptions_Silent, "", fileerror, filewarning)

Koniec subwoofera

2 polubienia

Wybrałem tę wersję, ponieważ w swoim otwierał montaże w zamaskowanych (option_silent)

Ale rzeczywiście twój jest prostszy @mandragore .

Witam

Nie próbowałem makra, ale na uwagę: "Otrzymuję błąd w czasie wykonywania typu 13 (niezgodność typu)", nie zdziwiłbym się, gdyby pochodził on z wpisania zmiennych "Dim errors As Integer" i "Dim warnings As Integer", które normalnie powinny mieć wartość "Long". Oczywiście należy również sprawdzić, czy plik zdefiniowany w zmiennej "assemblyFile" istnieje.

Na pytanie "Czy mógłbyś mi powiedzieć, co robię źle?" Nie będę się nad sobą rozwodził, ponieważ moi bliscy koledzy Sbadenis i Mandragora już zaczęli odpowiadać... Ale zgadzam się, a nawet bardziej, z uwagą "ale nie jest najczystszy" ze Sbadenis.

Pozdrowienia

1 polubienie

Bardzo dziękuję za odpowiedzi i responsywność!

 Właśnie przetestowałem 2 propozycje , ale nie rozumiem, bo nic się nie dzieje.

Nie otrzymuję więcej komunikatów o błędach, ale żądany zestaw nie otwiera się...

Masz pomysł...

Dziękuję

 

W obu z nich upewnij się, że łącze wskazuje na zespół. W przeciwnym razie nic nie otworzy.

Zapraszam do zastąpienia linkiem jednego z Państwa zgromadzeń.

Jeśli mój nie działa, to normalne, że jest określony jako "Część", a nie ASM. Po prostu przepisałem go za pomocą twojej zmiennej i poprawiłem swój błąd. 

 

Opcja jawna

Dim swApp jako SldWorks.SldWorks
Dim doc As SldWorks.ModelDoc2
Dim fileerror tak długo
Przyciemnij ostrzeżenie o pliku tak długo

Dim assemblyFile As String

Sub main()

    Ustaw swApp = Application.SldWorks
    swApp.Visible = Prawda
   

assemblyFile = "C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\samples\introsw\bolt-assembly.sldasm"

 

    Set doc = swApp.OpenDoc6(assemblyFile , 2, 1, "", fileerror, filewarning)

Koniec subwoofera

 

tam powinno działać, zamieniłem "swDocPART" na 2, co odpowiada "swDocASSEMBLY"

Witam Cię 2, 

To działa. Dziękuję bardzo.

System akceptuje otwarcie niezależnego zespołu, ale nie zespołu stanowiącego ...

Pozwól, że wyjaśnię

Jestem w 130100, który składa się z 130101, 130102... 

Mogę otworzyć 110101, ale nie 130101 roku, uruchamiając makro od 130100... Czy to normalne?

Dziękuję za Twoje Oświecenie

Teoretycznie złożenie jest już otwarte, więc solidworks nie zamierza go ponownie otwierać.

 

Myślę, że musisz pobawić się innymi funkcjami, odłożyć 130101 rozjaśnić i aktywować makro, zobaczyć, czy to się rozwiąże.

 

To informatyka , oprogramowanie może być bardzo "głupie". Istnieje wiele różnych funkcji dla każdej funkcji, widziałem "

swApp. CreateNewWindow", który z pewnością może pomóc Ci zmusić oprogramowanie do otwarcia 130101 w nowym oknie.

 

Potem mamy tutaj wiele osób, które zajmują się api, jeśli oświecisz nas trochę bardziej na temat tego, co chcesz zrobić i dlaczego ktoś już to może zrobić, lub możemy Cię szybciej poprowadzić.

Uh... W ogóle nie jestem specjalistą...

więc czego powinniśmy użyć zamiast  "Set doc = swApp.OpenDoc6  .... "?

Jeśli Twój podzespół jest już otwarty w oprogramowaniu, musisz użyć funkcji "ActivateDoc3" , aby go otworzyć (w rzeczywistości jest to aktywacja, którą musisz powiedzieć, ponieważ jest już otwarty) w nowym oknie oprogramowania.

Pozdrowienia

1 polubienie

@mandragore: Nie do końca zgadzam się z uwagą "To informatyka, oprogramowanie może być bardzo 'głupie'.   Dla każdej funkcji istnieje wiele różnych funkcji", uważam, że interfejsy API są raczej logiczne precyzyjnie. W tym przypadku istnieje różnica między "otwartym" a "aktywuj"...

Pozdrowienia

Właśnie przetestowałem. Działa bez zarzutu. Była to więc kwestia słownictwa. Jeszcze raz bardzo dziękuję. Kontynuuję...