Automatyczny eksport makr po otwarciu klipu

Dziękuję Cyril.f . Właśnie zrozumiałem, że "plik wykonywalny uruchamiania" to tylko .bat, który nakazuje otwarcie mojego pliku...

Napisałem tak:

start "C:\Program Files\SLDWORKS.exe" "C:\Plan1.SLDDRW" /m "C:\Eksportuj PDF.swp"

Plik Plan1.SLDDRW otwiera się dobrze, ale makro nie uruchamia się. Myślę, że dzieje się tak, ponieważ nie ma domyślnej aplikacji ustawionej dla plików .swp

Próbowałem zastosować swvbaserver.exe i drawcompare.exe jako domyślną aplikację, ale bez powodzenia.

Witam

Nie sądzę, aby pochodził z aplikacji, która nie jest zdefiniowana dla plików swp, ale raczej jest powiązana z makrem, które nie ma "automatycznego" wykonywania. Podobnie jak makra Word/Excel, wykonuje je w momencie zdarzenia otwierającego, aby później wyzwolić działania.

Witam

 

 @Legnano

Kolejną kwestią, która mnie niepokoi i która mogła również kłuć w oczy, jest automatyczne zamykanie dokumentu po eksporcie. Jeśli chcę pracować nad dokumentem w normalny sposób, pojawi się problem: otwieram i bam, zamyka się. Jeśli nie osadzę makra w dokumencie, powinno mi się to udać, tymczasowo przenosząc makro do innego katalogu. Ale czy jest inny sposób?

 

Jak można się domyślić, wykonanie tego rodzaju makra jest problematyczne. Najlepiej, moim zdaniem, jest zrobienie przycisku makra, który pozwoli Ci zapisać dokument w formacie PDF/JPEG w wybranych przez Ciebie folderach i zamknąć rysunek. 

Możesz także utworzyć makro, które otworzy rysunek dokumentu wybranego w drzewie, zapisze i zamknie rysunek.

 

Trzeba też być ostrożnym, ponieważ podczas otwierania niektórych rysunków dokumenty są rozjaśnione i dlatego "bańka pokoju" jest niewidoczna (jest to jeden z moich problemów rysunkowych i szukam akcji makro, aby widok został rozwiązany)

 

Osobiście nie używam żadnego pliku wykonywalnego uruchamiania , uważam, że jest to trochę zbyt natrętne, nawet jeśli w niektórych moich makrach aplikacja może być przydatna, ale są one przydatne tylko w przypadku starych plików i myślę, że nie mogę włączyć tego rodzaju makra do istniejących plików .

Wracając do punktu wyjścia/ zgodnie ze wszystkimi Twoimi uwagami, to, co najbardziej mi odpowiada, to makro A zintegrowane z planem, które prosi, gdy plan jest otwarty, o wykonanie makra B znajdującego się w katalogu. To makro B powinno zapytać:

1: Wczytywanie planu i komponentów w rozwiązanym

2: Eksportuj plan

3: Zamykanie planu bez zapisywania

Jeśli chcę normalnie pracować na planie, usuwam makro B z jego katalogu, co blokuje poprzednie działania. Z komunikatem o błędzie "nie znaleziono makra B" radzę sobie ręcznie, ponieważ jest to wyjątkowy szczególny przypadek.

Dla tych, którzy uważają moją prośbę za dziwną, chcę wyjaśnić dlaczego, ale nie chcę, aby ta rozmowa zamieniła się w pole bitwy, aby powiedzieć mi, czy uważają, że to dobry, czy zły pomysł. Mam plik Excela, który modyfikuje niestandardowe właściwości pomieszczenia bez konieczności jego otwierania. Geometria części jest aktualizowana o wartości z Excela. Proste kliknięcie przycisku powinno pozwolić na publikację planu pomieszczenia w formacie pdf. Wszystko po to, aby użytkownik nie musiał korzystać z solidworks.

W górę...

Dlaczego w tym przypadku nie wykonać całego kodu z Excela?

Rzeczywiście, możesz sterować oprogramowaniem z Excela (nawet jeśli nigdy nie próbowałem tego osobiście)

Zapoznaj się z tym tematem, a dokładniej z KONTROLOWANIEM SOLIDWORKS w makrze programu Excel:

https://www.cadsharp.com/blog/using-microsoft-excel-with-the-solidworks-api/

EDIT: kolejny temat na forum dotyczący tego, jak to zrobić z Excela: https://www.lynkoa.com/forum/solidworks/macro-solidworks-excel

Dziękuję, ale nie będzie to odpowiednie dla mojej aplikacji.
Będę kontynuował prace nad zintegrowanym rozwiązaniem makro, które wymaga otwarcia innych makr. Na razie jest to jazda na łyżwach

A jednak mówisz:

Dla tych, którzy uważają moją prośbę za dziwną, chcę wyjaśnić dlaczego, ale nie chcę, aby ta rozmowa zamieniła się w pole bitwy, aby powiedzieć mi, czy uważają, że to dobry, czy zły pomysł. Mam plik Excela, który modyfikuje niestandardowe właściwości pomieszczenia bez konieczności jego otwierania. Geometria części jest aktualizowana o wartości z Excela. Proste kliknięcie przycisku powinno pozwolić na publikację planu pomieszczenia w formacie pdf. Wszystko po to, aby użytkownik nie musiał korzystać z solidworks.

Dlatego wystarczy na przycisku Excela zaprogramować otwarcie części i planu w solidworks, wyeksportować plan folio 1 w formacie pdf i plan folio 2 w formacie jpeg. Następnie zamknij część i zespół. Wszystko to podczas kodowania w Excelu.

Oto fragment kodu, który z excela otwiera pokój i MEP, właśnie przetestowałem z ciekawości i działa idealnie.

Sub EssaiSW()

 Dim swApp As SldWorks.SldWorks
    Dim swModelUn As SldWorks.ModelDoc2
    Dim swModelDeux As SldWorks.ModelDoc2

    If swApp Is Nothing Then
        Set swApp = CreateObject("SLDWORKS.application")
        swApp.Visible = True
    Else
        Set swApp = Application.SldWorks
    End If

    Set swDocSpecification = swApp.GetOpenDocSpec("C:\Users\sebastien.denis\Desktop\Pièce5.sldprt")
    Set swModelUn = swApp.OpenDoc7(swDocSpecification)
    MsgBox swModelUn.GetTitle
    
    Set swDocSpecification = swApp.GetOpenDocSpec("C:\Users\sebastien.denis\Desktop\Pièce5.slddrw")
    Set swModelUn = swApp.OpenDoc7(swDocSpecification)
    MsgBox swModelUn.GetTitle
    
    swApp.CloseDoc swModelUn.GetTitle
    
    Set swModelUn = swApp.ActiveDoc
    MsgBox swModelUn.GetTitle
    
    Set swDocSpecification = swApp.GetOpenDocSpec("C:\Users\sebastien.denis\Desktop\Pièce6.sldprt")
    Set swModelDeux = swApp.OpenDoc7(swDocSpecification)
    
    swApp.CloseDoc swModelUn.GetTitle

    MsgBox swModelDeux.GetTitle
    
    swApp.CloseDoc swModelDeux.GetTitle
    
    
End Sub

Dziękuję @d.roger za ten kod dostępny w innym miejscu mojego linku powyżej.

Wtedy nie ma już eksportowania plików PDF i JPEG. Co jest w dużej mierze osiągalne i powinno być dość proste.

Chyba, że nadal coś mi brakuje?

Dla twojej informacji, wbudowane makra do przetestowania kilku z nich są skomplikowane do wdrożenia i pozostają niebezpieczne, nie wspominając o awariach z nimi.

 

1 polubienie

Jestem tego samego zdania, że @sbadenis makro włączone do planu/pomieszczenia nigdy nie ćwiczyłem, ale wydaje mi się, że jest to dość skomplikowane i uważam je za zbyt "nachalne". 

Ponieważ zaczynasz od pliku Excel, w którym wypełniasz wymiary do modyfikacji, myślę, że najprostszym pozostaje przycisk makra Excela, który wysyła pracę na Solidworks.

 

Przycisk może pozwolić Ci otworzyć pomieszczenie, wypełnić wymiary, otworzyć zapisany plan, a następnie zamknąć lub kontynuować pracę , modyfikując wymiary, a następnie zapisać ponownie, jeśli masz stolik boczny, który może zaoszczędzić kilka sekund za każdym razem, gdy otwierasz/zamykasz.

 

Jeśli chcesz uniknąć sytuacji, w której użytkownicy będą korzystać z Solidworks, myślę, że jest to najlepsze rozwiązanie. Możesz szybko się zirytować, jeśli musisz zmienić plan i zapomniałeś przesunąć makro, lub jeśli Solidworks otwiera dla Ciebie okno za każdym razem, gdy modyfikujesz/tworzysz plan, mówiąc, że nie znalazł makra, nie wspominając o możliwych błędach/błędach Solidworks.

 

W przeciwnym razie, jeśli dobrze rozumiem Twoje żądanie, chciałbyś, aby użytkownik kliknął plik DRWG części w Eksploratorze Windows. Solidworks otwiera ten plan , koreluje go z otwartym plikiem Excela, aktualizuje dane, a następnie automatycznie zapisuje/zamyka plan bez jego wyświetlania przez użytkownika.

1 polubienie

Nadal chciałbym wypróbować wbudowane makro, jeśli nie przeszkadza ci to zbytnio. 

Czy możesz mi wyjaśnić, jaka jest metoda łączenia tego makra , które uruchamia akcję podczas otwierania pliku, z tym makrem , które wykonuje serię makr?

Oto makro używane w Twoim planie i zmieniające ścieżkę makra w "HandlerModule"

Utworzy dla Ciebie obiekt w drzewie projektu.

 

Normalnie powinno działać, uruchamiać się podczas otwierania pliku (plan/część lub asm)


makrotest2.swp
2 polubienia

Świetnie, DZIĘKUJĘ Mandragore!

Ponadto jest bardzo prosty do wdrożenia w serii dokumentów.

Trochę męczyłem się z odniesieniami do aktywacji, ale postępuje dobrze.

Nadal mam mały błąd: makro "exortPDF" o nazwie pat zintegrowane makro zawiesza się podczas odzyskiwania ścieżki pliku, podczas gdy jeśli uruchomię je ręcznie, działa.

Wygląda na to, że dzieje się tak dlatego, że makro "exportPDF" uruchamia się, zanim plik solid zostanie w pełni załadowany (okno błędu oferuje mi debugowanie, ale plik solidworks się nie pojawia) Czy można ustawić jakieś opóźnienie, aby sprawdzić, czy to wszystko?

Jeszcze raz dziękuję

Miałem ten sam problem, nie mogłem uruchomić zewnętrznego makra w sposób, który oferuje i nie miałem czasu na zagłębianie się w temat.

 

Właśnie udało mi się uruchomić jedną próbę z tym:

Opcja jawna
Dim swApp jako SldWorks.SldWorks
Dim boolstatus As Boolean
Sub main()
   Ustaw swApp = Application.SldWorks
   Dim runMacroError tak długo
   boolstatus = swApp.RunMacro2("ścieżka", "moduł", "nazwa", 1, 0)
Koniec subwoofera

 

Zmieniłem również "swRunMacroUnloadAfterRun" na 1 i "runMacroError" na 0

[ Niestety, to już nie działa... Zmiany, które wprowadzasz, wpływają tylko na moduł obsługi, ale to w drugim module zacina się...] Błąd rozwiązany

Wymieniłem zawartość handlermodul na to, co mi zaoferowałeś, nadal nie działa. Nadal otrzymuję komunikat o błędzie w makrze wywoływanym przez andlermodule, podczas gdy plan nie jest jeszcze wyświetlany w oprogramowaniu. Jeśli makro próbuje wyeksportować plan, który nie jest jeszcze otwarty, nie jest to zaskakujące. Ale myślałem, że moduł obsługi został uruchomiony dopiero wtedy, gdy plan został całkowicie załadowany...

Nawiasem mówiąc, nie rozumiem, co masz na myśli mówiąc "Zamieniłem również 'swRunMacroUnloadAfterRun' na 1 i 'runMacroError' na 0"

To makro działa dla mnie, ale rzeczywiście po wypróbowaniu uruchamia żądane makro przed wyświetleniem dokumentu w SolidWorks, więc makro musi zostać uruchomione przed wyświetleniem dokumentu, musisz znaleźć inne makro, aby wysłać tego rodzaju żądanie.

Nawiasem mówiąc, nie rozumiem, co masz na myśli mówiąc "Zamieniłem również 'swRunMacroUnloadAfterRun' na 1 i 'runMacroError' na 0"

 

To tylko po to, aby uprościć czytanie na forum. Ale to jest to samo.

Moim zdaniem rozwiązaniem byłoby otwarcie dokumentu, przeszłość w rozwiązanym, odbudowanie, a następnie uruchomienie tego rodzaju makra 

Ale konkretnie myślę, że łatwiej byłoby pracować tylko w Excelu do tego typu rzeczy.


makrotest2.swp
1 polubienie

Całkowicie zgadzam się z @mandragore tego rodzaju makro bardzo szybko staje się problemem, ponieważ nie można wiedzieć, czy jest uruchamiane, kiedy trzeba, czy nie, i nie ma informacji zwrotnej, czy działa dobrze, czy po prostu się zaczęło, a potem jest podsłuchiwane. Uruchamianie makra z makra, aby już to zrobić, nie jest świetne.

A ponieważ funkcja makro, jest jeszcze gorsza i może sprawić, że szybko zmienisz zdanie, uwierz mi, jest to doświadczone, byłem tam wcześniej, przetestowałem 2 z szybkim przewijaniem do tyłu z powodu wielu problemów.

 

 

Celem jest automatyczne wygenerowanie tego planu PDF z platformy internetowej. Czyli z definicji będzie to w pełni automatyczne. jeśli jakiś incydent uniemożliwia utworzenie pliku PDF, myślę, że mogę zostać powiadomiony na poziomie innym niż oprogramowanie.

Możliwe jest zaatakowanie API w C++. Nie znalazłem tematu na tym forum. Czy wiesz, jak dobrze to działa?

Znalazłem ten wątek rozmowy, który dotyczy kodu, który pozwala uruchomić akcję po zakończeniu rekonstrukcji planu:

https://r1132100503382-eu1-3dswym.3dexperience.3ds.com/#community:yUw32GbYTEqKdgY7-jbZPg/iquestion:Fr2GDcHYThK6PjOZubrVPg

Istnieje deklaracja, która nie jest rozpoznawana i jest wyświetlana na czerwono w makrze:

Dim WithEvents swDraw jako SldWorks.DrawingDoc 

Czy masz na to wytłumaczenie? inna wersja VB?  brakuje odniesienia?

Możliwe jest zaatakowanie API w C++. Nie znalazłem tematu na tym forum. Czy wiesz, jak dobrze to działa?

 

Tak, jest to możliwe. Nie znam jednak kodu, ale znajdziesz tutaj wszystko, czego szukasz:  

http://help.solidworks.com/2022/English/api/sldworksapiprogguide/Welcome.htm

 

Na forach używamy prawie tylko VBA, myślę, że łatwiej jest zapoznać się z kodem i wiele osób jest samoukami.

Cze wszystkim

Mała aktualizacja mojego tematu:

Skończyło się na tym, że znalazłem to, czego szukałem, w Batch+, narzędziu, które umożliwia uruchamianie makr wiersza poleceń.

W końcu mam .bat, który pozwala mi uruchomić makro "export-PDF.swp" bez konieczności dotykania SW, dokładnie tego, czego potrzebowałem.

Nawiasem mówiąc, gorąco polecam przyjrzenie się narzędziom, które oferują. Jest prawdopodobnie tańszy niż MyCad, z kilkoma mniejszymi funkcjami, ale także kilkoma większymi.

Dziękuję