Zobrazit plnou verzi příspěvku: VBA Macro
PopelkaM
02.09.2022, 07:45
Dobrý den,v Inventoru 2021 jsem používal VBA makro pro export struktury sestavy do *.csv.v Inventoru 2022 došlo v úrovních sestavy k nějaké změně a makro již nefunguje.Chybová hláška níže.Poradíte mě někdo?Popelkauploads/26140/WriteAssemblyStructure_2022-09-02_07-41-46.txt
Vladimír Michl
02.09.2022, 08:14
Zkuste třeba:[CODE] occ.Name & "," & occ.ReferencedDocumentDescriptor.FullDocumentName ' uz ne .Definition.Document.FileName[/CODE]
PopelkaM
02.09.2022, 08:44
Děkuji,vyzkouším.Lze někde dohledat změny v psaní kódu napříč verzemi Inventora?Děkuji Popelka
S každou verzí vychází 'Whats new' v API příručce. Pro 2023 je to zde
https://help.autodesk.com/view/INVNTOR/2023/ENU/?guid=GUID-36B1FFB5-5291-4532-8F11-90E912769B34
V tomhle případě si ale myslím, že je problém v typování proměnných.AssemblyComponentDefinition.Occurrences je typu ComponentOccurrences, kdežto ComponentOccurrence.SubOccurrences je typu ComponentOccurrencesEnumeratorA na tom se nic nezměnilo
PopelkaM
02.09.2022, 10:53
Dobrý den,tak to je nad mé síly....Pokouším se z hlavní sestavy modelu Inventora 2022vyexportovat do csv (nebo xls) celou strukturu modelu.V excelu potřebuji mít na začátku označenou úroveň podsestavy (,) a její název.Přiložené makro vytvářelo zkráceně zhruba toto...70-35852_00.iam,70-35852_01:1,,70-35852_0101:1,,,70-35852_0101_:1,,,,70-35852_0101-01:1,,,,70-35852_0101-01:2,,,,70-35852_0101-02:7To co není ošetřeno v makru:Ideální by bylo vyřadit z exportu všechny součásti a normalizované součásti ze všech úrovní a referenční soubory a sestavy.Je možné,že se toto dá provést až úpravou samotného excelu.Je možné ve VBA,nebo iLogicem něco takového vytvořit?S pozdravem Popelka
Určitě dá, jenom v iLgicu je to mnohem jednodušší. Hlavně ten zápis do souboru. a lepší práce s kolekcema.Referenční výskyty je možné kontrolovat pomoci occurrence.BOMStructurePokud jde o normalizované součásti tak asi podle umístění. Jestli jsou uložené v podsložce obsahového centra. [code]ThisApplication.DesignProjectManager.ActiveDesignProject.ContentCenterPath[/code]
[code]Sub Main Dim asm As AssemblyDocument = ThisDoc.Document lines = New List(Of String)() contentCenterPath = ThisApplication.DesignProjectManager.ActiveDesignProject.ContentCenterPath Dim fileName As String = SelectFileName() If String.IsNullOrWhiteSpace(fileName) Then Return Dim occurrences As IEnumerable(Of ComponentOccurrence) = asm.ComponentDefinition.Occurrences.OfType(Of ComponentOccurrence) CreateStructure(occurrences, 0) System.IO.File.WriteAllLines(fileName, lines.ToArray())End SubPrivate Function SelectFileName() As String Dim saveDialog As Inventor.FileDialog ThisApplication.CreateFileDialog(saveDialog) With saveDialog .Filter = "CSV (Command delimited)(*.csv)|*.csv" .DialogTitle = "Specify output filename" .OptionsEnabled = False .SuppressResolutionWarnings = True .CancelError = True End With Try saveDialog.ShowSave() Return saveDialog.FileName Catch Return Nothing End TryEnd FunctionPrivate lines As List(Of String)Private contentCenterPath As StringPrivate Sub CreateStructure(occurrences As IEnumerable(Of ComponentOccurrence), level As Integer) For Each occurrence As ComponentOccurrence In occurrences If occurrence.BOMStructure = BOMStructureEnum.kReferenceBOMStructure Then Continue For If IsContentCenter(occurrence) Then Continue For Dim levelPrefix = New String(",", level) Dim occName As String = occurrence.Name Dim occFileName As String = occurrence.Definition.Document.FullFileName lines.Add(String.Format("{0},{1},{2}", levelPrefix, occName, occFileName)) CreateStructure(occurrence.SubOccurrences.OfType(Of ComponentOccurrence), level + 1) NextEnd SubPrivate Function IsContentCenter(occurrence As ComponentOccurrence) As Boolean Dim doc As Document = occurrence.Definition.Document Return doc.FullFileName.StartsWith(contentCenterPath)End Function[/code]
PopelkaM
02.09.2022, 12:40
Zkoušel jsem a hlásí....
Zkuste to ještě jednou zkopírovat. Tohle jsem opravoval