Hot News aus dem CAD.de-Newsletter:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor VBA
  Stückliste in Baugruppe sortieren und in csv- oder Excel-Datei exportieren

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:   Stückliste in Baugruppe sortieren und in csv- oder Excel-Datei exportieren (133 mal gelesen)
Honigbär
Mitglied
Angestellter


Sehen Sie sich das Profil von Honigbär an!   Senden Sie eine Private Message an Honigbär  Schreiben Sie einen Gästebucheintrag für Honigbär

Beiträge: 120
Registriert: 22.10.2006

CATIA V5 R24
Solid Edge Version 17
Pro-E Wildfire 4.0
Autodesk Inventor Professional 2014
MathCAD 13
Intel Centrino 2 (Pentium III Xeon) 2,53 GHz
6GB RAM
Win 7 Ultimate (64 Bit)
ATI Mobility Radeon HD 4650
SSD von Samsung (Festplatte)

erstellt am: 12. Jul. 2018 15:10    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo zusammen,

mein Ziel ist folgendes:
Ich will die Stückliste in der Baugruppe (iam-Datei) im Reiter "Strukturiert" sortieren (Fertigungsteile zuerst, danach Kaufteile und zuletzt Normteile aus der Inventor-Bibliothek). Damit VBA das sortieren und zuordnen kann, gibt es einen entsprechenden Hinweis in der Spalte "Bestandsnummer".
Anschließend soll dies als csv- oder Excel Datei exportiert werden.

Mit ein bisschen Recherche habe ich diesen Code gefunden (von hier), um erstmal eine Basis zu haben mit der ich arbeiten kann:

Code:

Option Explicit
Dim PMarke As String
Dim PMarkeH As String
Dim AXArray(5000, 20) As String
Dim iZeile As Integer

Public Sub Btn_Stuecklistenerstellung_Click()

    Dim oAsmDoc As AssemblyDocument
    Set oAsmDoc = ThisApplication.ActiveDocument
    Dim oBOM As BOM
    Set oBOM = oAsmDoc.ComponentDefinition.BOM
    oBOM.StructuredViewFirstLevelOnly = False
    oBOM.StructuredViewEnabled = True
    Dim oStructuredBOMView As BOMView
    Set oStructuredBOMView = oBOM.BOMViews.Item("Strukturiert")
    Dim byWert As Byte
    Dim oPfad As String
    Dim uFolder, FileName, oFolderAXS As String
   
    'ExportPfad zuweisen
    oFolderAXS = "C:\ExportAX\"

    'Hinweisfenster ob der Stücklistenexport gestartet werden soll
    byWert = MsgBox("Soll die Stückliste exportiert werden?", vbOKCancel, "Stücklistenexport")
    If byWert = 2 Then Exit Sub

    Erase AXArray  'AXArray wird gelöscht
    iZeile = 2      'Zeile 0 und 1 werden separat erzeugt
 
    'die Teileliste aus der .iam wird angepasst und in das AXArray geschrieben
    addRow "", oStructuredBOMView.BOMRows, True
 
    'Ordner und Datei für das Exportfile wird erstellt
    uFolder = Mid(AXArray(2, 2), 3, 3)
    oPfad = oFolderAXS & uFolder
    Call CreateFolder.CreateFolder(oPfad)
    FileName = oPfad & "\" & Mid(AXArray(2, 2), 3, Len(AXArray(2, 2)) - 2) & " Rev" & AXArray(2, 9) & ".txt"
   
    'AXArray wird in eine .txt Datei exportiert
    Open FileName For Output As #1
        Dim i As Integer
        For i = 1 To iZeile  '1= mit Spaltenüberschriften, 2= ohne Spaltenüberschriften
            Print #1, AXArray(i, 1) & "|" & AXArray(i, 2) & "|" & AXArray(i, 3) & "|" & AXArray(i, 4) & "|" & AXArray(i, 5) _
            & "|" & AXArray(i, 6) & "|" & AXArray(i, 7) & "|" & AXArray(i, 8) & "|" & AXArray(i, 9) _
            & "|" & AXArray(i, 10) & "|" & AXArray(i, 11) & "|" & AXArray(i, 12) & "|" & AXArray(i, 13) _
            & "|" & AXArray(i, 14) & "|" & AXArray(i, 15) & "|" & AXArray(i, 16) & "|" & AXArray(i, 17) _
            & "|" & AXArray(i, 18) & "|" & AXArray(i, 19) & "|" & AXArray(i, 20)
        Next i
    Close #1 'Export-Datei schließen
 
  'Hinweisfenster oder Notepad zum Ende des Exports anzeigen
    'MsgBox "Stücklistenexport war erfolgreich!", vbOKOnly, "Stücklistenexport"
    Shell ("notepad.exe " + FileName)
End Sub

Private Function addRow(Parent As String, oBomRows As BOMRowsEnumerator, Optional header As Boolean = False)
    Dim oPart As Document
    Set oPart = ThisApplication.ActiveDocument
    Dim oBomRow As BOMRow
    Dim TName As String
    Dim oFileNameIDW As String
    Dim oTextBSZ, Temp As String
    Dim HauptBG, UnterBG, TNummer As String
    Dim NameEng, NameFra, oRevNum As String
    On Error Resume Next
   
    'Header wird erstellt (nur beim 1. drchlauf)
    If header = True Then
        'Zeile 1 = Spaltenüberschriften
        AXArray(1, 1) = "Pos"
        AXArray(1, 2) = "HauptBG"
        AXArray(1, 3) = "Anz"
        AXArray(1, 4) = "Teilenummer"
        AXArray(1, 5) = "Benennung"
        AXArray(1, 6) = "Englisch"
        AXArray(1, 7) = "Französisch"
        AXArray(1, 8) = "Unterbenennung"
        AXArray(1, 9) = "Rev"
        AXArray(1, 10) = "Erstelldatum"
        AXArray(1, 11) = "Material/Norm"
        AXArray(1, 12) = "MatNummer"
        AXArray(1, 13) = "Länge"
        AXArray(1, 14) = "Breite"
        AXArray(1, 15) = "Werkstoff"
        AXArray(1, 16) = "Rohteilgewicht"
        AXArray(1, 17) = "Bauteilgewicht"
        AXArray(1, 18) = "Artikelstatus"
        AXArray(1, 19) = "Zusatztext"
        AXArray(1, 20) = "Speicherort"
       
        'Zeile 2 = Die oberste Hauptbaugruppe wird erstellt
        Temp = BulTools.Translate(oPart.PropertySets(1).Item("Title").Value, NameEng, NameFra)
        PMarkeH = oPart.PropertySets(4).Item("Produktmarke").Value
        HauptBG = oPart.PropertySets(3).Item("Part Number").Value
       
        AXArray(2, 1) = "0"
        AXArray(2, 2) = PMarkeH & HauptBG
        AXArray(2, 3) = "1"
        AXArray(2, 4) = PMarkeH & HauptBG
        AXArray(2, 5) = oPart.PropertySets(1).Item("Title").Value
        AXArray(2, 6) = NameEng
        AXArray(2, 7) = NameFra
        AXArray(2, 8) = oPart.PropertySets(1).Item("Subject").Value
        AXArray(2, 9) = oPart.PropertySets(1).Item("Revision Number").Value
        AXArray(2, 10) = Left(oPart.PropertySets(3).Item("Creation Time").Value, 10)
        AXArray(2, 11) = ""
        AXArray(2, 12) = ""
        AXArray(2, 13) = ""
        AXArray(2, 14) = ""
        AXArray(2, 15) = ""
        AXArray(2, 16) = ""
        AXArray(2, 17) = Round(oPart.PropertySets(3).Item("Mass").Value / 1000, 1)
        AXArray(2, 18) = oPart.PropertySets(4).Item("Artikelstatus").Value
        AXArray(2, 19) = ""
        AXArray(2, 20) = oPart.ComponentDefinitions(1).Document.FullDocumentName
    End If
   
    'Prüft ob die Unterbaugruppe schon in der Stückliste ist, wenn ja wird sie kein 2. Mal ins Array geschrieben
    Dim i As Integer
    Dim InPartList As Boolean
    InPartList = False
    PMarke = oBomRow.ComponentDefinitions(1).Document.PropertySets(4).Item("Produktmarke").Value
    For i = 2 To iZeile
        If AXArray(i, 2) = PMarke & Parent And Not AXArray(i, 2) = "" Then
            InPartList = True
        End If
    Next i

    'geamte Teileliste durchlaufen
    For Each oBomRow In oBomRows
        'Prüfen ob das Teil von der AX-Stückliste ausgeschlossen ist
        If oBomRow.ComponentDefinitions(1).Document.PropertySets(4).Item("NoAXBom").Value = False Then
            'prüfen ob das Teiln schon in der Stückliste enthalten ist
            If InPartList = False Then
               
                'Variablen werden zurückgesetzt
                iZeile = iZeile + 1
                NameEng = ""
                NameFra = ""
                PMarke = ""
                TNummer = ""
                TName = ""
               
                'prüfen ob es ein "Parent" gibt, wenn nicht ist die Hauptbaugruppe der "Parent"
                UnterBG = Parent
                If UnterBG = "" Then UnterBG = HauptBG
               
                ' Stückliste wird zusammengestellt in in das Array geschrieben
                TNummer = oBomRow.ComponentDefinitions(1).Document.PropertySets(3).Item("Part Number").Value
                TName = oBomRow.ComponentDefinitions(1).Document.PropertySets(1).Item("Title").Value
                oRevNum = oBomRow.ComponentDefinitions(1).Document.PropertySets(1).Item("Revision Number").Value
                PMarke = oBomRow.ComponentDefinitions(1).Document.PropertySets(4).Item("Produktmarke").Value
                If PMarke = "" Then PMarke = BulTools.ProduktMa(TNummer)
                Temp = BulTools.Translate(TName, NameEng, NameFra)
               
                'Zusatztext für Brennschnitte aus der .idw auslesen
                oFileNameIDW = Left(oBomRow.ComponentDefinitions(1).Document.FullDocumentName, Len(oBomRow.ComponentDefinitions(1).Document.FullDocumentName) - 3) & "idw"
                oTextBSZ = BulTools.iPropTextBSZ(oFileNameIDW)
                                 
                'AXArray wird mit Daten gefüllt
                AXArray(iZeile, 1) = oBomRow.ItemNumber
                AXArray(iZeile, 2) = PMarkeH & UnterBG
                AXArray(iZeile, 3) = oBomRow.ItemQuantity
                AXArray(iZeile, 4) = PMarke & TNummer
                AXArray(iZeile, 5) = TName
                AXArray(iZeile, 6) = NameEng
                AXArray(iZeile, 7) = NameFra
                AXArray(iZeile, 8) = oBomRow.ComponentDefinitions(1).Document.PropertySets(1).Item("Subject").Value
                AXArray(iZeile, 9) = oRevNum
                AXArray(iZeile, 10) = Left(oBomRow.ComponentDefinitions(1).Document.PropertySets(3).Item("Creation Time").Value, 10)
                AXArray(iZeile, 11) = oBomRow.ComponentDefinitions(1).Document.PropertySets(4).Item("Material/Norm").Value
                AXArray(iZeile, 12) = ""
                AXArray(iZeile, 13) = oBomRow.ComponentDefinitions(1).Document.PropertySets(4).Item("Länge").Value
                AXArray(iZeile, 14) = oBomRow.ComponentDefinitions(1).Document.PropertySets(4).Item("Breite").Value
                AXArray(iZeile, 15) = oBomRow.ComponentDefinitions(1).Document.PropertySets(3).Item("Material").Value
                AXArray(iZeile, 16) = oBomRow.ComponentDefinitions(1).Document.PropertySets(4).Item("Gewicht").Value
                AXArray(iZeile, 17) = Round(oBomRow.ComponentDefinitions(1).Document.PropertySets(3).Item("Mass").Value / 1000, 1)
                AXArray(iZeile, 18) = oBomRow.ComponentDefinitions(1).Document.PropertySets(4).Item("Artikelstatus").Value
                AXArray(iZeile, 19) = oTextBSZ
                AXArray(iZeile, 20) = oBomRow.ComponentDefinitions(1).Document.FullDocumentName
               
                'Materialnummer aus ExcelTabelle auslesen (Material/Norm und Material)
                AXArray(iZeile, 12) = BulTools.RMNummer(AXArray(iZeile, 11), AXArray(iZeile, 15))
            End If
           
            'Baugruppen mit der Kennung "NoAxBomDissolve = True" werden nicht aufgelöst
            If oBomRow.ComponentDefinitions(1).Document.PropertySets(4).Item("NoAxBomDissolve").Value = False Then
                If Not oBomRow.ChildRows Is Nothing Then addRow TNummer, oBomRow.ChildRows, False
            End If
        End If
ForNext:
    Next
End Function


Nun will dieser Code aber nicht und meldet mir in der Zeile "Call CreateFolder.CreateFolder(oPfad)" -im Code fett und unterstrichen markiert- "Compile error: Variable not defined".
Wenn ich aber "Dim CreateFolder As String" definiere, dann erhalte ich die Meldung "Compile error: Invalid qualifier"

Wie muss ich CreateFolder jetzt korrekt deklarieren?

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

Du bist die Aufgabe - Franz Kafka

[Diese Nachricht wurde von Honigbär am 12. Jul. 2018 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Tacker
Mitglied
TZ, Tech. MB, Softwareentwickler


Sehen Sie sich das Profil von Tacker  an!   Senden Sie eine Private Message an Tacker  Schreiben Sie einen Gästebucheintrag für Tacker

Beiträge: 161
Registriert: 23.09.2010

IV 2015 IV 2017 Pro
i7-7700K 4x4.2GHz
32GB DDR4-2400
GTX 1060 6GB DDR5

erstellt am: 12. Jul. 2018 16:55    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Honigbär 10 Unities + Antwort hilfreich

Moin  ,

Also... gut ist die Vorlage nicht, aber man kann das ja verbessern.

Bezüglich CreateFolder ist folgendes zu sagen: Das geht über das Filesystem des Zielsystems (der lokale Rechner) und da sollte einiges mehr beachtet werden als nur die Funktion aufzurufen.
Zuerst brauchst du die Referenz zum Microsoft Scripting Runtime. Findest im VBA Browser unter Extras→Verweise.
Anschließend zuerst ein Beispiel:

Code:

Sub CreateFolder()
    Dim rootDirectory As String
    Dim folderToBeCreated As String
    Dim path As String
    ' Set the root directory path
    ' where you want to create
    ' your folder
        rootDirectory = "C:\ProgramData"
    ' give a valid name for your folder
        folderToBeCreated = "\MyFolder1"
    ' Path for MkDir VBA function
    ' would be the concatination
    ' of above two
        path = rootDirectory & folderToBeCreated
    ' Check the root directory and folder path
    ' before creating it directly
        If Len(Dir(rootDirectory, vbDirectory)) = 0 Then 'check if RootDirectory Exists?
            If Len(Dir(path, vbDirectory)) = 0 Then ' full path should not exist already
                VBA.MkDir (path) ' or VBA.MkDir ("C:\Vishwa\MyFolders\MyFolder1")
                MsgBox "Folder is created successfully"
            Else
                MsgBox "Folder is already existing in the root directory"
            End If
        Else
            MsgBox "Root directory does not exist"
        End If
End Sub

So sollte das aussehen. Gefunden hier http://learnexcelmacro.com/wp/2016/11/how-to-create-folders-in-windows-via-excel-vba/
Wurde aber abgeändert.
Das ganze kannst in eine Funktion abändern.

Code:

Private Function CreateFolder(Byval rootDirectory as string,byval folderToBeCreated as string) as Boolean
    'Dim rootDirectory As String
    'Dim folderToBeCreated As String
    Dim path As String
    ' Set the root directory path
    ' where you want to create
    ' your folder
        'rootDirectory = "C:\ProgramData"
    ' give a valid name for your folder
        'folderToBeCreated = "\MyFolder1"
    ' Path for MkDir VBA function
    ' would be the concatination
    ' of above two
        path = rootDirectory & folderToBeCreated
    ' Check the root directory and folder path
    ' before creating it directly
        If Len(Dir(rootDirectory, vbDirectory)) = 0 Then 'check if RootDirectory Exists?
            If Len(Dir(path, vbDirectory)) = 0 Then ' full path should not exist already
                VBA.MkDir (path) ' or VBA.MkDir ("C:\Vishwa\MyFolders\MyFolder1")
                Return True
                MsgBox "Folder is created successfully"
            Else
                Return True
                MsgBox "Folder is already existing in the root directory"
            End If
        Else
            Return False
            MsgBox "Root directory does not exist"
        End If
End Sub

Das ist jetzt noch nicht perfekt, aber tut seinen Dienst. Fehlerbehandlung fehlt beispielsweise noch.
Aufrufen kannst das (Private Function CreateFolder....) in deinem Code dann so:

Code:

if CreateFolder("C:\ProgramData","\MyFolder1") = False then
  'Erstellung schlug fehl, beenden
    Exit sub
end if

oder auch so

Code:

Dim rootDirectory as String
Dim folderToBeCreated as String
rootDirectory = "C:\ProgramData"
folderToBeCreated = "\MyFolder1"
If CreateFolder(rootDirectory,folderToBeCreated) = False then
  'Erstellung schlug fehl, beenden
    Exit sub
end if

Zu deinem Versuch CreateFolder als String zu Deklarieren, vielleicht wäre sogar die Anleitung hilfreich, richtet sich an VBA und Inventor API Neulinge. http://download.autodesk.com/us/community/mfg/Part_1.pdf
Ich weis, objektorientiertes Programmieren ist nicht selbsterklärend, hatte damit auch so meine Probleme, aber da muss man halt durch.
Klingt blöd, aber wenn man das Grundprinzip verstanden hat ist es logisch.

Ein String ist eine Variable die nur Text enthält. Ein String wird nie die Funktion bereithalten einen Ordner zu erstellen.
Hierzu ein Tutorial über die grundlegenden Datentypen: https://www.vba-tutorial.de/variablen/datentypen.htm

Ich hoffe ich konnte ein bisschen helfen

Gruß

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Honigbär
Mitglied
Angestellter


Sehen Sie sich das Profil von Honigbär an!   Senden Sie eine Private Message an Honigbär  Schreiben Sie einen Gästebucheintrag für Honigbär

Beiträge: 120
Registriert: 22.10.2006

CATIA V5 R24
Solid Edge Version 17
Pro-E Wildfire 4.0
Autodesk Inventor Professional 2014
MathCAD 13
Intel Centrino 2 (Pentium III Xeon) 2,53 GHz
6GB RAM
Win 7 Ultimate (64 Bit)
ATI Mobility Radeon HD 4650
SSD von Samsung (Festplatte)

erstellt am: 13. Jul. 2018 11:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Danke für deine Hilfe und die Links.

Ich bekomme jetzt in derselben Zeile (Call CreateFolder.CreateFolder(oPfad)) die Meldung "Compile error: Argument not optional" und "Return True" bzw. "Return False" wird im Code rot markiert.

Dann habe ich im Netz gelesen, dass es "set Return True" heißen muss, aber da bekomme ich dann die Meldung "Compile error: Expected: identifier".

Bin ganz durcheinander. Wie löse ich das Problem jetzt am besten?  

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

Du bist die Aufgabe - Franz Kafka

[Diese Nachricht wurde von Honigbär am 13. Jul. 2018 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Tacker
Mitglied
TZ, Tech. MB, Softwareentwickler


Sehen Sie sich das Profil von Tacker an!   Senden Sie eine Private Message an Tacker  Schreiben Sie einen Gästebucheintrag für Tacker

Beiträge: 161
Registriert: 23.09.2010

IV 2015 IV 2017 Pro
i7-7700K 4x4.2GHz
32GB DDR4-2400
GTX 1060 6GB DDR5

erstellt am: 13. Jul. 2018 17:15    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Honigbär 10 Unities + Antwort hilfreich

Moin 

da ist mir ein Fehler unterlaufen, entschuldige.
"Return" gibt es in VBA nicht, ich arbeite meist mit VB.NET, da gibt es das.

Ich würde vorschlagen wir vergessen das bisherige Beispiel und bauen etwas neues auf.
Ich hab aus der API mal ein Beispiel geholt:

Code:

Public Sub BOMQuery()
    ' Set a reference to the assembly document.
    ' This assumes an assembly document is active.
    Dim oDoc As AssemblyDocument
    Set oDoc = ThisApplication.ActiveDocument

    Dim FirstLevelOnly As Boolean
    If MsgBox("First level only?", vbYesNo) = vbYes Then
        FirstLevelOnly = True
    Else
        FirstLevelOnly = False
    End If
   
    ' Set a reference to the BOM
    Dim oBOM As BOM
    Set oBOM = oDoc.ComponentDefinition.BOM
   
    ' Set whether first level only or all levels.
    If FirstLevelOnly Then
        oBOM.StructuredViewFirstLevelOnly = True
    Else
        oBOM.StructuredViewFirstLevelOnly = False
    End If
   
    ' Make sure that the structured view is enabled.
    oBOM.StructuredViewEnabled = True
   
    'Set a reference to the "Structured" BOMView
    Dim oBOMView As BOMView
    Set oBOMView = oBOM.BOMViews.Item("Strukturiert")
       
    Debug.Print "Item"; Tab(15); "Quantity"; Tab(30); "Part Number"; Tab(70); "Description"
    Debug.Print "----------------------------------------------------------------------------------"

    'Initialize the tab for ItemNumber
    Dim ItemTab As Long
    ItemTab = -3
    Call QueryBOMRowProperties(oBOMView.BOMRows, ItemTab)
End Sub

Private Sub QueryBOMRowProperties(oBOMRows As BOMRowsEnumerator, ItemTab As Long)
    ItemTab = ItemTab + 3
    ' Iterate through the contents of the BOM Rows.
    Dim i As Long
    For i = 1 To oBOMRows.Count
        ' Get the current row.
        Dim oRow As BOMRow
        Set oRow = oBOMRows.Item(i)

        'Set a reference to the primary ComponentDefinition of the row
        Dim oCompDef As ComponentDefinition
        Set oCompDef = oRow.ComponentDefinitions.Item(1)

        Dim oPartNumProperty As Property
        Dim oDescripProperty As Property

        If TypeOf oCompDef Is VirtualComponentDefinition Then
            'Get the file property that contains the "Part Number"
            'The file property is obtained from the virtual component definition
            Set oPartNumProperty = oCompDef.PropertySets _
                .Item("Design Tracking Properties").Item("Part Number")

            'Get the file property that contains the "Description"
            Set oDescripProperty = oCompDef.PropertySets _
                .Item("Design Tracking Properties").Item("Description")

            Debug.Print Tab(ItemTab); oRow.ItemNumber; Tab(17); oRow.ItemQuantity; Tab(30); _
                oPartNumProperty.Value; Tab(70); oDescripProperty.Value
        Else
            'Get the file property that contains the "Part Number"
            'The file property is obtained from the parent
            'document of the associated ComponentDefinition.
            Set oPartNumProperty = oCompDef.Document.PropertySets _
                .Item("Design Tracking Properties").Item("Part Number")

            'Get the file property that contains the "Description"
            Set oDescripProperty = oCompDef.Document.PropertySets _
                .Item("Design Tracking Properties").Item("Description")

            Debug.Print Tab(ItemTab); oRow.ItemNumber; Tab(17); oRow.ItemQuantity; Tab(30); _
                oPartNumProperty.Value; Tab(70); oDescripProperty.Value
           
            'Recursively iterate child rows if present.
            If Not oRow.ChildRows Is Nothing Then
                Call QueryBOMRowProperties(oRow.ChildRows, ItemTab)
            End If
        End If
    Next
    ItemTab = ItemTab - 3
End Sub


Den Sub (BOMQuery) starten.
Das Fenster "Direktbereich" aktivieren. Dort siehst du dann die Ausgabe.
Das funktioniert über den Befehl Debug.Print()

Wenn das soweit bei dir funktioniert kümmern wir uns darum die Spalte "Bestandsnummer" auszulesen um anschließend zu sortieren.
Die Ergebnisse müssen wir nur noch als .csv exportieren, dafür hab ich bereits etwas Fertiges rumliegen.

Gruß

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Honigbär
Mitglied
Angestellter


Sehen Sie sich das Profil von Honigbär an!   Senden Sie eine Private Message an Honigbär  Schreiben Sie einen Gästebucheintrag für Honigbär

Beiträge: 120
Registriert: 22.10.2006

CATIA V5 R24
Solid Edge Version 17
Pro-E Wildfire 4.0
Autodesk Inventor Professional 2014
MathCAD 13
Intel Centrino 2 (Pentium III Xeon) 2,53 GHz
6GB RAM
Win 7 Ultimate (64 Bit)
ATI Mobility Radeon HD 4650
SSD von Samsung (Festplatte)

erstellt am: 16. Jul. 2018 09:14    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Willkommen in der neuen Woche 

Habe mir den Code kopiert und leicht angepasst.
Eine Fehlermeldung erhalte ich in der Zeile

Code:

If FirstLevelOnly Then
  oBOM.StructuredViewFirstLevelOnly = True
Else


mit der Meldung "Run-time error '5': Invalid procedure call or argument"

Eine Frage dazu. oBOM wird als BOM deklariert. Was ist BOM für ein Datentyp?

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

Du bist die Aufgabe - Franz Kafka

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Tacker
Mitglied
TZ, Tech. MB, Softwareentwickler


Sehen Sie sich das Profil von Tacker an!   Senden Sie eine Private Message an Tacker  Schreiben Sie einen Gästebucheintrag für Tacker

Beiträge: 161
Registriert: 23.09.2010

IV 2015 IV 2017 Pro
i7-7700K 4x4.2GHz
32GB DDR4-2400
GTX 1060 6GB DDR5

erstellt am: 16. Jul. 2018 13:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Honigbär 10 Unities + Antwort hilfreich

Moin 

wie hast du den Code modifiziert?
Konnte nicht nachstellen wie in der Zeile ein Fehler auftritt.
Ist eine Baugruppe geöffnet?

Die API definiert BOM so:
"Description
The BOM object represents the Bill Of Materials (BOM) data of a document."

Zu Deutsch: BOM = Stückliste

oBOM ist ein Objekt des Typs BOM
Die Programmierer von Inventor haben diesen Typ erzeugt, der Typ BOM kommt nicht von VBA.
Durch die Schnittstelle erhält der VBA Editor Zugriff auf dieses Objekt.
Wenn du in dem VBA Editor den Objektkatalog aufrufst und dort nach BOM suchst, wirst du die Klasse BOM finden.
Verzeichnet unter der Bibliothek von Inventor.
Wenn du die Klasse BOM markierst siehst du unter Elemente von 'BOM' die enthaltenen Objekte (Subs, Funktionen, Klassen, Events, elementare Datentypen)

Falls du dich wunderst woher VBA hier überhaupt Zugriff auf Inventor hat: Da es der VBA Editor von Inventor ist, wurde es so voreingestellt. Unter Extras→Verweise findest du "Autodesk Inventor Object Library". Unter Excel wurde der VBA Editor so eingestellt, dass man direkt Zugriff auf Excel hat, bei Outlook für Outlook usw.

Gruß

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2018 CAD.de | Impressum | Datenschutz