VBA Excel 2010编辑器大写属性名称,它不能被访问

作为对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 

我面临的问题是VBA Excel 2010编辑器将o.Exception大写为o.Exception ! 在Watch窗口中,我看到属性exception但无法访问它。 我如何强制编辑器停止大写属性名称? 是否有其他语法访问VBA中的属性?

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

在这里输入图像描述

正如你所看到的, o有一个名为exception的属性。 当试图访问它与o.Exception它触发438错误。

在这里输入图像描述

由于我已经控制了后端,我改变了响应返回{Exception:whatever} (不能永久)。 现在VBA挑选财产没有问题。

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

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

基本上你需要确保你没有在项目的其他任何地方使用“Exception”。

 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 

编辑:

如果你仍然坚持,那么你可以尝试这种方式,留下你的parsing的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 

更改标签Exception: except:

 except: If o.exception = config_not_valid Then 

另外,更改它将使用goto Exceptiongoto except的代码行。

VBA编译器是不区分大小写的,所以就VBA而言,在o.exceptiono.Exception之间绝对没有区别 。 大写不是您无法访问exception属性的原因。 ( 编辑:这最后一句话是不正确的!看@蒂姆·威廉姆斯的答案,我纠正了。

但是,您将不得不澄清“无法访问”的含义。 什么是config_not_valid ? (我的预感是,这是一个外部库的枚举,没有通过早期绑定正确引用。)

用适当的,特定的types声明所有的variables可能会有帮助(你应该总是这样做)。 设置引用(工具>引用)以允许提前绑定也可能有所帮助。 除非你给我们更多关于你的问题的细节,否则很难给出更好的build议。

这就是说,如果仅仅为了美观的目的 ,你想停止在VBA编辑器中发生的大写,那么看看@Tim Williams和@ shahkalpesh的答案。 VBA编辑器的大写scheme有时看起来古怪。 使用Dim声明所有的variables会使这些怪癖中的一些消失 – 但这就是为什么你应该总是 Dim 一切