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.exception来o.Exception!在Watch窗口中我看到了属性exception但无法访问它.如何强制编辑器停止对属性名称进行大写?是否有其他语法来访问VBA中的属性?
编辑:为了更好地说明这里发生的是两个屏幕截图.

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

由于我控制了后端,因此我将响应更改为return {Exception:whatever}(不能永久执行).现在VBA选择房产没有问题.
如果按照Jean-FrançoisCorbett的建议VBA编译器不区分大小写,这怎么可能?
这很奇怪.我可以将小写的"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)
| 归档时间: |
|
| 查看次数: |
1690 次 |
| 最近记录: |