excel - 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%\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"
推荐阅读
- python - python字符串仅由`/`拆分,而不是`//`
- sql - 即使语法正确,当我运行查询时,COUNTRI 也会出错
- macros - Guile `syntax-rules`:表格中的省略号;如何用两个椭圆编写这个宏?
- dart - Firebase 身份验证无法在我的颤振应用中使用谷歌登录
- python - python setup.py install 不适用于最新的 setuptools:'<*>.egg-info' 中没有脚本
- excel - UDF 从通用字符串中提取特定数据
- kubernetes - 如何使用映射到 Kubernetes 中服务的 api
- android - Android RecyclerView onBindViewHolder Called Twice(适配器创建时第一次)
- c# - Pagedlist 分页链接中的 Href 属性为空
- flask - Flask-Swagger-UI 无法识别 swagger.json 的路径