読者です 読者をやめる 読者になる 読者になる

C#ATIA

↑タイトル詐欺 主にCATIA V5 の VBA

スケッチをクローズする

スケッチのマクロはあまり見かけないのですが、スケッチャーに入るところから
抜けるまでの操作をすれば、記録が取れます。
但し、スケッチのマクロを開発する際に困る事があります。
SketchクラスのOpenEdition関数からCloseEdition関数まで処理が
出来ていれば問題ないのですが、エラー等で途中で止まってしまった
場合のスケッチを手動で削除しようとすると

f:id:kandennti:20160507190808p:plain

のメッセージが出てしまい、削除する事もスケッチャーに入る事もできない上
CATDUAを行っても解除されない、非常に迷惑な状態になって
しまいます。 結論としてはマクロでクローズするしかないようなので
こんなマクロを用意しました。

'vba スケッチのクローズ
Sub CATMain()
    Dim Msg$: Msg = "クローズするスケッチを選択して下さい : ESCキー 終了"
    Dim Skt As Sketch
    Do
        Set Skt = SelectItem(Msg, Array("Sketch"))
        If IsNothing(Skt) Then Exit Do
        Skt.CloseEdition
    Loop
End Sub

'選択 Filter指定無し時AnyObject
Private Function SelectItem(ByVal Msg$, _
                            Optional ByVal Filter As Variant = Empty) _
                            As AnyObject
    If IsEmpty(Filter) Then Filter = Array("AnyObject")
    Dim Sel As Variant: Set Sel = CATIA.ActiveDocument.Selection
    Sel.Clear
    Select Case Sel.SelectElement2(Filter, Msg, False)
        Case "Cancel", "Undo", "Redo"
            Exit Function
    End Select
    Set SelectItem = Sel.Item(1).Value
    Sel.Clear
End Function

'Nothing 書き方に統一感が無い為
Private Function IsNothing(ByVal OJ As Variant) As Boolean
    IsNothing = OJ Is Nothing
End Function

恐らく解除は手動では無理っぽいです。