Nagrywanie DXF/PDF za pomocą makra

Witam

Obecnie próbuję pobrać kod znalezionego makra (http://www.lynkoa.com/forum/documents-commerciaux/ma-macro-pdf-dxf-quoi-en-dire). Działał na SW2013 (ja jestem na SW2015). Zaznaczam, że nic nie wiem o VBA, więc staram się przetransponować swoją wiedzę na inne języki, aby rozwiązać problemy.

Najpierw pojawił się błąd Nie znaleziono projektu lub biblioteki. Skopiowałem kod z oryginalnego pliku i wkleiłem go z powrotem do nowego makra i wygląda na to, że to rozwiązało problem.

Teraz wygląda na to, że moje makro nie działa już tak, jak powinno (cóż, działa, ale nie tak, jak bym chciał). Uruchamiam go i mówi mi, że nie mógł zapisać plików w DXF.

Drogi, które biorę pod uwagę:

-Makro nie wykrywa, że SW2015 jest otwarty

-Makro nie znajduje aktualnie otwartego MEP (ale normalnie powinno mi pokazać błąd)

 

PS: Próbowałem dodać mały fragment kodu, aby sprawdzić, czy folder docelowy istnieje. Jednak on też się nie uruchomił, umieściłem go w komentarzach i wziąłem oryginalny kod.

Z góry dziękuję za pomoc i zaczynam uczyć się VBA na własną rękę.

 

 


makro1.swp

Witam

Czy jest komunikat o błędzie?

Czy można zobaczyć kod w pliku tekstowym? (Brak SolidWorks jeszcze pod ręką).

Witam

Hey@PL szybko skopiowałem makro w formacie txt ;)

Za mało  o tym wiem i to ultrazłożony obszar, jestem trochę zagubiony @_ @


macro.txt
1 polubienie

Dziękujemy you@Centor

@nuemishra: Dodałeś tę linię:

  "Poniższe wiersze wydają się nie działać, umieściłem kod podstawowy z powrotem na wierzchu. Kod, który jest weryfikowany, musi pochodzić z głównego błędu

 

 

Tak, to ja dodałem tę linijkę. Ale wiem, dlaczego to nie działa: zapomniałem dodać Dim fs jako Scripting.FileSystemObject i odwołać się do środowiska wykonawczego skryptów Microsoft. Nadal muszę poprawić mój adres (który obecnie odzyskuje path\nom_fichier.slddraw, a nie tylko ścieżkę\), mam rozwiązanie, nie jest idealne, ale działa. Poprawię to, jeśli zostanie to zweryfikowane.

 

Głównym problemem (tym, który doprowadził mnie do opublikowania) jest to, że mogę uruchomić program w trybie debugowania krok po kroku, ale nie uruchamiając makra. W trybie debugowania wszystko wydaje się działać (może z wyjątkiem zapisania DXF, powoduje to awarię debugowania, ale dobrze tworzy pliki).

Jeśli chodzi o awarię debugowania na rekordzie DXF, kiedy dochodzę do poziomu instrukcji Dir = swModel.SaveAs4(CompleteDocName, 0, 0, 0, 0 ), debugowanie się frezuje, a następnie zatrzymuje. Po sprawdzeniu wygląda na to, że zapisuje trzy arkusze mojego testowego MEP (wygląda na to, że funkcja zapisuje trzy arkusze jednocześnie). Po ponownym uruchomieniu mnie, czy chcę nadpisać istniejący plik (i mnie o każdą stronę)

Wróciłem do poprawionego makra w .txt

EDIT: Aktualizacja macro1.txt

 


macro1.txt

Pokusiłbym się o stwierdzenie, że SolidWorks nie ma czasu na tworzenie swojego pliku DWG, gdy jest proszony o wykonanie kolejnego. Powinniśmy postarać się zawrzeć pauzy w kodzie:

Dwa przykłady przerwy:

1)

Application.Wait Time + TimeSerial(0, 0, 5)' pauza trwająca 5 sekund

2)

Zadeklaruj sub sleep lib "kernel32" aka "sleep" (ByVal dwMilliseconds As Long)

 

Sleep 2000 ' 2 sekundowa przerwa

Cholera, znowu musi mi być źle.

Otrzymuję dwa różne błędy i nie mogę ich rozwiązać.

W przypadku pierwszej metody pauzy informuje mnie: "Błąd wykonania '438': Właściwość lub metoda nie jest obsługiwana przez ten obiekt"

W przypadku drugiej metody mówi mi: "Błąd kompilacji: Kod zawarty w tym projekcie musi zostać zaktualizowany, aby mógł być używany w systemach 64-bitowych. Sprawdź i zaktualizuj instrukcje Declare, a następnie oznacz je atrybutem PtrSafe"

W przypadku pierwszej metody najpierw próbowałem przetestować bezpośrednio w głównym subie (tuż poniżej AffectVar01), w przypadku drugiej umieściłem Declare poniżej Public RepUtil (próbowałem również umieścić go w głównym subie z desperacji... Kto wie, może nic nie zrozumiałem z VBA)

 

REDAGOWAĆ:

Znalazłem łatkę. Sub, który znalazłem podczas wyszukiwania w google, czekając w pętli. Niestety, to nie rozwiązuje problemu. Kiedy biegam normalnie, ciągle mówi mi, że nie zapisuje żadnego DXF (nawiasem mówiąc, nie zapisuje też plików PDF, ale jak powiedziałeś, musi to być spowodowane tym, że makro idzie zbyt szybko dla systemu). 

W KOŃCU!! Wróciłem, bo kolega zasugerował, żebym uruchomił makro z ogromnymi przerwami i w końcu się udało!  Po kilku testach działało ze 100 w każdym tempie, udało mi się sprawić, że działało raz z 20 w pierwszym i 5 w drugim. Będę kontynuował testy, aby zobaczyć minimalny czas oczekiwania.

Wielkie podziękowania dla Ciebie!

 

EDIT²: No cóż, mówiłem trochę szybko. Kiedy uruchamiam go z edytora makr, działa, kiedy robię Tools=>Macro=>Run, już nie działa. Ponieważ muszę połączyć to z inteligentnymi właściwościami, może to nie być problemem, zobaczę, czy za pomocą inteligentnych właściwości to zadziała (w każdym razie Tools=>Macro=>Run nie przechodzi przez makro, ponieważ natychmiast otrzymuję komunikat, że nic nie jest zapisane i to, pomimo tempa 3 razy po 20 sekund)

 

Wreszcie, nawet jeśli oprogramowanie nie pozwala mi uruchomić makra ręcznie, działa ono bez żadnych problemów dzięki inteligentnym właściwościom.


macro1.txt
1 polubienie

Więc jeśli dobrze zrozumiałem, makro działa tak, jak chciałeś, z inteligentnymi właściwościami i krok po kroku, ale nie uruchamiając go za pomocą menu makr?

Zgadza się. Kiedy uruchamiam go za pomocą menu uruchamiania w Narzędzia = > Makro, nie działa. Ale ponieważ nie zamierzam go używać w ten sposób, nie jest to wielka sprawa. 

1 polubienie