恐らく、こちらの2つの目的を一体化したものがお望みだろうと
思われる質問を頂きました。
カレントビューの角度や生成スタイルの取得2 - C#ATIA
検索したテキストの文字を、指定したテキストに追記する - C#ATIA
言葉にすると・・・
「複数のビュー名とリンクした状態のテキストを新作したい」
と解釈しました。
単に「こちらの青のテキストを削除しちゃって、復活させたい」と言う事では
無いですよね?
これであれば、マクロを使うまでも無く、こちらのコマンドで可能です。
・・・マクロだと、StartCommandで出来るのかな?
さて本題ですが、DrawingTextって、困った事に "式" が利用できないですよね?
リンクした状態を作る為には、属性リンクを利用する以外方法を知らないです。
こちらの経験が生かせそうです。
2D属性リンクを扱いたい1 - C#ATIA
'vba Sub CATMain() 'ドキュメント Dim dwDoc As DrawingDocument Set dwDoc = CATIA.ActiveDocument 'selection Dim sel As selection Set sel = dwDoc.selection '検索-紫の文字 sel.Clear sel.Search "CATDrwSearch.DrwText.Color='(128,0,255)',all" If sel.Count2 < 1 Then MsgBox "該当する文字は見つかりませんでした" Exit Sub End If '検索でHitした文字のビュ-の取得 Dim viLst As Collection Set viLst = New Collection Dim i As Long For i = 1 To sel.Count2 viLst.Add sel.Item2(i).Value.Parent.Parent Next sel.Clear 'ビュ-名のパラメータの取得 '本当は重複削除チェックすべき Dim prmLst As Collection Set prmLst = New Collection Dim vi As DrawingView Dim subLst As Parameters Dim prm As Parameter For Each vi In viLst Set subLst = dwDoc.Parameters.SubList(vi, False) Set prm = GetParameter("Name", subLst) If Not prm Is Nothing Then prmLst.Add prm End If Next 'アクティブビューに空のテキスト新作 Dim actVi As DrawingView Set actVi = dwDoc.Sheets.ActiveSheet.views.ActiveView Dim txt As DrawingText Set txt = actVi.Texts.Add(String(prmLst.Count, vbLf), 0, 0) '属性リンクを追加 For i = 1 To prmLst.Count txt.InsertVariable Len(txt.Text) - (prmLst.Count - i), 0, prmLst(i) Next '終わり MsgBox "Done" End Sub 'パラメータ取得 Private Function GetParameter( _ ByVal key As String, _ ByVal params As Parameters) As Parameter Set GetParameter = Nothing Dim prm As Parameter Err.Number = 0 On Error Resume Next Set prm = params.Item(key) On Error GoTo 0 Set GetParameter = prm End Function
こんな感じのデータを用意しました。
上記のマクロを実行すると、紫のテキストを持つビュー名を取得し、
アクティブビューの原点付近にリンク付きのビュー名リストのテキストが出来上がります。
ややこしいのでこんな感じです。
簡単に確認したところ、ID・Suffixの修正も反映されます。
正直な所、これ以上先は手動でしか出来そうに有りません。
(マクロで修正すると属性リンクが消えます)
DrawingViewに事前に改行を入れることで対応しましたが、ここが一番難しかった。
DrawingViewの改行はラインフィールド(vbLf)です。