Chcę otworzyć pokój i jego plan z pliku Excel, zapisać ten pokój pod nową nazwą "zapisz jako" i aby plan był aktualny pod względem referencyjnym przed zapisaniem go po kolei.
Mogę otwierać pliki jednocześnie i zapisywać je pod nową nazwą. Ale ujęcie zawsze wskazuje na drugi pokój.
Jednak w manualu to działa. Wygląda na to, że rekord nie zapisuje Undera, ale raczej zapisuje kopię.
Otwieram tą metodą:
Set swModel = swApp.OpenDoc6("link do mojego planu", 3, 0, "", myError, myWarning)
A ja nagrywam z tym:
swModel.SaveAs2 "nowy link", 0, Prawda, Fałsz
PS: A tak przy okazji, jeśli ktoś ma trik, aby jednocześnie zmienić właściwość Oznaczenie części, bardzo by mi to pomogło.
To wszystko znajduje się w makrze sbadenis (czyli +1 dla niego), zwłaszcza w funkcji ReplaceReferencedDocument. Na przykład:
Option Explicit
Const sReferencingDoc As String = "C:\Users\XXX\Desktop\Temp\Pièce5.SLDDRW"
Const sOldDoc As String = "C:\Users\XXX\Desktop\Temp\Pièce5.sldprt"
Const sNewDoc As String = "C:\Users\XXX\Desktop\Temp\Pièce1.sldprt"
Sub main()
Dim swApp As SldWorks.SldWorks
Dim bRet As Boolean
Set swApp = CreateObject("SldWorks.Application")
bRet = swApp.ReplaceReferencedDocument(sReferencingDoc, sOldDoc, sNewDoc)
End Sub
Do użycia bez otwierania któregokolwiek z dokumentów w Solidworks!!
W swojej linii "swModel.SaveAs2 "nowy link", 0, Prawda, Fałsz", "Prawda" oznacza "SaveAsCopy" = tak ... ale ten wiersz nie jest już potrzebny, jeśli używasz funkcji ReplaceReferenceDocument...
Dziękuję za odpowiedzi, w rzeczywistości zastąpienie Prawdy Fałszem wystarczyło, aby zaspokoić moją potrzebę.
FYI Koduję z Excela i mam wrażenie, że niektóre rzeczy nie działają tak samo. Podobnie jak linie z bRet, widziałem już niektóre ze zmianą właściciela, ale nie działa to w Excelu, podczas gdy w Solid tak.
Mam jeszcze jedną wadę do poprawienia. Pozwól, że wyjaśnię:
Mam zestaw "A", który zawiera zestaw "B"
"A" i "B" zawierają część "C".
Jeśli zamienię część C na część D w zespole A, część w zespole B również zostanie wymieniona (taki jest cel).
Kończę, zapisując mój zestaw A. Zwracam jednak uwagę, że w tym samym czasie zarejestrowano montaż B.
Ale ja nie chcę tego robić. Umieściłem jednak 0 jako opcję zapasową, ale zauważyłem, że teoretycznie powinniśmy wskazać, aby zapisać referenty za pomocą swSaveAsOptions_SaveReferenced, ale jak zmusić go, aby ich nie zapisywał?
Naprawdę nie widzę sensu zastępowania twojej części C częścią D w twoim zespole B, jeśli nie chcesz oszczędzać tego zespołu B, równie dobrze możesz zastąpić część C swoją częścią D tylko w swoim zespole A i zachować swój zespół B częścią C ...
Funkcja SaveAs2 spełnia Twoje potrzeby, ale nie powinieneś umieszczać 0 w opcjach zapisywania, nie jest to prawidłowa opcja, musisz zsumować dokonane wybory, na przykład:
1 + 2 dla swSaveAsOptions_Silent i swSaveAsOptions_Copy
1 + 512 dla swSaveAsOptions_Silent i swSaveAsOptions_CopyAndOpen