在VBA中,所有变量都以变体类型开头

why*_*heq 3 excel vba excel-vba office-2010

引用我的同事的话:

VBA中的所有变量都是变体但具有不同的vartype:

Dim x      '--->variant with vartype = vbEmpty  
x= "hello" '--->vartype changed from vbEmpty to vbString and value assigned  
x= 1       '--->vartype  changed to vbInteger
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)

我的主要观点是如何Dim x as String适应他的陈述all variables in VBA are variants.变体的工作效率更低,为什么一切都从那里开始并被转换.

VBA中的所有变量都是变体吗?
任何人都可以找到任何文档或提供明确证明答案的代码吗?


编辑

他提出以下内容作为开始尝试并证明上述内容 - 但我认为所有证明都是它们都是字符串:

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
Run Code Online (Sandbox Code Playgroud)

Cha*_*ams 11

您可以使用Debug和Locals窗口演示您的同事所说的不正确: 在此输入图像描述
Dim as string创建一个字符串类型但Dim as Variant并且指定一个字符串为你提供一个带有子类型字符串的变体

  • + 1很好地展示了:) (2认同)

Jea*_*ett 7

不,并非所有变量都是Variant.变体和字符串具有不同的存储大小; 根据Dim语句中的数据类型分配此内存.一个人不仅仅是神奇地转向另一个人.

在VBA帮助文件中查找"数据类型摘要".或者,请看这里:http: //msdn.microsoft.com/en-us/library/aa263420%28v=vs.60%29.aspx

'--->创建了vartype = vbEmpty的变体,然后将vartype更改为vbString

你的同事从哪里得到这个想法?!绝对没有证据证明这一点.该文档特别指出,"当变量初始化[...]时,可变长度字符串被初始化为零长度字符串("")",而不是 vbEmpty.

他混乱的根源可能就是这样

Dim x
Run Code Online (Sandbox Code Playgroud)

默认情况下,与...相同

Dim x as Variant
Run Code Online (Sandbox Code Playgroud)

但他可能猜错(错误地),当你写作时Dim x As String,Dim x首先解释得到因此创建一个变体,然后As String进入,把它变成一个字符串.这很简单.它As StringDim语句的一部分,整个语句立即被解释.

严格解决您的问题,我认为没有可能找到任何具体说明" Dim x As String 首先创建Variant然后将其更改为字符串"的文档.但实际上,你的同事有责任为他的非凡主张提供证据.他可以整天看,他不会找到任何.