VBA运行时错误'380':无法创建用于指定语言的脚本引擎

时间:2018-12-22 06:33:44

标签: excel vba excel-vba

我想,这更是一个普遍的问题,同时还有关于特定代码行的帮助。

我有一个几天前就可以正常工作的Excel文件,但是现在每当我尝试在工作簿中运行宏以从网站提取数据时,都会收到错误消息“运行时错误“ 380”:无法创建用于指定语言的脚本引擎。”

这是我遇到问题的代码块。我已对引发错误的特定部分加注星标。

Dim H As Object, S As Object, jParse As Object, X64 As Object, i&

Set H = CreateObject("WinHTTP.WinHTTPRequest.5.1")
    H.SetAutoLogonPolicy 0

#If Win64 Then
    Set X64 = x64Solution()
    X64.execScript "Function CreateObjectx86(sProgID) Set CreateObjectx86 = CreateObject(sProgID): End Function", "VBScript"
    Set S = X64.CreateObjectx86("MSScriptControl.ScriptControl")
#Else
    Set S = CreateObject("ScriptControl")
#End If
    ***S.Language = "JScript"***
    S.AddCode "function keys(O) { var k = new Array(); for (var x in O) { k.push(x); } return k; } "

我之前从未见过此错误,并且不确定如何解决此问题。我已经看过网上了,但到目前为止未能解决问题。我还尝试通过以下链接从Microsoft下载并安装zip文件:https://gallery.technet.microsoft.com/scriptcenter/Registry-key-to-re-enable-835fba77,但没有成功。

任何帮助将不胜感激,因为我真的不知道该怎么办。

如果Stack Overflow并不是真正解决此类问题的地方,那么将我引导到某个更适合此类问题的地方的帮助也将不胜感激。

1 个答案:

答案 0 :(得分:1)

我刚刚遇到类似的尝试,尝试使用JScript通过x64机器从SO API解析一些JSON。

免责声明:我没有编写以下过程,但不幸的是,我也没有获得这些过程的来源。

您可能已经知道,MSScriptControl.ScriptControl不太喜欢x64体系结构。这里有几个功能可以让您做所需的事情。

我将它们放在一个单独的模块中

Public Function CreateObjectx86(Optional sProgID, Optional bClose = False)

    Static oWnd As Object
    Dim bRunning As Boolean

    #If Win64 Then
        bRunning = InStr(TypeName(oWnd), "HTMLWindow") > 0
        If bClose Then
            If bRunning Then oWnd.Close
            Exit Function
        End If
        If Not bRunning Then
            Set oWnd = CreateWindow()
            oWnd.execScript "Function CreateObjectx86(sProgID): Set CreateObjectx86 = CreateObject(sProgID): End Function", "VBScript"
        End If
        Set CreateObjectx86 = oWnd.CreateObjectx86(sProgID)
    #Else
        Set CreateObjectx86 = CreateObject(sProgID)
    #End If

End Function

Private Function CreateWindow()

    Dim sSignature, oShellWnd, oProc

    On Error Resume Next
    sSignature = Left(CreateObject("Scriptlet.TypeLib").GUID, 38)
    CreateObject("WScript.Shell").Run "%systemroot%\syswow64\mshta.exe about:""about:<head><script>moveTo(-32000,-32000);document.title='x86Host'</script><hta:application showintaskbar=no /><object id='shell' classid='clsid:8856F961-340A-11D0-A96B-00C04FD705A2'><param name=RegisterAsBrowser value=1></object><script>shell.putproperty('" & sSignature & "',document.parentWindow);</script></head>""", 0, False
    Do
        For Each oShellWnd In CreateObject("Shell.Application").Windows
            Set CreateWindow = oShellWnd.GetProperty(sSignature)
            If Err.Number = 0 Then Exit Function
            Err.Clear
        Next
    Loop

End Function

然后,您可以返回到S对象并通过以下方式进行设置:

Dim S As Object
Set S = CreateObjectx86("MSScriptControl.ScriptControl")

S.Language = "JScript"