C#ATIA

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

実行中のプロジェクト名とパス取得する

今まで気が付かなかったのですが・・・。

VBA実行中にプロジェクト名やプロジェクトのファイルパスが欲しいなぁ
と、思った事がありましたがあまり調べていませんでした。

ちょっと試しているうちに発見しました。

'vba 実行中のプロジェクト名とパス取得
Option Explicit

Sub CATMain()
    'Apc取得
    Dim Apc As Object: Set Apc = GetApc()
    If Apc Is Nothing Then Exit Sub
    
    '実行中のVBProject取得
    Dim ExecPjt As Object: Set ExecPjt = Apc.ExecutingProject
    
    Dim Info$
    Info = "現在実行中のマクロのプロジェクト名は" & vbNewLine & _
           "[ " & ExecPjt.Name & " ] です。" & vbNewLine & _
           "プロジェクトファイルパスは" & vbNewLine & _
           "[ " & ExecPjt.DisplayName & " ] です。" 'ReferenceNameかも
    MsgBox Info
End Sub

Private Function GetApc() As Object
    Set GetApc = Nothing
    
    'VBAバージョンチェック
    Dim COMObjectName$
    #If VBA7 Then
        COMObjectName = "MSAPC.Apc.7.1"
    #ElseIf VBA6 Then
        COMObjectName = "MSAPC.Apc.6.2"
    #Else
        MsgBox "VBAのバージョンが未対応です"
        Exit Function
    #End If
    
    'APC取得
    Dim Apc As Object: Set Apc = Nothing
    On Error Resume Next
        Set Apc = CreateObject(COMObjectName)
    On Error GoTo 0
    
    If Apc Is Nothing Then
        MsgBox "MSAPC.Apcが取得できませんでした"
        Exit Function
    End If
    
    Set GetApc = Apc
End Function

一応VBA6でも対応できそうな雰囲気に書いてますが、
試していない為よくわかりません。

こんな感じです。
f:id:kandennti:20171006185315p:plain

Excel等のOffice製品でも取得できるのかどうかもわかりません。
(パスは、ExcelならBookファイルになりそう・・・)

CATIAのバッチモード起動でのマクロ処理は、CATScriptしか出来なさそうなのですが
仕込んだCATScriptから、VBAのProjectを取得し実行できそうな
気がしてます。 バッチモードでもVBAで戦えそう。