64 位 Excel VBA 调用 JavaScript 函数

Posted

技术标签:

【中文标题】64 位 Excel VBA 调用 JavaScript 函数【英文标题】:64 bit Excel VBA to call a JavaScript function 【发布时间】:2020-09-21 18:06:04 【问题描述】:

我需要使用 VBA ScriptControl 对象来调用 javascript 函数,但它给了我“类未注册”错误。 我从 Tools->References 添加了 Microsoft Script Control 1.0 我需要调用 JavaScript 以从此 Rest API 获取 JSON 对象,以计算 Excel 宏中的值。

This post 告诉我 ScriptControl 仅用于 32 位。我正在使用 64 位 Excel。 我也尝试使用link 中提到的方法,但由于 VBA 无法识别 ActiveXObject

,因此它不起作用

我的Excel VBA代码调用一个简单的JS函数:

Private Sub CommandButton1_Click()
    Dim jsObj As MSScriptControl.ScriptControl, result As Integer
    Set jsObj = CreateObject("MSScriptControl.ScriptControl")
    jsObj.Language = "JScript"
    With jsObj
        .AddCode ("function prod1(a,b)return a*b;")
        result = .Run("prod1", 2, 3)
    End With
    MsgBox result
End Sub

我收到 Set jsObj = CreateObject("MSScriptControl.ScriptControl") 行的类未注册错误 是否有从 VBA 调用 JavaScript 函数的替代方法?还是我错过了什么?

【问题讨论】:

您不能使用 XMLHTTP 调用该 API?您似乎不需要为此设置脚本控件。 当 API 以 XML 形式返回值时,可以使用 XMLHTTP。此 API 以 JSON 格式返回它 使用 xmlHTTP 获取 JSON 没有问题 - 这里有很多关于 SO 的现有问题,涵盖(并解析响应)***.com/search?q=%5Bvba%5D+json 【参考方案1】:

不需要 ScriptControl 对象:您可以使用 XMLHTTP 和 VBA-JSON。

例如:

Public Sub Tester()

    'Import the "JsonConverter.bas" file from 
    '     https://github.com/VBA-tools/VBA-JSON
    'and add a reference to the Microsoft Scripting Runtime library
    Dim http As Object, JSON As Object, i As Integer, o As Object, k

    Set http = CreateObject("MSXML2.XMLHTTP")
    http.Open "GET", "https://www.alphavantage.co/query?" & _
          "function=CURRENCY_EXCHANGE_RATE&from_currency=USD" & _
          "&to_currency=JPY&apikey=demo", False

    http.Send

    Debug.Print http.responseText
    Debug.Print "-----------------------------------"

    Set JSON = ParseJson(http.responseText)

    Set o = JSON("Realtime Currency Exchange Rate")
    For Each k In o.keys
        Debug.Print k, o(k)
    Next k

End Sub

【讨论】:

以上是关于64 位 Excel VBA 调用 JavaScript 函数的主要内容,如果未能解决你的问题,请参考以下文章

Excel 的 Application.Hwnd 属性是不是可用于 64 位 VBA?

Excel VBA 一段宏在64位系统中运行会报错,32位系统运行完美,求解决方案?

切换到 64 位 Excel 后如何修复 VBA“类型不匹配”错误

excel VBA(32位)在win7 64位上运行错误

Excel VBA 到 PPT 在 Office 365 64 位中不起作用

打开空白excel提示由于与64位版本不兼容