我社にもちょくちょくと真新しい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
になります。
以上です。皆さんご参考になりましたか?
スポンサーリンク
More from my site
スポンサーリンク