Hallo zusammen, ich versuche mich gerade daran die BOM in eine Vorlage-Excel einzufügen. Leider klappt es noch nicht so recht. Vlt. kann mir ja einer Helfen.
Folgende Regel habe ich aufgestellt:
Sub Main()
'Declarations
Dim oAssyDoc As AssemblyDocument
oAssyDoc = ThisApplication.ActiveDocument
Dim oAssyCompDef As AssemblyComponentDefinition
oAssyCompDef = oAssyDoc.ComponentDefinition
'Get path of current document
Dim sPath As String = ThisDoc.Path
'Set to Master LevelOfDetail. Needs to be Master LoD for BOM manipulation
Dim oLOD As LevelOfDetailRepresentation
Try
oLOD = oAssyCompDef.RepresentationsManager.LevelOfDetailRepresentaions.Item("Hauptansicht")
Catch ex As System.ArgumentException
Finally
oLOD.Activate(True)
End Try
'Get BOM from Assembly
Dim oBOM As BOM
oBOM = oAssyCompDef.BOM
Logger.Trace("oBOM is set")
Dim oBOMView As BOMView
oBOMView = oBOM.BOMViews.Item("Strukturiert")
'oBOMView = oBOM.BOMView.Item("nurBauteile")
Logger.Trace("oBOMView is set")
oBOM.StructuredViewEnabled = True
'oBOM.nurBauteileViewEnabled = True
oBOM.StructuredViewFirstLevelOnly = True
'BOM Export
'Copy Job Information Spreadsheet from workspace
Dim aJobBOMTempName As String = String.Concat(sPath, "\_BOM_Template.xls")
Dim aJobBOMName As String = String.Concat(sPath, "\", "BOM Export.xlsx")
Logger.Trace("sJobBOMName: " & sJobBOMName)
Try
IO.File.Copy(sJobBOMTempName, sJobBOMName, True)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
Dim sMySheet As String = "BOM"
Static iCurrRow As Integer = 3
GoExcel.DisplayAlerts = False
GoExcel.Open(sJobBOMName, sMySheet)
'Write BOM values to Excel
Call QueryBOMRowProperties(oBOMView.BOMRows, sJobBOMName, iCurrRow)
oAssyDoc.Save
'Wriet assembly information
GoExcel.CellValue("D1") = String.Concat("JOB: ", iProperties.Value("Custom", "Job Number"))
Dim sVar As String
sVar = GoExcel.CellValue("D1")
'Save Excel
GoExcel.Save
GoExcel.Close
'Set to iLogic LevelOfDetail
Try
oLOD = oAssyCompDef.RepresentationsManager.LevelOfDetailRepresentations.Item("iLogic")
Catch es As System.ArgumentException
oLOD = oAssyCompDef.RepresentationsManager.LevelOfDetailRepresentations.Add("iLogic")
Finally
oLOD.Activate(True)
End Try
'Massage Box
Dim sMassege As String = "BOM Export Complete."
Dim sCaption As String = "BOM Export Complete"
Dim oButtons As MassageBoxButton = MessageBoxButtons.OK
Dim oIcons As MessageBoxIcon = MessageBoxIcon.Information
Dim oResult As DialogResult
'Display the MessageBox
oResult = MessageBox.Show(sMessage, sCaption, oButtons, oIcons)
End Sub
Public Sub QueryBOMRowProperties(oBOMRows As BOMRowsEnumerator, JobSpreadsheetName As String, iCurrRow As Integer)
'Iterate through the contents of the BOM Rows.
Static CurrentRow As Integer = iCurrRow
Dim i As Long
Dim sWriteCell As String
For i = 1 To oBOMRows.Count
'Get the current row
Dim oRow As BOMRow
oRow = oBOMRows.Item(i)
'Set a reference to the primary ComponentDefinition of the row
Dim oCompDef As ComponentDefinition
oCompDef = oRow.ComponentDefinitions.Item(1)
Dim oPropSets As PropertySets
oPropSets = oCompDef.Document.PropertySets
oDesignTrackingPropertySet = oPropSets.Item("Design Tracking Properties")
oInventorSummaryPropertySet = oPropSets.Item("Inventor Summary Information")
oCustomPropertySets = oPropSets.Item("Inventor User Defines Properties")
'Get the File properties that are reguired
oItemNumberProperty = oRow.ItemNumber
oPartNumProperty = oDesignTrackingPropertySet.Item("Part Number")
oDescripProperty = oDesignTrackingPropertySet.Item("Description")
oTitleProperty = oInventorSummaryPropertySet.Item("Title")
Trace.WriteLine("iLogic: oltemNumberProperty: " & oltemNumberProperty & " | " & oPartNumProperty.Value & " | " & oDescripProperty.Value)
'Check to see if row is from Content Center
Dim Ex As Exception
Try
If oCompDef.IsContentMember = False Then
Trace.WriteLine("iLogic: bCCComp: " & bCCComp)
bCCComp = False
Try
oPMCodeProperty = oCustomPropertySet.Item("P/M Code")
Catch Ex 'As Exception
oCustomPropertySet.Add("", "P/M Code")
oPMCodeProperty = oCustomPropertySet.Item("P/M Code")
oPMCodeProperty.Value = "U"
End Try
Else
bCCComp = True
End If
Catch Ex 'As Exception
bCCComp = False
Try
oPMCodeProperty = oCostomPropertySet.Item("P/M Code")
Catch Ex 'As Exception
oCustomPropertySet.Add("", "P/M Code")
oPMCodeProperty = oCustomPropertySet.Item("P/M Code")
oPMCodeProperty.Value = "U"
End Try
End Try
sWriteCell = "A" & CurrentRow
GoExcel.CellValue(sWriteCell) = oItemNumberProperty
sWriteCell = "B" & CurrentRow
GoExcel.CellValue(sWriteCell) = oRow.ItemQuantity
sWriteCell = "C" & CurrentRow
GoExcel.CellValue(sWriteCell) = oPartNumProperty.Value
sWriteCell = "D" & CurrentRow
GoExcel.CellValue(sWriteCell) = oTitleProperty.Value
sWriteCell = "E" & CurrentRow
GoExcel.CellValue(sWriteCell) = oDescripProperty.Value
sWriteCell = "F" & CurrentRow
If bCCComp = False Then
GoExcel.CellValue(sWriteCell) = oPMCodeProperty.Value
Else
GoExcel.CellValue(sWriteCell) = "P"
End If
' Increment current row
CurrentRow = CurrenRow + 1
'Recursively iterate child rows if present.
If Not oRow.ChildRows Is Nothing Then
Call QueryBOMRowProperties(oRow.ChildRows, JobSpreadsheetName, CurrentRow)
Else
End If
Next i
End Sub
Dabei kommt es zu folgenden Fehlern:
Regelkompilierungsfehler in API_Advanced_Export_A, in Test_Baugruppe_01.iam
Fehler in Zeile 84 : Der Typ "MassageBoxButton" ist nicht definiert.
Fehler in Zeile 132 : "oCustomPropertySet" ist nicht deklariert. Auf das Objekt kann aufgrund der Schutzstufe möglicherweise nicht zugegriffen werden.
Fehler in Zeile 134 : "oCustomPropertySet" ist nicht deklariert. Auf das Objekt kann aufgrund der Schutzstufe möglicherweise nicht zugegriffen werden.
Fehler in Zeile 135 : "oCustomPropertySet" ist nicht deklariert. Auf das Objekt kann aufgrund der Schutzstufe möglicherweise nicht zugegriffen werden.
Fehler in Zeile 144 : "oCostomPropertySet" ist nicht deklariert. Auf das Objekt kann aufgrund der Schutzstufe möglicherweise nicht zugegriffen werden.
Fehler in Zeile 146 : "oCustomPropertySet" ist nicht deklariert. Auf das Objekt kann aufgrund der Schutzstufe möglicherweise nicht zugegriffen werden.
Fehler in Zeile 147 : "oCustomPropertySet" ist nicht deklariert. Auf das Objekt kann aufgrund der Schutzstufe möglicherweise nicht zugegriffen werden.
Jemand ne Idee?
Grüße in die Runde
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP