VBA Excel 2010编辑器将属性名称大写,无法访问

Mar*_*rov 1 excel vba excel-vba

作为对POST的响应,服务器返回非常简单的JSON对象,该对象可以指示上载的成功或失败.

JSON对象可以是{config_version:N}以指示成功,也可以是{exception:Reason}来指示失败.

我按以下方式处理响应:

json = objHTTP.responseText
Set sc = CreateObject("ScriptControl")
sc.Language = "JScript"
Set o = sc.Eval("(" + json + ")")

On Error GoTo Exception:
' try to use config_version property
Util.SetConfigData "version", o.config_version
Exit Function

Exception:
If o.Exception = "config_not_valid" Then
   ' one kind of exception - do accordingly
Else
   ' another kind of exception
End If
Run Code Online (Sandbox Code Playgroud)

我现在面临的问题是,VBA Excel 2010中编辑正在利用o.exceptiono.Exception!在Watch窗口中我看到了属性exception但无法访问它.如何强制编辑器停止对属性名称进行大写?是否有其他语法来访问VBA中的属性?

编辑:为了更好地说明这里发生的是两个屏幕截图.

在此输入图像描述

如你所见,它o有一个叫做的属性exception.当试图用o.Exception它访问它时会触发438错误.

在此输入图像描述

由于我控制了后端,因此我将响应更改为return {Exception:whatever}(不能永久执行).现在VBA选择房产没有问题.

如果按照Jean-FrançoisCorbett的建议VBA编译器不区分大小写,这怎么可能?

Tim*_*ams 6

这很奇怪.我可以将小写的"e"粘在Tester()中,但是如果我将Test2()中的"exception"声明更改为"Exception",那么VBE会自动将Tester()中任何实例的更改更改为"例外".改回"异常"具有相反的效果.

基本上,您需要确保在项目的其他任何位置都没有使用"异常" .

Sub Tester()

    Dim sc, o

    Set sc = CreateObject("ScriptControl")
    sc.Language = "JScript"
    Set o = sc.Eval("({exception:'blahblah'})")

    Debug.Print o.exception 'prints blahblah

End Sub


Sub Test2()
    Dim exception As String
    exception = "blah"
End Sub
Run Code Online (Sandbox Code Playgroud)

编辑:

如果您仍然卡住,那么您可以这样尝试,将解析后的JSON对象留在脚本控件实例中:

Set sc = CreateObject("ScriptControl")
sc.Language = "JScript"

sc.Eval "var o = eval({exception:'blahblah',message:'oops'})"

Debug.Print sc.Eval("o.exception")     'prints blahblah
Debug.Print sc.Eval("o['exception']")  'same thing...

Debug.Print sc.Eval("o.message")       'prints oops
Run Code Online (Sandbox Code Playgroud)