[VBA]Wybieranie z drzewa projektu

Cześć wszystkim!

 

Po badaniach i funkcji nagrywania makr udało mi się wymienić komponent za pomocą makra! =)

 

Jest spoko, działa i można wszystko zmienić na cokolwiek innego (w zasadzie musisz wiedzieć, co robisz na montażu)

 

Wszystko pięknie, ale... Udało mi się zrobić tylko "GetSelectedObjectsComponent" =(

Tak więc tam iz powrotem między solidworks a Excelem, aby kontynuować (jeśli kiedykolwiek trzeba będzie dokonać kilku zamienników) to wstyd.

 

Więc moje pytanie brzmiałoby: "Czy w vba byłby sposób na wybranie obiektu w drzewie projektu?"

 

Tak jak robimy, aby wybrać plik w folderze, na przykład zmienną "filename", którą umieszczamy w kodzie, takim jak "open(filename.sldprt)^^

 

Proszę bardzo, po raz kolejny przychodzę, aby ci przeszkadzać, wybacz mi

 

Przyjacielski

 

Yoann powiedział:

Opcja jawna

 

' ******************************************************************************

' C:\Users\jfaradon\AppData\Local\Temp\swx8716\Macro1.swb - makro nagrane 19.02.14 przez jfaradon

' ******************************************************************************

Dim swApp jako SldWorks.SldWorks

 

Oto przykład makra, które zastępuje jeden komponent innym przez wybór (musisz podać nazwę)

 

 

Dim swDoc jako SldWorks.ModelDoc2

Dim swAss jako SldWorks.AssemblyDoc

Dim stOldFileName As String, stNewFileName As String

Dim bStatus As Boolean

 

Sub main()

 

    Ustaw swApp = Application.SldWorks

    Ustaw swDoc = swApp.ActiveDoc

    

    Jeśli swDoc jest niczym, wyjdź z sub

    Jeśli swDoc.GetType <> swDocumentTypes_e.swDocASSEMBLY, wyjdź z sub

    

    Ustaw swAss = swDoc

    stOldFileName = swApp.GetCurrentMacroPathFolder & "\370-TreeManager\370-Burner.SLDPRT"

    stNewFileName = swApp.GetCurrentMacroPathFolder & "\370-TreeManager\370-Burner - Copy.SLDPRT"

    

    swDoc.Extension.SelectByID2 "370-Burner-1@370-Torch", "KOMPONENT", 0, 0, 0, Fałsz, 0, Nic, swSelectOption_e.swSelectOptionDefault

    bStatus = swAss.ReplaceComponents(stNewFileName, "", True, True)

 

    swDoc.Extension.SelectByID2 "370-Burner - Copy-1@370-Torch", "KOMPONENT", 0, 0, 0, False, 0, Nic, swSelectOption_e.swSelectOptionDefault

    bStatus = swAss.ReplaceComponents(stOldFileName, "", True, True)

 

 

Koniec subwoofera

8 polubień

Witam cię jfaradon =)

 

Gdybym dobrze zrozumiał makro, dałoby to coś takiego, aby użytkownik mógł wybrać część w drzewie i tę, która ją zastąpi:

 

 

Dim swDoc jako SldWorks.ModelDoc2

Dim swAss jako SldWorks.AssemblyDoc

Dim stNewFileName As Ciąg

Dim bStatus As Boolean

Przyciemnij kawałek jako ciąg

Dim assem jako ciąg

 

 

 

Sub main()

 

    Ustaw swApp = Application.SldWorks

    Ustaw swDoc = swApp.ActiveDoc

   piece= InPutBox("Nazwa części, która ma zostać zmieniona")

    assem =InPutBox("Otwórz nazwę zestawu")

    Path= InPutBox("Ścieżka części zamiennej")

    Piecebis=InPutBox("Nazwa części zamiennej")

    

    Jeśli swDoc jest niczym, wyjdź z sub

    Jeśli swDoc.GetType <> swDocumentTypes_e.swDocASSEMBLY, wyjdź z sub

    

    Ustaw swAss = swDoc

    stNewFileName = Ścieżka & Fragment & ". SLDPRT"

 

    

    swDoc.Extension.SelectByID2 Element & "@" & assem, "COMPONENT", 0, 0, 0, False, 0, Nothing, swSelectOption_e.swSelectOptionDefault

    bStatus = swAss.ReplaceComponents(stNewFileName, "", True, True)

 

Koniec subwoofera

 

PS: Tak, muszę przyznać, że w drugiej części nie wszystko zrozumiałam^^'

Tak, to wszystko...

i rzeczywiście, nie posprzątałem końca kodu, ostatnie linijki są bezużyteczne...

w rzeczywistości interfejs API ReplaceComponents zastępuje wybrany komponent określonym plikiem

 

 

4 polubienia

To dziwne, to nie ma znaczenia, właśnie spróbowałem wyboru również z getpathname na końcu, aby sprawdzić, czy wybrał część, i zabiera mnie do montażu w msgbox...

 

Tak jakby zmienna swDoc pozostała w wartości swApp.activeDoc

Cze wszystkim!

 

wciąż w moich badaniach!

 

Wypróbowałem funkcję .getbyname, która zadziałała, ale replacecomponents nie zadziałało

 

Próbowałem również zmodyfikować przykład pomocy solidworks, ale na próżno =(

 

Operacja makro:

 

"Wybierz część w drzewie budynków

  Podaj ścieżkę + nazwę części zamiennej
  Wymień część wału na część zamienną"

 

Makro, które mam w tej chwili, nie pokazuje mi żadnych błędów. oprócz.... też nic nie robi :szalony:

 

 

Sub main()

 
path = InputBox("Ścieżka części zamiennej")

piecebis = InputBox("Nazwa części zamiennej")
nazwa_nowego pliku = ścieżka & fragment &". SLDPRT"

   

Ustaw swApp = CreateObject("SldWorks.Application")
    Ustaw swComp = swApp.ActiveDoc
    Ustaw swModel = swApp.ActiveDoc

    Ustaw swAssy = swModel
bstatus = swComp.Extension.SelectByID2("00-XXXXX-0-Came-1@swAssy", "KOMPONENT", 0, 0, 0, Fałsz, 0, Nic, 0)

   

MsgBox (swComp.GetPathName)
   

bstatus = swAssy.ReplaceComponents("C:\PDM\11 SYMULACJA\01 Ciągły kartoniarz\Wprowadzenie produktu\00-XXXXX-0-Plan zwrotu krzywki. SLDPRT", "02", Fałsz, Prawda)

 

MsgBox (swComp.GetPathName)
 
 swAssy.ForceRebuild

 

 

Koniec subwoofera