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真的不是解决这类问题的地方,请帮助我找到更适合这类问题。

我刚刚遇到过类似的情况,试图使用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%syswow64mshta.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"

最新更新