哪个数据类型是String

时间:2014-12-10 21:57:37

标签: vba

据我所知,有两种不同的方法可以在VBA中对数据类型进行分类。

  • 对象类型与非对象
  • 值类型与参考类型

我认为对象类型与引用类型相同。但我读到对象和非对象类型之间的分配存在差异:

Dim i As Integer
i = 1

Dim chrt As Chart
Set chrt = something

注意“设置”。现在,在以下链接中,String被归类为引用类型。

http://msdn.microsoft.com/en-us/library/t63sy5hs.aspx

但是

Dim str As String
Set str = "abc"

错了,

Dim str As String
str = "abc"

是对的。因此,引用类型和对象类型不相等。有什么区别?

2 个答案:

答案 0 :(得分:4)

您的MSDN链接指的是 Visual Studio 2013(.NET),其中String确实是一个对象(就像.net框架中的所有内容一样)。

VBA字符串是值,而不是对象。

  

据我了解,有两种不同的方法可以对数据进行分类   VBA中的类型。

     
      
  • 对象类型与非对象
  •   
  • 值类型与参考类型
  •   

比这更简单。 对象类型 引用类型非对象类型 值类型

在VBA中,使用Set关键字指定对象引用;在过去,过去使用Let关键字分配的值(我认为出于兼容性原因,这仍然有效);这就是为什么属性设置器使用Let作为值类型,如Public Property Let Foo(value As Integer)Set作为参考类型,如Public Property Set Foo(value As Object)

语言不断演变,Let关键字最终因价值分配而被删除;对象引用分配仍然需要Set

但在VBA中,String,如IntegerBoolean

答案 1 :(得分:3)

VBA确实有值类型参考类型,但StringsArrays都没有整齐地类别。

查看值类型和引用类型的定义是有用的:

  

值类型

     
      
  • 如果数据类型将数据保存在自己的内存分配中,则数据类型为值类型。
  •   
     

参考类型

     
      
  • 引用类型包含指向保存数据的另一个内存位置的指针。
  •   

所有Objects都使用指针,因此它们都是Reference Types,而以下内容将其值存储在内存位置,因此它们都是Value Types

  • 布尔
  • 字节
  • 整数
  • 日期
  • 货币

StringsArrays不同。他们使用指针,因此从技术上讲,它们是Reference Types VBA语言在语义上将StringsArrays视为{{1 }}

因此,在使用Value TypesStrings时,VBA会有以下行为:

  • 在分配给ArraysSet时,没有必要使用String关键字(除非您分配给{{1}的成员对象)。

  • 将一个ArrayArray的值分配给另一个会创建该值的副本

  • 用于比较String的等号运算符是Array运算符。