用 figfig 的例子说更明白一点 Sub jjj() Dim myData As Variant Set myData = Range("A1:A20") Debug.Print VarType(myData) '8204
Debug.Print TypeName(myData) 'Range
Debug.Print IsObject(myData) 'True
Debug.Print IsArray(myData) 'True
Debug.Print myData.Address '地址字符串 End Sub 从过程 jjj 看到了什么?vba的脑子是不是进水了!同样一个变量怎么即是对象又是数组呢?其实不是!奥妙就是一个 变 字。 在 Set myData = Range("A1:A20") 赋值后,vba存贮的是vartype=8204 的东西(注:要察看 variant 正在使用哪种变量类型,应使用 vartype--官方解释),这就是偶在20楼说的 某某。 在使用时,vba会作一个最好的猜测,根据这个猜测而会自动转换相应类型(Debug.Print VarType(myData),Debug.Print IsObject(myData)等就是这个使用的过程),这就是同样的变量会有不同数据类型的原因! 这个猜测绝大部分都是正确的,但有时并不是和过程的意愿相同的,这就是偶在14楼,劝 UNARTHUR 要使用明确、鲜明书写代码的原因。 为什么myData=Range("A1:A20")不是二维数组。从另一角度简单的讲要是标准的二维数组 Transpose 后应可以用数组的读取方式 x(1,1)的读取,而现实是不可以。
myData=Range("A1:A20") 而 myData 能用myData(1,1)读取,在这里这个最好的猜测应该是单元格。这就是偶说 myData 的本质就是单元格!(本质是单元格,和就是单元格不是一个意思)20 楼的例子 Set myData = Range("A1:A20")和 myData=Range("A1:A20") 的 vartype 返回同一值也证明了这一点。 |