こちらの続きです。
ProductTree の リオーダー - C#ATIA
サンプル用のマクロを用意していたのですが、Product用のマクロを持っていない為、
以前の物を修正し、インスタンス名でソートするマクロに変更しました。
'vba sample_ReOrder_Product ver0.0.1 using-'KCL0.0.12' by Kantoku 'インスタンス名でのソート順にTreeを並び替えます Option Explicit Sub CATMain() 'ドキュメントのチェック If Not CanExecute("ProductDocument") Then Exit Sub 'Doc取得 Dim ProDoc As ProductDocument: Set ProDoc = CATIA.ActiveDocument Dim Pros As Products: Set Pros = ProDoc.Product.Products If Pros.Count < 2 Then Exit Sub 'オプション変更 Dim AssyMode As AsmConstraintSettingAtt Set AssyMode = CATIA.SettingControllers.Item("CATAsmConstraintSettingCtrl") Dim OriginalMode As CatAsmPasteComponentMode OriginalMode = AssyMode.PasteComponentMode 'オプション切り替え AssyMode.PasteComponentMode = catPasteWithCstOnCopyAndCut 'ソート済み名前リスト Dim Names: Set Names = Get_SortedNames(Pros) 'カット Dim Sel As Selection: Set Sel = ProDoc.Selection Dim Itm As Variant CATIA.HSOSynchronized = False Sel.Clear For Each Itm In Names Sel.Add Pros.Item(Itm) Next Sel.Cut 'ペースト With Sel .Clear .Add Pros .Paste .Clear End With CATIA.HSOSynchronized = True 'オプション戻し,UpDate AssyMode.PasteComponentMode = OriginalMode ProDoc.Product.Update End Sub 'インスタンス名でソート済みの名前リスト Private Function Get_SortedNames(ByVal Pros As Products) As Object Dim Lst As Object Set Lst = KCL.InitLst() Dim Pro As Product For Each Pro In Pros Lst.Add Pro.Name Next Lst.Sort Set Get_SortedNames = Lst End Function
又、ソート処理が毎回面倒な為、KCLをVer0.0.12としました。
非常に個人的なCATVBA用ライブラリ - C#ATIA