如何在vba中返回变量所分配的内存大小?

vba中有各种变量类型,如Byte、Boolean、Integer、Long等。

不同的变量类型,分配的存储内存大小(字节数)是不一样的。

具体的各种vba的变量类型所分配的内存大小可以见官方帮助文档

比如Byte类型的变量分配的1个字节的存储空间,Long类型的变量分配4个字节的存储空间。

在vba中提供了一个函数可以直接获取不同类型的变量所分配的存储空间,它就是Len函数。

经常使用vba编写代码的肯定都知道Len函数,它一般用于返回字符串变量所包含的字符数。

其实Len函数还有一个作用,就是返回变量所分配的存储空间的大小,以字节为单位。

可以通过以下代码测试:

Sub QQ1722187970()
    Dim i As Byte
    Dim j As Boolean
    Dim k As Integer
    Dim l As Long
    Dim m As Date
    '分别返回i,j,k,l,m 变量所分配的内存存储空间大小
    Debug.Print Len(i), Len(j), Len(k), Len(l), Len(m)
End Sub

但是对于以下几类特殊的变量类型,Len返回的值不再是变量所占的存储空间大小:

  1. 对于变长字符串变量,Len返回的是变长字符串变量存储的字符数。
  2. 对于定长字符串变量,Len返回的是定长的字符数。
  3. 对于Variant类型的变量,Len函数把它当做是字符串变量一样对待,也是返回存储的字符数。

可以使用以下的代码测试:

Sub QQ1722187970()
    Dim str1 As String
    Dim str2 As String * 10
    Dim i As Variant
      '分别返回str1、str2,i变量所含的字符数
    Debug.Print Len(str1), Len(str2), Len(i)
End Sub

对于用户自定义类型变量,当它的元素是字符串变量或者Variant类型的变量时,Len函数返回的值是这个用户自定义类型变量被写到文件中的大小。

可以用以下代码测试:

Type obj1
    i As Long
End Type
Type obj2
    i As Long
    str1 As String
End Type
Type obj3
    i As Long
    str1 As String * 10
End Type
Type obj4
    i As Long
    str1 As Variant
End Type
Sub QQ1722187970()
    Dim o1 As obj1
    Dim o2 As obj2
    Dim o3 As obj3
    Dim o4 As obj4
    Debug.Print Len(o1), Len(o2), Len(o3), Len(o4)
End Sub

分别输出 4 8 14 20。

 

 

 

 

 

       

发表评论