ライセンス交付よりライセンスを取得するマクロ|CATIAマクロの作成方法
今回の記事は「マクロ案」でいただいた内容です。
送って頂いた内容は以下のようなマクロです。
ワークベンチ: パート・デザインorアセンブリー・デザイン
マクロ案: シェアラブルプロダクト(SPAやKWA)
のライセンスへのアクセスを簡素化するマクロを作成したく思って おります。 
5~6年程前に下記サイトで話題となっていますが、未解決のままでした…。ご教授いただけたら幸いです。 
https://www.eng-tips.com/viewthread.cfm?qid=350925 
確かに上記のサイトでは最終的にうやむやになっていますが、どうやら上記サイトに書かれているコードでライセンスの取得が可能なようです。
個人的にライセンス関係のマクロはほとんどわからないので、本ページで紹介するマクロは上記サイトに書かれているコードを国内向け少し書き換えただけのものになっています。
そのため本ページの内容は曖昧な部分が多いと思いますが予めご了承ください。
マクロの機能
※画像はCATIAヘルプのものを引用しています。
(参考:Reserving Shareable Product Licenses Dynamically)
このページで紹介するマクロは上画像の赤枠内にある「ASDライセンス」を取得/解放するマクロです。(※コード自体はMacro to load licens|ENGI-TIPS.COMにあるコードをほとんどそのまま引用したものです。)
コード内の一部を書き換えることである程度はどのライセンスにも対応できそうです。
 以下で紹介するコードは実行できる場合とできない場合があるようです。
実行できない場合はおそらく「SetLicense」というメソッドで「Run-time error '-2147467259 (80004005)’)」というようなエラーが発生すると思います。
このエラーについてMicrosoftのページを確認すると以下のようなページがありました。
実行時エラー-グラフのプロパティを設定するときに 2147467259 (80004005)|Microsoft
 
上記ページを要約すると、
Excelのシートに保護がかかっているとマクロ実行時にエラーが起きるという内容になっています。
 
これと同じエラーということから、以下で紹介するコードが実行できない場合は“おそらく"管理者設定によりCATIAのライセンス関連に何らかの制限がかかっているのかもしれません。(断言はできませんがコードを実行できた知人もいるのでコード自体は間違っていないと思います)
 
多くの企業では社員が勝手にCATIAの設定をいじくり回せないように管理者設定により個人での設定変更を行えないようにしている場合があります。実行できないのはこれが原因だと勝手に推測しています。
サンプルコード
Sub CATMain()
    Dim settingControllers1 As SettingControllers
    Set settingControllers1 = CATIA.SettingControllers
    
    Dim memoryWarningSettingAtt1 As SettingController
    Set memoryWarningSettingAtt1 = settingControllers1.Item("CATSysMemoryWarningSettingCtrl")
    
    Dim licenseSettingAtt1 As SettingController
    Set licenseSettingAtt1 = settingControllers1.Item("CATSysLicenseSettingCtrl")
    
    Dim Message, Style, Title, Response, SecString
    Message = ("ASDライセンスを取得する場合は「はい(Y)」," & vbLf & "解放する場合は「いいえ(N)」をクリックして下さい。")
    Style = vbYesNo + vbDefaultButton1    'Define default button
    Title = "Purpose : change status of a specific license "
    Response = MsgBox(Message, Style, Title)
    
    Dim generalSessionSettingAtt1 As SettingController
    Dim disconnectionSettingAtt1 As SettingController
    
        
    If Response = vbYes Then
            
        licenseSettingAtt1.SetLicense "ASD.prd", "ASD.prd"    '「ASD」の部分(2箇所)を取得したいライセンス名に書き換える
        Set generalSessionSettingAtt1 = settingControllers1.Item("CATCafGeneralSessionSettingCtrl")
        
        generalSessionSettingAtt1.SaveRepository
        Set disconnectionSettingAtt1 = settingControllers1.Item("CATSysDisconnectionSettingCtrl")
        
        disconnectionSettingAtt1.SaveRepository
        memoryWarningSettingAtt1.SaveRepository
        licenseSettingAtt1.SaveRepository
    
    Else    'vbNo
    
        licenseSettingAtt1.SetLicense "ASD.prd", "NotRequested"    '「ASD」の部分(1箇所)を取得したいライセンス名に書き換える
        Set generalSessionSettingAtt1 = settingControllers1.Item("CATCafGeneralSessionSettingCtrl")
        
        generalSessionSettingAtt1.SaveRepository
        Set disconnectionSettingAtt1 = settingControllers1.Item("CATSysDisconnectionSettingCtrl")
        
        disconnectionSettingAtt1.SaveRepository
        memoryWarningSettingAtt1.SaveRepository
        licenseSettingAtt1.SaveRepository
    
    End If
End Sub
上記コードのコメント文の文字列を変換するだけでいくつかのライセンスは取得可能なことが判明しました。ライセンス関連のオブジェクトについては下記ページを参照してみてください。
r1 LicenseSettingAtt (Object) – CATIADOC
まとめ
今回はCATIAのライセンスを取得するマクロについての内容でした。
今回のマクロで使用していた「LicenseSettingAttオブジェクト」を使うことで現在取得しているライセンスを取得したりすることも可能なようです。ライセンス関連のマクロを作成しようと考えている方はこのオブジェクトについて色々調べてみるとよいと思います。
 
CATIAマクロを本気で勉強するなら









