| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: iAssembly in Strukturierter Stückliste - Alle Ebenen (5485 mal gelesen)
|
MichlB1003 Mitglied Konstrukteur
Beiträge: 42 Registriert: 07.03.2013
|
erstellt am: 10. Apr. 2013 07:42 <-- editieren / zitieren --> Unities abgeben:
hallo Habe mich durch einige Foren druchgeklickt, leider hab ich nichts entsprechendes bzw. befriedigende Antworten gefunden, deshalb hier mal der Eintrag. gibt es eine möglichkeit, eine strukturierte Stückliste mit allen Ebenen zu erstellen, in der auch die iAssemblys angezeigt bzw. aufgelöst werden? Wenn nicht, gibts alternativen? Vorschläge wären toll! danke! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MichlB1003 Mitglied Konstrukteur
Beiträge: 42 Registriert: 07.03.2013 IV Product Design Suite Ultimate 2014 ProductStream 2011 Professional Office 2010 Home & Business 2x Nvidia Quadro 4000 2.0GB - SLI-Verband - Nvidia Treiber 332.50 HP Z400 Intel(R) Xeon(R) Cpu W3565 @3,2 GHz 16GB 64-Bit Windows 7 Professional
|
erstellt am: 10. Apr. 2013 07:46 <-- editieren / zitieren --> Unities abgeben:
|
MichlB1003 Mitglied Konstrukteur
Beiträge: 42 Registriert: 07.03.2013
|
erstellt am: 10. Apr. 2013 09:21 <-- editieren / zitieren --> Unities abgeben:
nachtrag: ich habe jetzt in der vorlage für Baugruppen die Darstellung der Stückliste auf Stukturiert - Alle ebenen geändert, eine neue iAssembly erstellt, diese in eine neue Baugruppe eingefügt (siehe anhang). Hier funktioniert die Stückliste nun mit allen Unterebenen aus dem IAssembly, aber wenn ich nun ein iAssembly aus der baugruppe erstelle, dann kommt die meldung: "Die Stückliste enthält Ansichten oder Eigenschaften, die von der Konfiguration nicht unterstützt werden. Nur strukturierte Stücklistenansichten der ersten Ebene werden unterstützt. Die Stückliste wird während der Konvertierung geändert." ich möchte nicht dass die Stückliste geändert wird, ich möchte wenn ich iAssemblys erstelle, dass diese eine Strukturierte Stückliste mit allen Ebenen hat. auch wenn ich iAssemblys in iAss. einfüge, dann soll auch hier die Strukturierte liste mit allen ebenen verfügbar sein. die Quint-Essenz dieser Thematik ist jene, dass ich einen Bauteil habe, für den ich vorgegebene grössen habe, die ich dann mittels iAssembly-tabelle steuern möchte und die entsprechenden Stücklisten dann ins Word mittels Thumbnailpartlist exportiere. Wichtig: ich brauche alle teile inkl. Unterbauteile einzeln aufgelistet. hat wer eine idee? danke schon mal Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mafr Mitglied Techniker
Beiträge: 73 Registriert: 06.12.2010 HP xw 4600 Intel(R) Core(TM)2 Duo CPU E8500 3.16GHz Windows XP Windows 7 Professionel( 32 Bit / 64 Bit ) AutoCad 2014 / 2017 Inventor 2010 / 2018
|
erstellt am: 10. Apr. 2013 13:34 <-- editieren / zitieren --> Unities abgeben: Nur für MichlB1003
Kann deinen Anhang nicht öffnen, weil vermutlich in neuerer Version erstellt. Wäre es möglich die gewünschte Stücklisten struktur kurz zu skizzieren ? Was ist mit der Stücklistenstruktur - nur Bauteile ? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MichlB1003 Mitglied Konstrukteur
Beiträge: 42 Registriert: 07.03.2013
|
erstellt am: 10. Apr. 2013 15:38 <-- editieren / zitieren --> Unities abgeben:
hallo mafr also das eine bild ist die stücklste (strukturiert mit allen ebenen) der Baugruppe , das 2. Bild ist die selbe baugruppe nur als iAssembly, beim 3. bild siehst du, dass ich hier nicht mal mehr auf "alle ebenen" umschalten kann.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MichlB1003 Mitglied Konstrukteur
Beiträge: 42 Registriert: 07.03.2013 IV Product Design Suite Ultimate 2014 ProductStream 2011 Professional Office 2010 Home & Business 2x Nvidia Quadro 4000 2.0GB - SLI-Verband - Nvidia Treiber 332.50 HP Z400 Intel(R) Xeon(R) Cpu W3565 @3,2 GHz 16GB 64-Bit Windows 7 Professional
|
erstellt am: 10. Apr. 2013 15:43 <-- editieren / zitieren --> Unities abgeben:
grundsätzlich würde die Stückliste nach bauteilen auch passen. es geht mir nur darum, dass ich dann die stückliste irgendwie mit den thumbnails ins word bekomme, inkl. aller unterbaugruppen und einzelteile. und da nun mal dieses thumbnailpartlist eine Stückliste aus der idw verwendet.... vielleicht kann man das ja irgendwie umschreiben oder so, aber so weit bin ich mit meinen vba kenntnissen noch lange nicht... LEIDER :-( Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MichlB1003 Mitglied Konstrukteur
Beiträge: 42 Registriert: 07.03.2013
|
erstellt am: 11. Apr. 2013 07:01 <-- editieren / zitieren --> Unities abgeben:
hallo mafr hab mir jetzt mal die stückliste nach bauteilen angesehen, das wäre im prinzip genau so wie ich es brauche. hätte nun auch einen code gefunden (vom Thumbnailpartlist)den ich jetzt so umbauen möchte, dass es die Bauteil-Stückliste direkt aus dem Assembly (nicht aus der idw) exportiert, inkl. der Thumbnails.leider bin ich vba-mässig nur sehr sehr schwach ausgestattet mit kenntnissen, d.h. ich weiß nicht was genau ich umschreiben muss, damit er diese BOM verwendet und exportiert. vielleicht könntest du mir da ev. ein wenig helfen? ich habe bereits etwas umgeschrieben, bekomme aber immer nur einen fehler und es bricht ab, beim debuggen wird mir aber nix angezeigt... hier der code: Public Sub CreatePartsListWithThumbnail() ' Make sure a drawing document is active. On Error Resume Next Dim drawDoc As AssemblyDocument 'DrawingDocument' Set drawDoc = ThisApplication.ActiveDocument If Err Then MsgBox "eine Baugruppe muss aktiv sein" Exit Sub End If ' Make sure a parts list is selected. Dim partList As BOM Set partList = drawDoc.ComponentDefinition.BOM 'drawDoc.SelectSet.Item(1)' 'If Err Then ' MsgBox "A parts list must be selected." ' Exit Sub 'End If 'On Error GoTo 0 partList.StructuredViewFirstLevelOnly = False partList.StructuredViewEnabled = True Dim oStructuredBOMView As BOMView Set oStructuredBOMView = partList.BOMViews.Item("Strukturiert") oStructuredBOMView.Export "D:\BOM-Strukturiert.xls", kMicrosoftExcelFormat 'Ab Hier bin ich mir unsicher, hier kommt immer eine fehlermeldung!' Dim wordApp As Word.Application On Error Resume Next ' Try connecting to a running instance of Word. Set wordApp = GetObject(, "Word.Application") If Err Then Err.Clear ' Start Word. Set wordApp = CreateObject("Word.Application") If Err Then MsgBox "Kann word nicht starten." Exit Sub End If End If On Error GoTo 0 On Error GoTo ErrorFound wordApp.Visible = True ' Create a new Word document. Dim wordDoc As Word.Document Set wordDoc = wordApp.Application.Documents.Add ' Create a table with the same number of columns as the parts list. Dim partListTable As Table Set partListTable = wordDoc.Tables.Add(wordApp.Selection.Range, partList.BOMRowsEnumerator.Count + 1, partList.DrawingBOMColumns.Count + 1, wdWord9TableBehavior, wdAutoFitFixed) ' Copy the part list headings into the table. Dim i As Integer For i = 0 To partList.BOMRowsEnumerator.Count Dim myrange As Range Set myrange = partListTable.Cell(1, i + 1).Range myrange.End = partListTable.Cell(1, i + 1).Range.End myrange.Select If i = 0 Then Call wordApp.Selection.TypeText("Vorschau") Else Call wordApp.Selection.TypeText(partList.BOMRowsEnumerator.Item(i).Title) End If Next ' Iterate through the rows of the parts list. Dim rowIndex As Integer rowIndex = 1 Dim partListRow As PartsListRow For Each partListRow In partList.PartsListRows ThisApplication.StatusBarText = "Processing part list row " & rowIndex & " of " & partList.BOMRowsEnumerator.Count & "..." rowIndex = rowIndex + 1 If partListRow.Visible Then ' Select the first cell of the current row in the table. Set myrange = partListTable.Cell(rowIndex, 1).Range myrange.End = partListTable.Cell(rowIndex, 1).Range.End myrange.Select ' Get the thumbnail from the document associated with the current row. Dim drawBomRow As DrawingBOMRow Set drawBomRow = partListRow.ReferencedRows.Item(1) Dim refDoc As Document Set refDoc = drawBomRow.BOMRow.ComponentDefinitions.Item(1).Document On Error Resume Next Dim thumbNail As IPictureDisp Set thumbNail = refDoc.thumbNail If Err.Number = 0 Then ' Save the thumbnail to a file. Call SavePicture(thumbNail, "C:\Temp\TempThumb.bmp") Dim shape As Word.InlineShape Set shape = wordApp.Selection.InlineShapes.AddPicture("C:\Temp\TempThumb.bmp", False, True) shape.LockAspectRatio = True shape.Height = 100 Else Call wordApp.Selection.TypeText("Vorschau nicht verfügbar.") End If On Error GoTo ErrorFound ' Copy the rest of the part list info into the table for this row. For i = 1 To partList.PartsListColumns.Count Set myrange = partListTable.Cell(rowIndex, i + 1).Range myrange.End = partListTable.Cell(rowIndex, i + 1).Range.End myrange.Select Call wordApp.Selection.TypeText(partListRow.Item(i).Value) Next End If Next ThisApplication.StatusBarText = "Export abgeschlossen." wordApp.Visible = True Exit Sub ErrorFound: MsgBox "Unerwarteter Fehler ist aufgetreten." & vbCrLf & "Fehlernummer: " & Err.Number & vbCrLf & "Fehlerbeschreibung: " & Err.Description _ & vbCrLf & "Fehlerquelle: " & Err.Source & vbCrLf & "Hilfe: " & Err.HelpContext wordApp.Visible = False End Sub als fehler wird mir Fehlernummer 438 beschreibung: Object doesn's support this property or method leider fang ich damit nicht viel an... :-( hast eine Idee wo das problem begraben liegt? danke [Diese Nachricht wurde von MichlB1003 am 11. Apr. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mafr Mitglied Techniker
Beiträge: 73 Registriert: 06.12.2010 HP xw 4600 Intel(R) Core(TM)2 Duo CPU E8500 3.16GHz Windows XP Windows 7 Professionel( 32 Bit / 64 Bit ) AutoCad 2014 / 2017 Inventor 2010 / 2018
|
erstellt am: 11. Apr. 2013 10:25 <-- editieren / zitieren --> Unities abgeben: Nur für MichlB1003
Hallo Michl leider muss ich passen. Was VBA anbelangt bin ich vermutlich ein noch grösserer Anfänger. Von Thumbnailpartlist und BOM habe ich bisher auch noch nichts gehört. Ich habe erst gestern festgestellt das bei iAssembly die Teillisten-Struktur - nur Bauteile nicht zur Verfügung steht. Somit stehe ich jetzt vor dem gleichen Problem. Habe die Problematik mal an den Support weiter gegeben. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
WilliamSpiderWeb Mitglied Dipl.-Ing. (FH) Physikalische Technik
Beiträge: 106 Registriert: 09.01.2012 DELL Precision 3620 Core i7-6900K @ 4,00 GHz 16,00GB RAM Grafik: AMD FirePro W5100 --- Win7 Pro 64bit SP1 --- Inventor Professional 2023 Vault Workgroup 2023 Visual Basic .NET 2010 Express ... dabei seit Inventor 5
|
erstellt am: 11. Apr. 2013 14:59 <-- editieren / zitieren --> Unities abgeben: Nur für MichlB1003
Hallo Michl, lass uns, bevor wir hier langen VBA-Code generieren , doch noch einmal von vorne anfangen, damit wir auch definitiv von der selben Sache reden... Dein eigentliches Problem ist, dass Du normalerweise in der "strukturierten Stückliste" einer Baugruppe (Assembly) wählen kannst zwischen "Erste Ebene" und "Alle Ebenen". Sobald Du aber eine Variantenbaugruppe (iAssembly) erstellst, ist der Eintrag "Alle Ebenen" nicht mehr wählbar, richtig? Ich weiß nicht warum, aber das ist nicht nur bei Dir so. Der Inventor kann bei iAssemblys nicht auf "Alle Ebenen" umstellen. ABER: Ich bin da auf einen Bug im Inventor gestoßen, den man ausnutzen kann. Wenn Dir egal ist, dass der Eintrag "Alle Ebenen" weiterhin gesperrt bleibt, Du aber trotzdem die Unterebenen öffnen kannst (siehe Anhang), kann ich Dir helfen. LÖSUNG: Schreibe eine kleine VBA-Routine, die "Alle Ebenen" einschaltet und lege sie auf einen kleinen Button in die Ribbon-Leiste. (Diese Routine demonstriert nur, wie's geht. Hier wird nicht geprüft, ob wirklich eine Baugruppe geöffnet ist, etc.) Code:
Public Sub IAssemblyWithAllLevelBom() Dim oDoc As AssemblyDocument Dim oBom As BOMSet oDoc = ThisApplication.ActiveDocument Set oBom = oDoc.ComponentDefinition.BOM oBom.StructuredViewFirstLevelOnly = False End Sub
Wenn Du nun eine iAssembly geöffnet hast, führst Du diesen Code aus und schwupps kannst Du die Unterbaugruppen in der Stückliste aufklappen. Wenn ich mich richtig erinnere, reicht der Inventor diese Option dann auch durch bis auf die Zeichnung. Viele Grüße und viel Spaß damit. Alex Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MichlB1003 Mitglied Konstrukteur
Beiträge: 42 Registriert: 07.03.2013
|
erstellt am: 11. Apr. 2013 15:29 <-- editieren / zitieren --> Unities abgeben:
Hallo und danke dass du dir zeit nimmst... auf den bug bin ich auch schon gestossen... und hab ihn gleich ausgenützt ;-) Public Sub Strukturliste() On Error Resume Next Dim BauteilDoc As AssemblyDocument Dim partList As BOM Dim ListView As BOMView 'Festlegen der aktiven anwendung Set BauteilDoc = ThisApplication.ActiveDocument
'Export in Excel ohne bilder Set partList = BauteilDoc.ComponentDefinition.BOM partList.StructuredViewEnabled = True Set ListView = partList.BOMViews.Item("Strukturiert") partList.StructuredViewFirstLevelOnly = False end sub der funkt grundsätzlich ganz gut, nur ist es etwas mühsam, immer das makro laufen zu lassen, dann die idw. öffnen, die stückliste öffnen und die Childrows zu erweitern, damit ich dann im anschluss die Thumbnailpartlist drüberlaufen lassen kann. mein Ziel bei dem ganzen spiel ist es, ein Plugin zu generieren (mit Visual studio express 2010) wo man die assembly geöffnet hat und auf einen button klickt und man eine fertige stückliste inkl. bildchen im word bzw. noch besser im excel hat.... benutzerfreundlichkeit ist das zauberwort.... ;-) deshalb hab ich auch schon angefangen, den thumbnailpartlistcode zu adaptieren, aber ich stecke bei der erstellung der tabelle im word (auslesen der BOM aus dem assembly)... tja das ist der derzeitige stand....
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
WilliamSpiderWeb Mitglied Dipl.-Ing. (FH) Physikalische Technik
Beiträge: 106 Registriert: 09.01.2012 DELL Precision 3620 Core i7-6900K @ 4,00 GHz 16,00GB RAM Grafik: AMD FirePro W5100 --- Win7 Pro 64bit SP1 --- Inventor Professional 2023 Vault Workgroup 2023 Visual Basic .NET 2010 Express ... dabei seit Inventor 5
|
erstellt am: 11. Apr. 2013 16:03 <-- editieren / zitieren --> Unities abgeben: Nur für MichlB1003
Ahh, okay, ich glaub, ich hab's verstanden. Du möchtest also gar nicht mal ab und zu eine Stückliste exportieren, sondern ein Makro bzw. ein PlugIn schreiben, das Dir quasi immer eine optisch ansprechende und übersichtliche Stückliste, auch für den Nicht-Konstrukteur, erzeugt. Ich würde Dir dann dazu raten, von vorn herein in VB.NET zu programmieren, da... 1. ...sich VBA und .NET Code voneinander unterscheiden 2. ...das Debuggen in Visual Studio viel besser geht als im Inventor noch ein allgemeiner Hinweis: Wenn Du Quellcode zitierst, wäre Dieser viel besser zu lesen, wenn Du die Code-Tags verwendest.
Zitat: [CODE][/CODE]
Nun zu Deinem Problem: BOM aus einer Assembly auslesen hast Du schon? Und Dein Problem ist das Auslesen aller BOMs aus einer iAssembly? Das hab ich bisher nur geschafft, indem ich VBA-gesteuert alle Varianten der Baugruppe durchklicken lassen und dann immer die jeweils aktuelle BOM ausgelesen habe. Würde Dir das helfen, oder ist das zu umständlich? Performanceoptimiert kann man diese Methode nämlich nicht nennen. Das war Thema in dem Beitrag, in dem Du um Hilfe gebeten hast. Wenn Dir das helfen würde, kram ich den Code noch einmal aus. Viele Grüße, Alex [Diese Nachricht wurde von WilliamSpiderWeb am 11. Apr. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MichlB1003 Mitglied Konstrukteur
Beiträge: 42 Registriert: 07.03.2013
|
erstellt am: 12. Apr. 2013 07:00 <-- editieren / zitieren --> Unities abgeben:
hallo absolut richtig, ich möchte auf knopfdruck eine Stückliste direkt aus dem Assembly exportieren, mit der jemand, der nicht an der konstruktion beteiligt war, was anfangen kann. generell hätt ich das ja gerne im VB Studio 2010 programmiert, aber alles was ich damit bis dato zu tun gehabt hab ist, dass ich es mir geladen habe und von autodesk den inventorplugin installiert hab. das wars dann auch schon wieder.. ABER ich bin ja lernfähig ;-) also wenn du dich damit auskennst und mir helfen würdest, das zu erstellen, dann wär ich dir wirklich sehr dankbar. lg und Danke schon mal Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
WilliamSpiderWeb Mitglied Dipl.-Ing. (FH) Physikalische Technik
Beiträge: 106 Registriert: 09.01.2012 DELL Precision 3620 Core i7-6900K @ 4,00 GHz 16,00GB RAM Grafik: AMD FirePro W5100 --- Win7 Pro 64bit SP1 --- Inventor Professional 2023 Vault Workgroup 2023 Visual Basic .NET 2010 Express ... dabei seit Inventor 5
|
erstellt am: 12. Apr. 2013 09:02 <-- editieren / zitieren --> Unities abgeben: Nur für MichlB1003
Ich hab die Stücklisten gebraucht, weil ich eine Schnittstelle zu unserem ERP-System bauen wollte. Aber wie gesagt, bei mir läuft das so, dass Du im Inventor eine Baugruppe (egal ob iAssembly oder nicht) geöffnet haben musst, klickst dann auf den Export-Button, und mein VBA-Code erzeugt eine Textdatei mit der Stückliste bzw. eine Textdatei pro Variante. Bei der iAssembly gehe ich allerdings den Weg, dass der Code nacheinander jede einzelne iAssembly-Tabellenzeile aktiviert und dann die BOM ausliest, die dann immer der Stückliste der aktivierten Variante entspricht. Wenn Du möchtest, kann ich Dir den Code raus suchen. Viele Grüße, Alex Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MichlB1003 Mitglied Konstrukteur
Beiträge: 42 Registriert: 07.03.2013
|
erstellt am: 12. Apr. 2013 11:03 <-- editieren / zitieren --> Unities abgeben:
hallo genau so soll es sein, inventor offen, Assembly oder iAssembly offen und dann button-click und export einer Stückliste mit bilder in Word bzw. wenn funkt besser noch in Excel... ich brauch das nämlich auch für unser ERP system aber die eingabe erfolgt via eines kollegen.. also quasi halbautomatisch ;-) ja wenn dein code funkt, dann nehm ich den gerne, mach der auch schöne bildchen dazu? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
WilliamSpiderWeb Mitglied Dipl.-Ing. (FH) Physikalische Technik
Beiträge: 106 Registriert: 09.01.2012 DELL Precision 3620 Core i7-6900K @ 4,00 GHz 16,00GB RAM Grafik: AMD FirePro W5100 --- Win7 Pro 64bit SP1 --- Inventor Professional 2023 Vault Workgroup 2023 Visual Basic .NET 2010 Express ... dabei seit Inventor 5
|
erstellt am: 12. Apr. 2013 19:04 <-- editieren / zitieren --> Unities abgeben: Nur für MichlB1003
Hallo nochmal, einen Export direkt in die Anwendungen Word oder Excel hab ich nicht gemacht. Bei mir wird im Verzeichnis der Assembly ein Unterverzeichnis "Export" erzeugt und in dieses Verzeichnis wird eine csv-Datei für jede Baugruppe bzw. Baugruppenvariante erstellt. Der Dateiname entspricht dem Assembly-Dateinamen. Um die kleinen Vorschaubildchen habe ich mich auch noch nicht gekümmert, aber wenn Du die schon hast, könntest Du mir den Code dafür auch einmal zeigen. Hier ist mein Code. Komplett unkommentiert, da ich das Projekt zwecks wichtiger Projekte unterbrechen musste. Wie es nunmal immer so ist. Einfach in ein neues VBA-Modul im Inventor kopieren und die "ErzeugeBOM()" ausführen. Code:
Public Sub ErzeugeBOM() Dim odoc As AssemblyDocument Dim RowNum As Integer RowNum = 0 Set odoc = ThisApplication.ActiveDocument If odoc.DocumentType <> kAssemblyDocumentObject Then Exit Sub If odoc.ComponentDefinition.IsiAssemblyFactory Then For Each row In odoc.ComponentDefinition.iAssemblyFactory.TableRows odoc.ComponentDefinition.iAssemblyFactory.DefaultRow = row odoc.Update RowNum = RowNum + 1 Call QueryBOM(odoc, BuildBomFilename(odoc, RowNum)) Next Else Call QueryBOM(odoc, BuildBomFilename(odoc, RowNum)) End If End SubPrivate Sub QueryBOM(odoc As AssemblyDocument, DestinationFile As String) Dim oBOM As BOM Set oBOM = odoc.ComponentDefinition.BOM oBOM.StructuredViewFirstLevelOnly = False oBOM.StructuredViewEnabled = True Dim oBOMView As BOMView Set oBOMView = oBOM.BOMViews.Item("Strukturiert") If FileExists(DestinationFile) Then Kill (DestinationFile) If Not DirExists(ExtractDirectory(DestinationFile)) Then MkDir (ExtractDirectory(DestinationFile)) Dim fs As Object Dim a As Object Set fs = CreateObject("Scripting.FileSystemObject") Set a = fs.OpenTextFile(DestinationFile, 8, -2) Debug.Print Debug.Print Debug.Print "Zeichn.-Nr."; Tab(15); "Rev"; Tab(30); "Art.-Nr."; Tab(45); "Menge"; Tab(60); "Zeichn.-Nr."; Tab(75); "Rev"; Tab(90); "Art.-Nr." Debug.Print "--------------------------------------------------------------------------------------------------------------------" a.writeline ("Zeichn.-Nr.; Rev; Art.-Nr.; Menge; Zeichn.-Nr.; Rev; Art.-Nr.") Dim ItemTab As Long ItemTab = -3 Call QueryBOMRowProperties(odoc.ComponentDefinition, oBOMView.BOMRows, ItemTab, a) a.Close End Sub Private Sub QueryBOMRowProperties(oCompDef As ComponentDefinition, oBOMRows As BOMRowsEnumerator, ItemTab As Long, oFileStream As Object) ItemTab = ItemTab + 3 Dim sPropSet As String sPropSet = "Inventor User Defined Properties" Dim ZNr1 As String Dim Rev1 As String Dim Artnr1 As String ZNr1 = readProperty(oCompDef, sPropSet, "Zeichnungsnummer") Rev1 = readProperty(oCompDef, sPropSet, "Revision") Artnr1 = readProperty(oCompDef, sPropSet, "Artikelnummer") Dim i As Long For i = 1 To oBOMRows.Count Dim oRow As BOMRow Set oRow = oBOMRows.Item(i) On Error Resume Next Set oCompDef = oRow.ComponentDefinitions.Item(1) Dim Menge As String Dim ZNr2 As String Dim Rev2 As String Dim ArtNr2 As String Menge = oRow.ItemQuantity ZNr2 = readProperty(oCompDef, sPropSet, "Zeichnungsnummer") Rev2 = readProperty(oCompDef, sPropSet, "Revision") ArtNr2 = readProperty(oCompDef, sPropSet, "Artikelnummer") If Int(Menge) > 0 Then Debug.Print ZNr1; Tab(15); Rev1; Tab(30); Artnr1; Tab(45); Menge; Tab(60); ZNr2; Tab(75); Rev2; Tab(90); ArtNr2 oFileStream.writeline (ZNr1 & ";" & Rev1 & ";" & Artnr1 & ";" & Menge & ";" & ZNr2 & ";" & Rev2 & ";" & ArtNr2) If Not TypeOf oCompDef Is VirtualComponentDefinition Then If Not oRow.ChildRows Is Nothing Then Call QueryBOMRowProperties(oCompDef, oRow.ChildRows, ItemTab, oFileStream) End If End If End If Next ItemTab = ItemTab - 3 End Sub Public Function readProperty(oCompDef As ComponentDefinition, sPropSet As String, sPropName As String) As Variant readProperty = "" Dim oPropSets As PropertySets If TypeOf oCompDef Is VirtualComponentDefinition Then Set oPropSets = oCompDef.PropertySets Else Set oPropSets = oCompDef.Document.PropertySets End If Dim oProp As Property On Error GoTo ErrHandler Set oProp = oPropSets.Item(sPropSet).Item(sPropName) readProperty = oProp.Value ErrHandler: End Function Public Function BuildBomFilename(odoc As AssemblyDocument, row As Integer) As String Dim oIAssFactory As iAssemblyFactory Dim oRow As iAssemblyTableRow Dim oCol As iAssemblyTableColumn Dim oCell As iAssemblyTableCell Dim Filename As String Dim Rev As String If odoc.ComponentDefinition.IsiAssemblyFactory Then Set oIAssFactory = odoc.ComponentDefinition.iAssemblyFactory Set oRow = oIAssFactory.TableRows.Item(row) Set oCol = oIAssFactory.FileNameColumn Set oCell = oRow.Item(oCol.Heading) Filename = oCell.Value Else Filename = ExtractFilenameWithoutExt(odoc.FullFileName) End If Rev = readProperty(odoc.ComponentDefinition, "Inventor User Defined Properties", "Revision") Filename = ExtractDirectory(odoc.FullFileName) & "\Export\" & Filename & " R" & Rev & " BOM.csv" BuildBomFilename = Filename End Function
Du musst natürlich noch ein paar Dinge ändern. Ich lese die "Benutzerdefinierten IProperties" "Zeichnungsnummer", "Artikelnummer", "Revision" aus. Die werden bei Dir natürlich nicht vorhanden sein. Zu Debugzwecken schreibe ich die Tabellen neben der csv-Datei auch in den Debug-Print. Viel Erfolg, Wenn Du nocoh Fragen dazu hast, sag Bescheid. Alex [Diese Nachricht wurde von WilliamSpiderWeb am 12. Apr. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|