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

13 浏览
0 Comments

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

这更像是一个一般性问题,我想,以及对特定代码行的帮助。

我有一个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不适合这种问题,请帮助我指引到更适合这种问题的地方。

0
0 Comments

VBA Run-time error '380': A script engine for the specified language can not be created 这个问题的出现原因是MSScriptControl.ScriptControl对象不兼容x64架构。解决方法是使用下面的函数创建一个额外的模块,并在代码中调用该函数创建MSScriptControl.ScriptControl对象。

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:", 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"

以上代码可以解决自动化错误问题,如果存在Scriptlet.TypeLib的权限问题,请参考链接中的更新代码。

0