Witam, muszę wykonać kod z Excela i chciałbym, aby wykonał ten kod w sesji solidworks , której użytkownik nie widzi, a zwłaszcza, że jeśli sesja solidworks jest już otwarta, zanim jej nie dotknie i że użytkownik nadal może nad nią pracować, czas wykonania kodu
w tej chwili używam tego kodu do otwarcia Solidworks, ale nie otwiera on nowej instancji
Dim swApp As SldWorks.SldWorks
Set swApp = CreateObject("SldWorks.Application")
Niekoniecznie zaleca się otwieranie kilku sesji Solidworks na tym samym komputerze, może to prowadzić do konfliktów, począwszy od komunikatu, który pojawia się podczas uruchamiania drugiej sesji:
Używam standardowego PDM, uruchamia on instancję oprogramowania do automatycznego tworzenia plików PDF z zatwierdzonymi rysunkami. Po tej stronie mogą znajdować się przydatne informacje (patrz w Visiativ)
d.roger minęło już kilka lat, odkąd wszyscy biegamy z kilkoma instancjami Solidworks ze względu na zestaw, który mamy, nie powodując żadnego szczególnego problemu
Todesco , niestety, Visiativ dobrze strzeże tych tajemnic^^
Jeśli Solidworks nie zostanie uruchomiony, to za pomocą funkcji "CreateObject" utworzysz nowy obiekt, w przeciwnym razie zawiesisz się na obiekcie, który został uruchomiony. Powinieneś być w stanie użyć funkcji "Shellexecute", aby uruchomić nową instancję programu.
Rzeczywiście, to właśnie na tym torze w tej chwili się zacinam, nie ma problemu, aby założyć nową instancję z powłoką, ale z drugiej strony przywiązać się do tej, a nie do pierwszej instancji stworzonej, to już inna historia :/
Ta druga historia jest już napisana, ale w C#, zobaczmy, czy da się to wszystko przetłumaczyć na vba i tam może być zabawnie, spójrz na zweryfikowaną odpowiedź, która jest tutaj, a następnie po komunikat o pliku dziennika podczas otwierania drugiej instancji musisz zajrzeć TUTAJ. I, nadal w C#, jeśli nie chcesz widzieć początku drugiej instancji Solidworks, musisz umieścić "StartInfo.Arguments = "-m"" we właściwościach, aby przekazać do metody "Start" instancji klasy "Process".
Testowałem (w C#), z wyjątkiem komunikatu pliku dziennika, i działa całkiem nieźle...
[EDYTUJ | EDYTUJ KOD]
Po testach bardzo dobrze sprawdza się również proponowane rozwiązanie dla komunikatu pliku dziennika. Więc masz tylko z 2 proponowanych linków tłumaczenia z C# na VBA do zrobienia i modyfikacji, aby uruchomienie i okno tej nowej instancji Solidworks były niewidoczne. I oczywiście musisz pomyśleć o zwolnieniu wszystkich zasobów i zamknięciu tej instancji Solidworks na końcu makra, w przeciwnym razie proces będzie nadal działał.
Dziękuję za tę pełną informację zwrotną d.roger Po prostu muszę przekonwertować wszystko na VB i że rozumiem C# przy okazji, opublikuję kod VB po przekonwertowaniu dla tych, którzy mogą być zainteresowani
Rzeczywiście, działa to dobrze, poszedłem tą ścieżką na początku, problem polega na tym, że nie mogłem się przypiąć do nowo powstałej instancji, a nie do pierwszej instancji.
Tak, istnieje kilka sposobów na uruchomienie drugiej instancji Solidworks:
Dim objShell As Object
Set objShell = CreateObject("shell.application")
objShell.ShellExecute "C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\SLDWORKS.exe", "", "", "open", vbNormalFocus
Set objShell = Nothing
Jednak głównym problemem jest dołączenie i zarządzanie tą drugą instancją Solidworks bez przeszkadzania użytkownikowi, który pracuje nad pierwszą instancją Solidworks. Widzę jednak, że nadchodzi drugi problem, który może polegać na tym, że jeśli użytkownik otworzy plik Solidworks, klikając go dwukrotnie, plik otworzy się w tej drugiej instancji Solidworks, zamiast otworzyć się w pierwszej instancji.