C#ATIA

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

読み取り専用でファイルを開く1

"読み取り専用でファイルを開きたい" と御質問を頂きました。
過去に探した事が有り、"Unofficial CATIA User Forum" にも
記載したのですが・・・ 生憎、ソースコードの管理が悪く サンプルが見つかりませんでした。

結論としては、CATIAのマクロでドウコウでは無く、FileSystemObjectで
読み込むファイルの属性を読み込み専用に変更した上で読み込み、
その後元に戻します。 要は読み込む瞬間だけ "読み込み専用"
としてしまえば良いだけでした。

サンプルコードです。

'vba sample_FileOpen_ReadOnly_ver0.0.1
'読み取り専用でCATIAなファイルを読み込む

Option Explicit
Private Const SelectionType = "*.CAT*" '"*.CATPart"
Private Const ReadOnly = 1& 'ファイル属性-読み取り専用

Sub CATMain()
    'ファイル選択
    Dim OpenFilePath As String
    Dim Msg As String: Msg = "読み取り専用で開くファイルを選択してください"
    OpenFilePath = CATIA.FileSelectionBox(Msg, SelectionType, CatFileSelectionModeOpen)
    If OpenFilePath = vbNullString Then Exit Sub
    
    'ファイル属性取得
    Dim Original As Long: Original = GetAttributes(OpenFilePath)
    
    '属性チェックし必要なら変更
    If Not (Original And ReadOnly = ReadOnly) Then
        Call SetAttributes(OpenFilePath, ReadOnly)
    End If
    
    '読み込み
    Call CATIA.Documents.Open(OpenFilePath)
    
    '属性を変更していたら元に戻す
    If Not (Original And ReadOnly = ReadOnly) Then
        Call SetAttributes(OpenFilePath, Original)
    End If
End Sub

'FileSystemObject
Private Function GetFSO() As Object
    Set GetFSO = CreateObject("Scripting.FileSystemObject")
End Function

'ファイル属性設定
Private Sub SetAttributes(ByVal Path As String, ByVal Value As Long)
    Dim Fso As Object: Set Fso = GetFSO
    Fso.GetFile(Path).Attributes = Value
End Sub

'ファイル属性取得
Private Function GetAttributes(ByVal Path As String) As Long
    Dim Fso As Object: Set Fso = GetFSO
    GetAttributes = Fso.GetFile(Path).Attributes
End Function

FileSelectionBoxを利用してファイルを選択させていますが、単に開きたい
ファイルのパスを指定してもOKです。

FileSelectionBoxについては、第二引数の表示させるファイルの拡張子の
指定なのですが複数の拡張子を指定できなさそうな為、苦し紛れな
ワイルドカードを利用しています。
(catvbaやCATScript等、本来表示させるべきではないものまで表示されます)

実際にマクロを利用して開いた感じはこちらです。
f:id:kandennti:20170601191835p:plain
CATIA上では "読み込み専用" となっていますが、実際のファイルのプロパティ(右下)は
"読み込み専用" となっていません。

ファイルは例の宿題です。 忙しい上に、機械が空かなかったり・・・(言い訳)


※涙が出るほどの初歩的な誤記を修正しました・・・。