Hallo
Ik heb een korte vraag over VBA Sldw macro's.
In een assembly wil ik zoeken naar een "X" component in de boom en als die aanwezig is, dan pas ik mijn assembly aan.
Het onderdeel kan zich op het eerste niveau of in een subassemblage bevinden.
Hallo
Ik heb een korte vraag over VBA Sldw macro's.
In een assembly wil ik zoeken naar een "X" component in de boom en als die aanwezig is, dan pas ik mijn assembly aan.
Het onderdeel kan zich op het eerste niveau of in een subassemblage bevinden.
Ik zou beginnen met deze code , de http://help.solidworks.com/2016/english/api/sldworksapi/get_dependencies_for_open_and_unopened_documents_example_vb.htm waarmee je de externe referenties kunt vinden en je past deze aan zodat ze een waarschuwing geven als het genoemde onderdeel in de lijst aanwezig is
Dus als ik het goed begrijp, geeft het een expliciete optie
Sub hoofd()
Dim swApp als SldWorks.SldWorks Dim swModel als SldWorks.ModelDoc2 dim vDepend als variant Dim bRet als Booleaanse dim i zo lang
Stel swApp = Application.SldWorks in Stel swModel = swApp in.ActiveDoc
vDepend = swApp. GetDocumentDependencies2("PartSearch-1", True, True, False) If IsEmpty(vDepend) dan Debug.Print " Geen afhankelijkheden." Exit Sub else boolstatus = "wat ik wil doen met mijn Assembly End If
Voor i = 0 TB (UBound(vDepend) - 1) / 2 Debug.Print " " + vDepend(2 * i) + " --> " + vDepend(2 * i + 1) Volgende i
Einde Sub
Wat is het doel van de bRet? Ik stel me voor dat de laatste drie regels (For i ...) naar beneden gaan in de verschillende niveaus van de boom.
In ieder geval bedankt voor je antwoord
Bijvoorbeeld, ja, het belangrijkste zit op het niveau van het gebied
Voor i = 0 TB (UBound(vDepend) - 1) / 2
Als vDepend(2 * i) = "bladas" Dan MsgBox "bladas aanwezig in montage"
volgende i
Of u kunt schuiven zoals er een knop op de naam van de kamer
Optie Expliciete
Sub hoofd()
(') Naam van het ongeopende document
Const sDefaultName As String = "c:\program files\solidworks corp\solidworks\samples\tutorial\advdrawings\98food processor.sldasm"
Dim swApp als SldWorks.SldWorks
Dim swModel als SldWorks.ModelDoc2
Dim sDocName als tekenreeks
Dim vDepend als variant
Dim bRet als Booleaanse
Zon i Zo lang
Stel swApp = Toepassing.SldWorks in
Stel swModel = swApp.ActiveDoc in
Zo niet, dan is swModel niets
sDocName = swModel.GetPathName
Anders
sDocName = sDefaultName
Einde als
vDepend = swApp.GetDocumentDependencies2(sDocName, True, True, False)
'Foutopsporing.Print sDocName
Als IsEmpty(vDepend) dan
Sub afsluiten
Einde als
Voor i = 0 TB (UBound(vDepend) - 1) / 2
Als vDepend(2 * i) = "bladas" Dan MsgBox "bladas aanwezig in montage"
volgende i
Einde Sub
In vereenvoudigde versie en met ondersteuning voor verschillende gezochte onderdelen
Optie Expliciete
Sub hoofd()
Dim swApp als SldWorks.SldWorks
Dim swModel als SldWorks.ModelDoc2
Dim vDepend als variant
Dim bRet als Booleaanse
Zon i Zo lang
Stel swApp = Toepassing.SldWorks in
Stel swModel = swApp.ActiveDoc in
Als swModel niets is, sluit dan Sub af
vDepend = swApp.GetDocumentDependencies2(swModel.GetPathName, Waar, Waar, Onwaar)
Als IsEmpty(vDepend) dan Sub afsluiten
Dim Ref als variant
Voor i = 0 TB (UBound(vDepend) - 1) / 2
Voor elke Ref In Array ("aandrijfas", "aandrijfaspen")
Als vDepend(2 * i) = Ref, dan is MsgBox Ref & " aanwezig in de assembly."
Volgende Ref
volgende i
Einde Sub
De te wijzigen regel is als volgt
Voor elke Ref In Array ("aandrijfas", "aandrijfaspen")
of aandrijfas en aandrijfas pin klinken de namen van de gezochte onderdelen, je kunt er zoveel plaatsen als je wilt, zolang je de exrituur herhaalt ("X", "Y", "Z", "enz.")
Perfect, het is me gelukt om te doen wat ik wilde, ik heb de functie gegeneraliseerd op basis van wat ik wil doen:
Dim swApp als object
Deel dimmen als object
Dim boolstatus als Booleaanse
Dim longstatus As Long, longwarnings As Long
Sub hoofd()
Stel swApp = Toepassing.SldWorks in
Deel instellen = swApp.ActiveDoc
Als GetCompInAss("Part2") = waar dan
Als het document vervolgens het volgende presenteert:
boolstatus = Part.Extension.SelectByID2("Part2-1@Assembly", "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)
Deel.EditDelete 'Verwijderen
Einde als
Einde Sub
Functie GetCompInAss (DocCible als variant)
Dim vDepend als variant
Dim bRet als Booleaanse
Zon i Zo lang
Dim swModel als SldWorks.ModelDoc2
Stel swModel = swApp.ActiveDoc in
vDepend = swApp.GetDocumentDependencies2(swModel.GetPathName, Waar, Waar, Onwaar)
Als IsEmpty (vDepend) dan Exit Functie
Voor i = 0 TB (UBound(vDepend) - 1) / 2
Als vDepend(2 * i) = DocTarget Dan
GetCompInAss = Waar
Einde als
Debug.Print " " + vDepend(2 * i) + " --> " + vDepend(2 * i + 1)
volgende i
Functie beëindigen
Laatste vragen, waar is de bRet voor? Ik ben genoodzaakt om het document in de functie kan niet worden vermeden dit soort redundantie ?
Als je een andere onderwerping om de code te vereenvoudigen, ben ik geïnteresseerd.
In ieder geval bedankt voor je hulp.
bRet is nutteloos in de macro
Die kan als volgt worden vereenvoudigd
Dim swApp als object
Deel dimmen als object
Dim boolstatus als Booleaanse
Dim longstatus As Long, longwarnings As Long
Sub hoofd()
Stel swApp = Toepassing.SldWorks in
Deel instellen = swApp.ActiveDoc
Als GetCompInAss("Part2") = waar dan
Als het document vervolgens het volgende presenteert:
boolstatus = Part.Extension.SelectByID2("Part2-1@Assemblage", "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)
Deel.EditDelete 'Verwijderen
Einde als
Einde Sub
Functie GetCompInAss (DocCible als variant) als Booleaanse
Dim vDepend als variant
Zon i Zo lang
Dim swModel als SldWorks.ModelDoc2
Stel swModel = swApp.ActiveDoc in
vDepend = swApp.GetDocumentDependencies2(swModel.GetPathName, Waar, Waar, Onwaar)
Als IsEmpty (vDepend) dan Exit Functie
Voor i = 0 TB (UBound(vDepend) - 1) / 2
Als vDepend(2 * i) = DocCible, dan is GetCompInAss = True
volgende i
Functie beëindigen
hallo MaD,
Ik heb je macro terug, die werkt prima.
Ik wil de gevonden component verbergen => hoe doe ik dat?
Bedankt
Probeer het volgende:
Part.EditDelete 'Delete - Te vervangen door de onderstaande Part.HideComponent2() ' Verberg de component