ds-blue-logo
Preview  |  SOLIDWORKS USER FORUM
Use your SOLIDWORKS ID or 3DEXPERIENCE ID to log in.
RMRiccardo Mattioli14/12/2011

Hi there,

I'm successfully using this wonderful macro posted by Josh Brady:

-------------------------------------------------------------------------------------------

Sub UpdateQtys()

Dim swApp as SldWorks.SldWorks 'added this line

Dim Assembly as ModelDoc2 'added this line

Dim myAsy As AssemblyDoc

Dim myCmps

Dim Cfg As String

Dim CmpDoc As ModelDoc2

Dim i As Long

Dim j As Long

Dim cCnt As Long

Dim NoUp As Long

Dim myCmp As Component2

Dim tCmp As Component2

dim tm as double

tm = timer

Set swApp = Application.Sldworks 'added this line

Set Assembly = swApp.ActiveDoc 'added this line

Set myAsy = Assembly

If Assembly.ConfigurationManager.ActiveConfiguration.Name <> Assembly.CustomInfo2("", "Cfg4Qty") Then

Assembly.Extension.ShowSmartMessage "Qtys not updated due to config", 1000, True, True

Exit Sub

End If

NoUp = 0

myCmps = myAsy.GetComponents(False)

For i = 0 To UBound(myCmps)

Set myCmp = myCmps(i)

If (myCmp.GetSuppression = 3) Or (myCmp.GetSuppression = 2) Then

cCnt = 0

Set CmpDoc = myCmp.GetModelDoc

Cfg = myCmp.ReferencedConfiguration

For j = 0 To i 'originally was "For j = 0 To UBound(myCmps)", I just changed it to make it faster, and it works (Riccardo)

Set tCmp = myCmps(j)

If tCmp.GetSuppression <> 0 Then

If tCmp.GetModelDoc2 Is CmpDoc Then

If tCmp.ReferencedConfiguration = Cfg Then

cCnt = cCnt + 1

End If

End If

End If

Next j

CmpDoc.AddCustomInfo3 Cfg, "AutoQty", 30, ""

CmpDoc.AddCustomInfo3 Cfg, "QtyIn", 30, ""

CmpDoc.CustomInfo2(Cfg, "AutoQty") = cCnt

CmpDoc.CustomInfo2(Cfg, "QtyIn") = Assembly.GetTitle & " Cfg " & Assembly.ConfigurationManager.ActiveConfiguration.Name

Else

NoUp = NoUp + 1

End If

Next i

Assembly.Extension.ShowSmartMessage NoUp & " Parts not updated due to lightweight (" & timer - tm & "s)", 10000, True, True

end sub

-------------------------------------------------------------------------------------------

Well, it works great, and I'm using it a lot, since it does what I was looking for from years: it calculates the quantities of parts in an assembly and writes it down into configuration-specific custom properties.

1) Here comes a subtle problem. It writes down the quantities in configuration-specific custom properties, but many of my drawings are already linked to general custom properties or to DefaultFlatPattern custom properties. How can I make it write the same property (AutoQty) into general custom properties too?

2) For large (100+ components) the cycle becomes really slow: is there a way to make it faster? I already made a modification, but it's not fast enough...

Thank you for your collaboration and best regards!

Riccardo