Nagrywanie w kroku za pomocą makra

Cze wszystkim

Obecnie mam makro otwierające plik 3D z rodziną części, z wyboru użytkownika na liście, a także powiązanego rysunku.
W niektórych przypadkach moi koledzy mogą potrzebować pliku w formacie STEP, więc zwracam się do Ciebie o wyjaśnienie, jak wykonać tę operację za pomocą makra. Oto, co chciałbym zrobić: 

- Zaproponuj użytkownikowi nagranie pliku STEP części, która jest już otwarta za pomocą przycisku "OptionButton",
- Jeśli przycisk jest zaznaczony, chciałbym zapisać plik w STEP pod inną nazwą: STEP_"nazwa wprowadzona wcześniej dla każdego użytkownika"
- W innym pliku, przeznaczonym do hostowania tylko STEP na serwerze z podstawową ścieżką C:\Users\.......\STEP\STEP_"nazwa wcześniej wprowadzona dla użytkownika". KROK

Przejrzałem już rejestrator makr, ale otrzymuję tylko: 

Dim swApp As Object

Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Sub main()

Set swApp = _
Application.SldWorks

Set Part = swApp.ActiveDoc
longstatus = Part.SaveAs3("C:\Users\cbr\Desktop\CAO W25\STEP\STEP.STEP", 0, 0)
End Sub

Ale czy wydaje mi się to dość lekkie, czy naprawdę jest to "takie proste"?

Chciałem też spojrzeć za pomocą makro .PL  : http://www.lynkoa.com/tutos/3d/macro-enregistrer-sous-avec-solidworks ale myślę, że jest to zbyt skomplikowane dla mojego przypadku.

Więc chciałbym wiedzieć, czy ktoś mógłby mi pomóc proszę? 

Dziękuję!

Witam

Ponownie, wszystko jest w pomocy API oprogramowania: http://help.solidworks.com/2017/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.imodeldocextension~saveas.html

i aby określić opcje eksportu: http://help.solidworks.com/2017/english/api/swconst/filesaveasstepoptions.htm

Miłego dnia

4 polubienia

Więc tak też jest, ale nie, to nie będzie dla Ciebie, ponieważ będziesz musiał zastąpić w maco cbr nazwą użytkownika, która teoretycznie jest inna w każdym poście, to jedyny problem, jaki widzę, ah i umieścić również zmienną dla nazwy pliku :)

 

EDIT a priori ten wiersz odpowie na twój problem z różnymi zmiennymi środowiskowymi

MsgBox CreateObject("WScript.Shell").specialfolders("Desktop")

 

2 polubienia

Przede wszystkim dziękuję za odpowiedzi!

remrem zadałem pytanie bezpośrednio na forum, ponieważ rzeczy już zostały zrobione, myślałem, że szybciej znajdę rozwiązania (co jest prawdą). I unikaj wpadania na wyjaśnienia API (co też ma miejsce...), ponieważ nie rozumiem parametrów Option i ExportData. Jeszcze mniej rozumiem, dlaczego w przypadku rejestratora ta składnia nie jest przestrzegana.

MaD ta ścieżka nagrywania jest tymczasowa dla moich testów, ale w rzeczywistości będzie to miejsce na serwerze, więc myślę, że to rozwiązuje ten problem. Zmienna o nazwie jest już utworzona i używana :).
Naprawdę nie rozumiem, co robi ta linia? A quo icorrespond ("WScript.Shell") proszę?

1 polubienie

SA pozwala na stworzenie konkretnego obiektu, który pozwala na pobieranie zmiennych systemowych, jesteśmy bardziej pewni czystego programowania niż makra SW

2 polubienia

Okej, dziękuję za wyjaśnienie. 

Czyli uważasz, że linijka kodu podana przez dyktafon wystarczy? Spróbuję.

Jeśli chodzi tylko o eksport w kroku tak, po tym, jak na linku remrem , możesz wymusić jakąś opcję, jeśli jej potrzebujesz

2 polubienia

Ponownie, zależy to od twojego celu.

Jeśli chcesz wykonać prosty zapis w obszarze i krok. Biorąc to pod uwagę, tak naprawdę nie widzę sensu tworzenia makra na trzy kliknięcia...

Jeśli chcesz wymusić ustawienia, aby mieć pewność, że Twój eksport będzie taki, jak chcesz, a nie zgodnie z ustawieniami komputera, to wszystko jest wyjaśnione w pomocy.

Spróbuj napisać fragment kodu zgodnie z opisem i jeśli napotkasz problem. Wróć do nas, a postaramy się Ci wytłumaczyć lub doradzić... ;-)

2 polubienia

To jest właśnie mój cel, no cóż, nie chodzi o to, aby uniknąć 3 kliknięć, ale po to, aby zawsze mieć tę samą nazwę folderu, nazwę pliku i tę samą ścieżkę do rekordu.

Wypróbowałem więc proste rozwiązanie i działa w jednym przypadku, ale nie w drugim:
 

'Pour l'enregistrement en fichier STEP
                         If Check_step.Value = True Then
                            EnregistrementSTEP = Part.SaveAs3("C:\Users\cbr\Desktop\CAO W25\STEP\STEP_" & ActiveConfiguration & ".STEP", 0, 0)
                            MsgBox "Le fichier STEP a été enregistré dans le dossier suivant : C:\Users\cbr\Desktop\CAO W25\STEP" & Chr(10) & "Sous le nom suivant : STEP_" & ActiveConfiguration, vbInformation, "Emplacement du fichier"
                         End If

Mam dokładnie ten sam kod. W jednym przypadku działa, aw drugim pojawia się błąd "Run-time error '91'", ale nie widzę, co jest nie tak. Pewnie jakiś nieokreślony element, ale nie widzę.

Witam

Właśnie dowiedziałem się, że metoda SaveAs3 stała się przestarzała w 2017 roku. Musimy teraz użyć tego: http://help.solidworks.com/2017/english/api/sldworksapi/SOLIDWORKS.Interop.sldworks~SOLIDWORKS.Interop.sldworks.IModelDocExtension~SaveAs.html

Ouch! Będę musiał przejrzeć część mojej aplikacji w VB.net....

Edycja: Zwróć uwagę na ten akapit:

"Aby zapisać jako plik IGES, STL lub STEP, dokument do konwersji musi być dokumentem aktywnym. Przed wywołaniem tej metody:

  1. Wywołaj ISldWorks::ActivateDoc3 , aby utworzyć dokument do konwersji aktywnego dokumentu.
  2. Wywołaj ISldWorks::ActiveDoc , aby pobrać aktywny dokument."

Cholera, to prawda, że kod zmienia się w zależności od wersji SW...
Jestem w 2015 roku, więc SaveAs3 działa w domu, ale SaveAs nie działa...
Tak, dziękuję, to właśnie zauważyłem po opublikowaniu mojego komentarza.

Czy istnieje sposób, w jaki istniejąca tabela, pozwalająca poznać "przestarzałe metody"? Bo bez tego przysporzy mi to problemów.

Aby to zrobić, w pomocy możesz zmienić wersję docelową za pomocą menu rozwijanego w prawym górnym rogu.

Przykład: Jeśli zmienię na 2015, SaveAs3 jest nadal przestarzały. Jeśli spróbuję w 2010 roku, nie jest dostępny.

1 polubienie

Dobry wieczór

Uh, przestarzałe funkcje nie są już użyteczne. Nadal używam makr vba w SaveAs2 na SW2016 i działa bardzo dobrze (do eksportu w kroku, stl, iges, pdf)

2 polubienia

Cześć Cyril.f

Dziękuję za wyjaśnienie. Zamierzam się w to zagłębić, aby zobaczyć, skąd bierze się problem.

Dostępność lub brak niektórych funkcji oprogramowania zależy od przywoływanej biblioteki dll.

Z pamięci VBA nie tworzy kopii przywoływanych bibliotek DLL, używa dostępnej. Może się zdarzyć, że niektóre funkcje zostały usunięte w ostatnich bibliotekach DLL.

Dassault nie zawraca sobie głowy naprawianiem swoich bibliotek DLL, dodaje funkcje, parametry i procedury w razie potrzeby. 

Ma to co najmniej jedną zaletę, którą jest to, że można pisać makra zgodne wstecz, ale także kompatybilne z nowszymi wersjami, ale z utratą niektórych funkcji.

2 polubienia