「マクロで "エリア フィルを修正" コマンドを」と御相談を頂いたのですが、難しいです。
よくわかっていない物をマクロ化する際に最初に利用するのが、個人的なライブラリ "KCL"
のCATMainにしているマクロです。
選択されたものをローカルウィンドウでみて見ると、
エリアフィルではなく、DrawingViewを取得してしまうんです。
3Dとリンクしている線等と同じで、目的のもの自体が取得できないんです。
海外サイトで検索してみても、まともな情報が無かったのですが
"検索でHitするよ"
みたいな記述はあったので、マクロの記録をとりちょこっと修正
Sub CATMain() Dim drawingDocument1 As DrawingDocument Set drawingDocument1 = CATIA.ActiveDocument Dim selection1 As Selection Set selection1 = drawingDocument1.Selection selection1.Search "CATDrwSearch.DrwAreaFill,all" MsgBox TypeName(selection1.Item2(1).Value) End Sub
検索でHitした一番最初のオブジェクトのタイプを表示させるだけです。
実行してみると、
やっぱりダメじゃない・・・。
マクロでユーザーと対話出来る唯一の方法が "Selection" だと思うのですが
これで全く接触出来ないのでは、まともな他の方法は恐らく無いだろう
と判断しました。
そこで残された唯一の方法がWinAPIです。
'vba using-'KCL0.08' '"エリア フィルを修正" コマンドに挑戦 'スリープAPI #If VBA7 Then Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As LongPtr) #Else Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long) #End If 'マウスボタン関係のAPI Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, _ ByVal dx As Long, ByVal dy As Long, _ ByVal cButtons As Long, ByVal dwExtraInfo As Long) Private Const MOUSEEVENTF_LEFTUP As Integer = &H4 '左ボタンUP Private Const MOUSEEVENTF_LEFTDOWN As Integer = &H2 '左ボタンDown '左クリック Private Sub MouseLEFT() Call mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) Call mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0) End Sub Sub CATMain() Dim t&: t = 100 'スリープ時間 Dim Sel As Selection: Set Sel = CATIA.ActiveDocument.Selection Dim Dmy As DrawingView 'ダミー Set Dmy = KCL.SelectItem("エリアフィルの辺りをクリックして!", "DrawingView") If KCL.IsNothing(Dmy) Then Exit Sub Sel.Clear 'Sleep t MouseLEFT Sleep t CATIA.StartCommand "エリア フィルを修正" 'Sleep t MouseLEFT Sel.Clear End Sub
StartCommand と WinAPIのマウスクリックの組み合わせです。
非常に限定的な利用方法なので、説明を。
まず、こんな感じでエリアフィルと割り当てたい領域まで移動させておきます。
この状態からマクロを実行します。
実行後は、エリアフィルと割り当てたい領域がラップしている部分をクリックします。
赤印辺りです。
そうすると、エリアフィルが修正されます・・・・それだけです。
しかも、悪い事にこのマクロは マクロのメニューやツールバー登録からの実行では
"エリア フィルを修正" を呼び出した所で止まってしまいます。
(VBAエディターからの実行等、アウトプロセスな状態でしか機能しません)
正直な所、手動で通常通り作業を行った方が効率が良いです。
もう少し改良すれば使い道があるかもしれませんが。