I'm trying to run a macro on to pull the mass property data on a large assembly file.
I'd like for it to only run on the parts/assemblies that I have isolated. It was working before, but now it is trying to run on the entire file (as if I didn't have anything isolated). I am at the extent of my know how. Can anyone point me in the right direction?
Dim swApp As SldWorks.SldWorks
Dim SwModel As SldWorks.ModelDoc2
Dim swModExt As SldWorks.ModelDocExtension
Dim swAssembly As SldWorks.AssemblyDoc
Dim SwComp As SldWorks.Component2
Dim MassProp As SldWorks.MassProperty
Dim Component As Variant
Dim Components As Variant
Dim Bodies As Variant
Dim BodyInfo As Variant
Dim CenOfM As Variant
Dim RetBool As Boolean
Dim Path As Variant
Dim RetVal As Long
Dim xlApp As Excel.Application
Dim xlWorkBooks As Excel.Workbooks
Dim xlBook As Excel.Workbook
Dim xlsheet As Excel.Worksheet
Dim OutputPath As String
Dim OutputFN As String
Dim xlCurRow As Integer
Sub main()
Set swApp = Application.SldWorks
Set SwModel = swApp.ActiveDoc
If SwModel Is Nothing Then
swApp.SendMsgToUser2 "An assembly must be an active document.", swMbWarning, swMbOk
Exit Sub
End If
If SwModel.GetType <> swDocASSEMBLY Then
swApp.SendMsgToUser2 "An assembly must be an active document.", swMbWarning, swMbOk
Exit Sub
Else
Set swAssembly = SwModel
End If
Set swModExt = SwModel.Extension
Set MassProp = swModExt.CreateMassProperty
'OutputPath = Environ("USERPROFILE") & "\Desktop\"
'OutputFN = SwModel.GetTitle & ".xlsx"
'If Dir(OutputPath & OutputFN) <> "" Then
'Kill OutputPath & OutputFN
'End If
Set xlApp = Excel.Application
xlApp.Visible = True
Set xlWorkBooks = Excel.Workbooks
Set xlBook = xlWorkBooks.Add()
Set xlsheet = xlBook.Worksheets("Sheet1")
xlsheet.Range("A1").Value = "TCG (m)"
xlsheet.Range("B1").Value = "VCG (m)"
xlsheet.Range("C1").Value = "LCG (m)"
xlsheet.Range("D1").Value = "Mass (kg)"
xlsheet.Range("G1").Value = "Path"
xlsheet.Range("I1").Value = "Type"
xlsheet.Range("H1").Value = "Part"
xlsheet.Range("E1").Value = "Volume"
xlsheet.Range("F1").Value = "Density"
'xlBook.SaveAs OutputPath & OutputFN
xlCurRow = 2
RetVal = swAssembly.ResolveAllLightWeightComponents(False)
Components = swAssembly.GetComponents(False)
For Each Component In Components
Set SwComp = Component
If SwComp.GetSuppression <> 0 Then
'If LCase(Right(SwComp.GetPathName, 3)) <> "asm" Then
Bodies = SwComp.GetBodies2(0)
'MsgBox SwComp.Name
'If Bodies <> Empty Then
RetBool = MassProp.AddBodies(Bodies)
CenOfM = MassProp.CenterOfMass
xlsheet.Range("A" & xlCurRow).Value = CenOfM(0) * -1
xlsheet.Range("B" & xlCurRow).Value = CenOfM(1)
xlsheet.Range("C" & xlCurRow).Value = CenOfM(2)
xlsheet.Range("D" & xlCurRow).Value = MassProp.Mass
xlsheet.Range("E" & xlCurRow).Value = MassProp.Volume 'Added by Vince
xlsheet.Range("F" & xlCurRow).Value = MassProp.Density 'Added by Vince
xlsheet.Range("H" & xlCurRow).Value = SwComp.Name
xlsheet.Range("G" & xlCurRow).Value = SwComp.GetPathName
If LCase(Right(SwComp.GetPathName, 3)) = "asm" Then
xlsheet.Range("I" & xlCurRow).Value = "Assembly"
ElseIf LCase(Right(SwComp.GetPathName, 3)) = "prt" Then
xlsheet.Range("I" & xlCurRow).Value = "Part"
Else
xlsheet.Range("I" & xlCurRow).Value = "ERROR IN MASS PROPS OUTPUT"
End If 'Right 3 of file extension
xlCurRow = xlCurRow + 1
'End If 'UBound(Bodies) <> -1
'End If 'Not an Assembly
End If 'swComp.GetSuppression <> 0
Next Component
xlsheet.UsedRange.EntireColumn.AutoFit
'xlBook.Save
'xlWorkBooks.Close
'xlApp.Quit
End Sub