InDesignスクリプトアイコン

Windows10にインストールしたInDesign CS6でVBScriptとVB.netのexeからうまく実行できない問題について。

社にもちょくちょくと真新しいOS、Winodws10の搭載されたマシンが入ってくるようになりました。しかしVBScriptが動かないしVB.netからの実行も参照設定のエラー…。2か月度悩んだ挙句やっと解決しました!


VBScriptの参照先がオカシイ

この問題は以前から知られていてWindows10に限ったことではなくWindows7でも発生していて、他のサイトでも取り上げられていますが、一応最新の説明ということで。

原因はInDesignのレジストリに書き込まれたコンポーネントの参照先が間違っていることで、「regedit」で下記キーの値のデータを修正すれば治ります。

キー:
[HKEY_CLASSES_ROOT\TypeLib\{F4B43528-68EA-4c29-8A18-6FBD8E3C24C4}\1.0\0\win32]
誤:
C:\ProgramData\Adobe\InDesign\Version 8.0\ja_JP\Scripting Support\8.0\Resources for Visual Basic.tlb
正:
C:\ProgramData\Adobe\InDesign\Version 8.0-J\ja_JP\Scripting Support\8.0\Resources for Visual Basic.tlb

基本は「8.0-J」の部分が間違っておるわけですが、一応エクスプローラーでファイルが存在するか確かめてみて下さい。もしかすると、

正:
C:\ProgramData\Adobe\InDesign\Version 8.0-J\ja_JP\Scripting Support\8.1\Resources for Visual Basic.tlb

上記が正解の場合もあります(8.0→8.1になっている)。よくよく調べてみると、自分のマシン(Windows7)でもいつのまにかレジストリが書き換えられている!自分でやったのか、勝手になったのか覚えていないところが恐ろしい…。

これでやっとVBScriptが通るようになりました。我が社で配っているscriptのコンピュータ名を取得するjavascript内VBscript(下記コード)もこれで通ります。

//ユーザ名を取得(VBscript)
function NameGet(){
    try{
        var myscript = "Dim objNetWork\nSet objNetWork = CreateObject(\"WScript.Network\")\n" 
        myscript += "app.scriptArgs.SetValue \"myText\",objNetWork.UserDomain"
        app.scriptArgs.setValue("myText","")
        app.doScript(myscript,1447185511)
        return app.scriptArgs.getValue("myText")
    }catch(e){
        return app.userName
    }
}

VB.netでは変数を明示的に定義するな?

さて、参照設定を変えたのに何故だかVB.netからはエラーが量産されます。何故なんだ!何故なんだyo!

その答えは、イヤォ! じゃなくて、変数の宣言に問題がありました。今までは下記のようにちゃんと As でその変数のデータ型(この場合InDesign.Application)を明示的に定義していたのですが、

Dim app As InDesign.Application = CreateObject("InDesign.Application.CS6_J")

もうその定義自体がエラーを量産する原因になっていたみたいです(泣きそう)、なのでこれからは

Dim app = CreateObject("InDesign.Application.CS6_J")

上記のように暗黙的な定義「Dim 変数=」の形式にしましょう!これはappに限らず全てです、例えば下記のコードも

Private Function TagCheck(ByVal tex As String , ByVal target As InDesign.TextFrame) As String
	Dim 縦横 As InDesign.idHorizontalOrVertical = target.parentStory.StoryPreference.storyOrientation
~
End Function

ダメでエラーになります。正しいコードは

Private Function TagCheck(ByVal tex , ByVal target ) As String
	Dim 縦横 = target.parentStory.StoryPreference.storyOrientation
~
End Function

になります。

以上です。皆さんご参考になりましたか?

スポンサーリンク

スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です