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 Exception
去goto except
的代码行。
VBA编译器是不区分大小写的,所以就VBA而言,在o.exception
和o.Exception
之间绝对没有区别 。 大写不是您无法访问exception
属性的原因。 ( 编辑:这最后一句话是不正确的!看@蒂姆·威廉姆斯的答案,我纠正了。
但是,您将不得不澄清“无法访问”的含义。 什么是config_not_valid
? (我的预感是,这是一个外部库的枚举,没有通过早期绑定正确引用。)
用适当的,特定的types声明所有的variables可能会有帮助(你应该总是这样做)。 设置引用(工具>引用)以允许提前绑定也可能有所帮助。 除非你给我们更多关于你的问题的细节,否则很难给出更好的build议。
这就是说,如果仅仅为了美观的目的 ,你想停止在VBA编辑器中发生的大写,那么看看@Tim Williams和@ shahkalpesh的答案。 VBA编辑器的大写scheme有时看起来古怪。 使用Dim
声明所有的variables会使这些怪癖中的一些消失 – 但这就是为什么你应该总是 Dim
一切 。