「Drawのカレントビュー内のテキストと寸法を削除したいが、
最初の1個しか削除されない」
とのご相談を頂きました。
とりあえず、検索の現行選択でテキストと寸法を選択するマクロの記録をし、
不要そうな部分を削除しつつ、変数名を修正したものがこちらです。
Sub CATMain() Dim dwDoc As DrawingDocument Set dwDoc = CATIA.ActiveDocument Dim sel As selection Set sel = dwDoc.selection sel.Search "(CATDrwSearch.DrwDimension + CATDrwSearch.DrwText),sel" End Sub
実際に欲しいのは事前選択ではなくカレントビューの為、カレントビューを
事前に選択させつつ、高輝度表示もOffにします。
Sub CATMain() Dim dwDoc As DrawingDocument Set dwDoc = CATIA.ActiveDocument Dim sel As selection Set sel = dwDoc.selection Dim actVi As DrawingView Set actVi = dwDoc.Sheets.ActiveSheet.views.ActiveView CATIA.HSOSynchronized = False With sel .Clear .Add actVi .Search "(CATDrwSearch.DrwDimension + CATDrwSearch.DrwText),sel" End With CATIA.HSOSynchronized = True End Sub
恐らく上手く削除出来ない原因は、ここからループ等で一個づつ削除しているのでは
無いのかな? と思います。
僕は、Drawでの要素の削除はSelectionで選択しDelete(又はCut)するしか
方法がわかりません。(GSOはもっと高速な削除方法が有ります)
確認メッセージをつけた上、削除するように変更するとこんな感じです。
Sub CATMain() Dim dwDoc As DrawingDocument Set dwDoc = CATIA.ActiveDocument Dim sel As selection Set sel = dwDoc.selection Dim actVi As DrawingView Set actVi = dwDoc.Sheets.ActiveSheet.views.ActiveView CATIA.HSOSynchronized = False '検索 With sel .Clear .Add actVi .Search "(CATDrwSearch.DrwDimension + CATDrwSearch.DrwText),sel" End With Dim delCount As Long delCount = sel.Count2 Dim msg As String '削除要素無し If delCount < 1 Then msg = "ビュー[" & actVi.Name & "]内に削除要素が有りません!" MsgBox msg, vbInformation GoTo fin End If '確認 msg = "ビュー[" & actVi.Name & "]内の" & vbCrLf & _ "テキスト・寸法 " & delCount & "個 全てを削除します" & vbCrLf & _ "宜しいですか?" If MsgBox(msg, vbYesNo + vbQuestion) = vbNo Then GoTo fin End If '削除 sel.Delete '←ここ 検索で選択したもの全てを削除 fin: CATIA.HSOSynchronized = True End Sub
どうでしょうか?