Excel kann nicht über JScript geöffnet werden, das in eine HTA eingebettet ist

Dec 02 2020

Nach dieser Frage versuche ich, den VBScript-Code auf dieser Seite in JScript zu konvertieren . Wenn ich den folgenden .htaCode ausführe:

<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>

Beim Klicken auf die Schaltfläche wird eine leere Excel-Tabelle geöffnet. wie erwartet. Wenn ich jedoch den VBScript-Teil in JScript konvertiere

<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>

Beim Klicken auf die Schaltfläche wird Excel überhaupt nicht geöffnet. Ich würde mich freuen, wenn Sie mir helfen könnten, zu wissen, was das Problem ist und wie ich es lösen kann. Vielen Dank für Ihre Unterstützung im Voraus.

Antworten

1 user692942 Dec 02 2020 at 16:53

Warum funktioniert die Object_EventSyntax nicht ?

Es ist eigentlich eine sehr einfache Object_EventSyntax, VBScript. Damit Ereignisse automatisch in JScript Object::Eventgebunden werden können, müssen Sie nur die richtige Syntax verwenden . Hier ist ein Beispiel für die Verwendung automatisch gebundener Ereignisse.

<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>

Ich habe dies gerade getestet und es scheint zu funktionieren. Es kann also sein, dass Ihnen der onclickEvent-Handler fehlt, wie @Teemu in den Kommentaren vorschlägt .

<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>

Der einzige wirkliche Unterschied besteht in der Einbeziehung des onclickEreignishandlers in das <input>Element.

onclick="return button1_onclick();"

Es wird eine Schaltfläche angezeigt, die beim Klicken Microsoft Excel mit einer neuen Arbeitsmappe öffnet.


Nützliche Links

  • Javascript in der HTA-Datei
  • Öffnen Sie Programme aus der HTA-Anwendung
  • ActiveX-Ereignishandler in einem HTA, die Javascript verwenden (die Tatsache, dass dies als Javascript bezeichnet wird, zeigt nur die Fehlinformationen rund um JScript) .
  • MSDN (Scripting Clinic) - Scripting-Ereignisse