C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

バルーンの文字の先頭に文字を追加したい

久々にCATIAです。 そう、また面倒になったので。

f:id:kandennti:20210907124721p:plain

左の様にバルーンで数字だけだと、使う度に数字がカウントアップ
してくれるのですが、右の様に数字意外だとカウントアップしないので
困っちゃいます。

取りあえず数字だけでバルーンを作りまくり、最後にマクロで
先頭文字を追加するのが楽だな と気が付きました。
で、マクロを作りました。

'vba Draw_AddBallonsHeader Ver0.0.1 using-'KCL0.0.12'  by Kantoku
'バルーンの先頭に文字を追記

Option Explicit

Sub CATMain()

    'ドキュメントのチェック
    If Not KCL.CanExecute("DrawingDocument") Then Exit Sub

    'ドキュメント
    Dim doc As DrawingDocument
    Set doc = CATIA.ActiveDocument

    'バルーン
    Dim ballons As Collection
    Set ballons = getBallons(doc)
    
    '問い合わせ
    Dim msg As String
    Dim res As String
    msg = "バルーンの先頭に追加する文字を入力してください(例:S)"
    res = InputBox(msg, "バルーンの先頭文字", "S")
        
    If res = "" Then
        Exit Sub
    End If
    
    '追記
    Call addBallonHeader(ballons, res)

End Sub


Private Sub addBallonHeader( _
    ByVal ballons As Collection, _
    ByVal header As String)
    
    Dim newCount As Long
    newCount = Len(header)
    
    Dim ball As DrawingText
    For Each ball In ballons
        If Mid(ball.Text, 1, newCount) = header Then
            GoTo continue
        End If
        
        ball.Text = header & ball.Text
        
continue:
    Next
        
End Sub


Private Function getBallons( _
    ByVal doc As DrawingDocument) As Collection

    Dim sel As Selection
    Set sel = doc.Selection
    
    CATIA.HSOSynchronized = False
    
    sel.Clear
    sel.Search "(CAT2DLSearch.DrwBalloon + CATDrwSearch.DrwBalloon),all"

    Dim lst As Collection
    Set lst = New Collection
    
    Dim i As Long
    For i = 1 To sel.Count2
        Call lst.Add(sel.Item2(i).Value)
    Next

    Set getBallons = lst
    
    sel.Clear
    CATIA.HSOSynchronized = True
    
End Function

既に先頭の文字が追加されているっぽい部分には追記しません。
劇的に楽。