【问题标题】:Accessing a Variant/Object/JScriptTypeInfo property in VBA在 VBA 中访问 Variant/Object/JScriptTypeInfo 属性
【发布时间】:2017-09-28 12:52:18
【问题描述】:

我有以下代码 VBA 代码(用于 Excel 模块)

Function getDesc(ByVal pCode As String) As String
    Dim oRequest As Object
    Set oRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
    oRequest.Open "GET", "https://my.url.com/?filter=CODE=" & pCode, False
    oRequest.SetRequestHeader "Accept", "application/json"
    oRequest.Send ""

    Set props = jsonDecode(oRequest.ResponseText)

    getDesc = props.row_data
End Function

Function jsonDecode(jsonString As Variant)
    Set sc = CreateObject("ScriptControl"): sc.Language = "JScript"
    Set jsonDecode = sc.Eval("(" + jsonString + ")")
End Function

props.row_data的结果如图

我不知道如何将属性LONG_DESCRIPTION 分配给getDesc =

我需要什么正确的语法?或者,我将接受任何允许我返回 LONG_DESCRIPTION 字符串的解决方案。

【问题讨论】:

标签: json vba excel jscript


【解决方案1】:

试试下面的代码。 JSON.bas模块导入VBA项目进行JSON处理。

Option Explicit

Function getDesc(ByVal pCode As String) As String

    Dim oRequest As Object
    Dim sJSONString As String
    Dim vJSON As Variant
    Dim sState As String

    Set oRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
    oRequest.Open "GET", "https://my.url.com/?filter=CODE=" & pCode, False
    oRequest.SetRequestHeader "Accept", "application/json"
    oRequest.Send
    sJSONString = oRequest.ResponseText
    JSON.Parse sJSONString, vJSON, sState
    getDesc = vJSON("row_data")(0)("LONG_DESCRIPTION")

End Function

使用 JSON 字符串 {'row_data':[{'LONG_DESCRIPTION':'desc_string'}]} 测试。

【讨论】:

    【解决方案2】:

    您不需要外部库来实现这一点:

    Option Explicit
    
    Function getDesc(ByVal pCode As String) As String
        Dim oRequest As Object
        Set oRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
        oRequest.Open "GET", "https://my.url.com/?filter=CODE=" & pCode, False
        oRequest.SetRequestHeader "Accept", "application/json"
        oRequest.Send ""
    
        Set props = jsonDecode(oRequest.ResponseText)
    
        Set sc = CreateObject("ScriptControl"): sc.Language = "JScript"
        sc.AddCode "function jsGetDesc(obj) { return obj[0]['LONG_DESCRIPTION']; }"
        getDesc = sc.Run("jsGetDesc", props.row_data)
    End Function
    

    【讨论】:

      猜你喜欢
      • 2021-11-24
      • 1970-01-01
      • 2016-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多