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

Navara
02.09.2022, 08:54
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

Navara
02.09.2022, 09:09
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

Navara
02.09.2022, 11:07
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]

Navara
02.09.2022, 11:40
[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í....

Navara
02.09.2022, 12:49
Zkuste to ještě jednou zkopírovat. Tohle jsem opravoval