Ошибка выполнения VBA '380': невозможно создать механизм сценариев для указанного языка - PullRequest
0 голосов
/ 22 декабря 2018

Я полагаю, что это более общий вопрос, а также помощь по конкретной строке кода.

У меня есть файл 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; } "

Я никогда не видел эту ошибку раньше, и я не уверен, как исправить эту проблему.Я смотрел в Интернете и до сих пор не удалось выяснить проблему.Я также попытался загрузить и установить zip-файл от Microsoft по этой ссылке: https://gallery.technet.microsoft.com/scriptcenter/Registry-key-to-re-enable-835fba77, но безуспешно.

Любая помощь будет признательна, потому что я действительно не знаю, что здесь делать.

Кроме того, если переполнение стека на самом деле не место для такого рода вопросов, любая помощь в направлении меня куда-то, что было бы лучше подходит для такого рода проблем будет приветствоваться.

1 Ответ

0 голосов
/ 22 декабря 2018

У меня только что была похожая встреча, когда я пытался использовать JScript для анализа некоторого JSON из SO API с помощью машины x64.

Отказ от ответственности: я не создавал следующие процедуры, но, к сожалению, я не пишуУ меня также есть источник, откуда я их получил.

Как вы, наверное, уже поняли, 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...