しろくろさんがかなりヒントを書いてくれたので、
自分なりに作ってみました。
”CATIA.HSOSynchronized使った方が早い” と書きていましたが、
試した所若干遅かったです。ごめんなさい。
'vba アクティブシートの最初のビューをコピペし形状を削除 ' winAPI #If VBA7 And Win64 Then Private Declare PtrSafe Function timeGetTime Lib "winmm.dll" () As Long #Else Private Declare Function timeGetTime Lib "winmm.dll" () As Long #End If Option Explicit Sub CATMain() Dim actdoc As DrawingDocument Set actdoc = CATIA.ActiveDocument Dim sel As Selection Set sel = actdoc.Selection Dim actSheet As DrawingSheet Set actSheet = actdoc.Sheets.ActiveSheet Dim vi As DrawingView Set vi = actSheet.Views.Item(3) '一個目のビュー sel.Clear If vi.GeometricElements.Count < 2 Then 'GeometricElements.Countが1の場合は、 '形状が無いみたい Exit Sub End If Dim t As Long t = timeGetTime '時間の測定開始 'CATIA.HSOSynchronized = False 'ビューコピー sel.Add vi sel.Copy sel.Clear 'ビューペースト sel.Add actSheet sel.Paste 'クローンしたビューの選択 sel.Clear sel.Add actSheet.Views.Item(actSheet.Views.Count) '現行選択の形状を検索 sel.Search "CATDrwSearch.2DGeometry,sel" Dim removeCount As Long removeCount = sel.Count '削除 '昔はDeleteよりCutの方が早いと言われていたのですが 'Deleteの方が早いです sel.Delete 'sel.Cut 'CATIA.HSOSynchronized = True '削除数と処理時間 MsgBox removeCount & " : " & (timeGetTime - t) * 0.001 & "s" End Sub
検索-削除を複数回行うより1回の方がきっと早いだろうと
思われるため、こちらの設定をマクロの記録しました。
緑部分のオン/オフがCATIA.HSOSynchronizedなのかと思って
いたのですがどうなんでしょうかねぇ。
r1 Application (Object)
どうしても複数条件が必要な検索をマクロで使用する必要が
ある場合は、拡張で何とか条件を作った方が良いかな?とも
思っています。
又、何で手動で手間がかかるのか? が少し分かりました。
実際に検索した際、こんな表示になります。
テストした際のデータに形状が14015個有るのに対して、
検索後に選択されたのは1290個 と言う状態です。
この場合、選択し検索し削除し、再度選択し検索し削除・・・
と、10回以上行う必要がある為ではないかな?と感じてます。
僕の設定が偶々1290個になっているのですが、これは
オプションの設定で変更できます。
試した所、MAXでは5000でした。量が多いとやっぱり複数回
行う必要があるかな・・・。