C#ATIA

↑タイトル詐欺 主にCATIA V5 の VBA(最近はPMillマクロとFusion360APIが多い)

カレントビュー内のテキスト・寸法全てを削除する

「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

どうでしょうか?