在VBA中,所有variables都是以variablestypes开始的
引用我的同事:
VBA中的所有variables都是变体,但具有不同的变体types:
Dim x '--->variant with vartype = vbEmpty x= "hello" '--->vartype changed from vbEmpty to vbString and value assigned x= 1 '--->vartype changed to vbInteger
Dim x as String '--->variant with vartype = vbEmpty is created and then vartype changed to vbString x= "hello" '--->vartype = vbString x=1 '--->because x was declared explicitly with String it will try to implicitly convert 1 to string, so, x will remain vbString
我争论的主要观点是Dim x as String
如何适应他的陈述,即all variables in VBA are variants
。 变种的效率更低,所以为什么一切都要从那里开始并进行转换。
VBA中的所有variables都是变体吗?
任何人都可以find任何文件或提供代码来明确地certificate答案的方式或其他?
编辑
他提出以下几点作为尝试和certificate上述的一个开始 – 但是我认为它certificate了它们都是string:
Sub aaa() Dim str_str As String Dim str_var str_str = "aaa" str_var = "aaa" str_xxx = "aaa" MsgBox VarType(str_str) & ": " & TypeName(str_str) MsgBox VarType(str_var) & ": " & TypeName(str_var) MsgBox VarType(str_xxx) & ": " & TypeName(str_xxx) End Sub
你可以使用Debug和本地窗口来演示你的同事说的是不正确的:
Dim as string创build一个stringtypes,但是Dim作为Variant并且分配一个string给你一个带有子typesstring的变体
不,不是所有variables都是变体。 变体和string有不同的存储大小; 这个内存根据Dim
语句中的数据types被分配。 一个不只是神奇地变成另一个。
在VBA帮助文件中查找“数据types摘要”。 或者,看这里: http : //msdn.microsoft.com/en-us/library/aa263420%28v=vs.60%29.aspx
'—>变种vartype = vbEmpty创build,然后vartype更改为vbString
你的同事在哪里得到这个想法? 这绝对没有证据。 该文档特别说:“当初始化variables时,可变长度string被初始化为零长度string(”“)”, 而不是 vbEmpty
。
他的困惑的根源可能是这样的
Dim x
是,默认情况下是一样的
Dim x as Variant
但他可能猜到(错误地),当你写Dim x As String
, Dim x
首先被解释,从而创build一个Variant,然后As String
进入,把它变成一个String。 这显然是不正确的。 As String
是Dim
语句的一部分,整个语句被立即解释。
严格解决你的问题,我不认为有可能find任何具体说明“ Dim x As String
不首先创buildVariant然后将其更改为string”的文档。 但是,真的,你的同事的负担是为他的非同寻常的主张提供证据。 他可以整天看,他不会find任何。
为了完整起见(作为上述的补充):
你的朋友所说的可能是这个(例如底部):
http://office.microsoft.com/en-001/access-help/vartype-function-HA001228932.aspx
这是一个VBA函数,只是一个有用的工具,如果你想使用dynamictypes转换 。
如果你只使用dynamictypes,并在“always”链接中应用这个例子(在VBA中不好的做法),那么所有的variables都会以variables(高度不推荐的)开始。
也许他混淆了VBA静态types和Javascript之类的编程语言,它不使用静态types; JS进行隐式types转换:var i = 0〜>隐式键入JS运行时的一个数字。
注意:虽然在VBA中build议使用静态types,但事实上VBA程序员使用dynamictypes(如果在运行前未知variables的types)。