HTA内に埋め込まれたJScriptからExcelを開くことができません

Dec 02 2020

この質問に続いて、このページのVBScriptコードをJScriptに変換しようとしています。以下の.htaコードを実行した場合:

<HTML>
<BODY>
    <INPUT id=button1 name=button1 type=button value=Button>
    <SCRIPT LANGUAGE="VBScript">
        sub button1_onclick()
            dim app
            set app = createobject("Excel.Application")
            app.Visible = true
            dim wb
            set wb = app.workbooks.add
            end sub
    </SCRIPT>
</BODY>
</HTML>

ボタンをクリックすると、空のExcelシートが開きます。予想通り。ただし、VBScript部分をJScriptに変換すると

<HTML>
<BODY>
    <INPUT id=button1 name=button1 type=button value=Button>
    <script LANGUAGE="JScript">
        function button1_onclick() {
            // var app = WScript.CreateObject("Excel.Application");
            var app = new ActiveXObject("Excel.Application");
            app.Visible = true;
            var wb = app.Workbooks.Add();
        }
    </script>
</BODY>
</HTML>

ボタンをクリックしてもExcelはまったく開きません。何が問題なのか、どうすれば解決できるのかを教えていただければ幸いです。よろしくお願いします。

回答

1 user692942 Dec 02 2020 at 16:53

Object_Event構文が機能しないのはなぜですか?

実際には非常に単純なObject_Event構文はVBScriptです。イベントをJScriptで自動的にバインドできるようにするには、正しい構文を使用する必要があります。これはObject::Event、自動バインドされたイベントを使用した例です。

<html>
<body>
    <input id="button1" name="button1" type="button" value="Button">
    <script language="JScript">
        function button1::onclick() {
            var app = new ActiveXObject("Excel.Application");
            app.Visible = true;
            var wb = app.Workbooks.Add();
        }
    </script>
</body>
</html>

これをテストしたところ、機能しているようです。@ Teemuがコメントで示唆しているように、onclickイベントハンドラーが欠落している可能性があります。

<html>
<body>
    <input id="button1" name="button1" type="button" value="Button" onclick="return button1_onclick();">
    <script language="JScript">
        function button1_onclick() {
            var app = new ActiveXObject("Excel.Application");
            app.Visible = true;
            var wb = app.Workbooks.Add();
        }
    </script>
</body>
</html>

唯一の本当の違いはonclick<input>要素にイベントハンドラーが含まれていることです。

onclick="return button1_onclick();"

クリックすると新しいワークブックでMicrosoftExcelを開くボタンが表示されます。


便利なリンク

  • HTAファイルのJavascript
  • HTAアプリケーションからプログラムを開く
  • Javascriptを使用するHTAのActiveXイベントハンドラー (これがJavascriptと呼ばれるという事実は、JScriptに関する誤った情報を示しているだけです
  • MSDN(スクリプトクリニック)-スクリプトイベント