why*_*heq 3 excel vba excel-vba office-2010
引用我的同事的话:
VBA中的所有变量都是变体但具有不同的vartype:
Run Code Online (Sandbox Code Playgroud)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
我的主要观点是如何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并且指定一个字符串为你提供一个带有子类型字符串的变体
不,并非所有变量都是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 String是Dim语句的一部分,整个语句立即被解释.
严格解决您的问题,我认为没有可能找到任何具体说明" Dim x As String 不首先创建Variant然后将其更改为字符串"的文档.但实际上,你的同事有责任为他的非凡主张提供证据.他可以整天看,他不会找到任何.