VBA-用类实现数组扩容

本文介绍了一种使用VBA自定义数组类实现数组动态扩容的方法。通过创建一个名为myarr的类模块,并实现了基本的数组操作如添加元素、获取元素及数组扩容等功能。该方法在实际个数达到预设容量时自动进行扩容,有效解决了固定长度数组的局限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们知道数组的长度是固定的,定义了以后不能随意的增加其长度,但是我们可以用类来实现表面上的扩容(即增加数组的存储空间)

1.首先我们添加一个类模块,取名为”myarr”

并且在里面添加一些方法(比如扩容,查看数组值等)

具体代码如下:

Option Explicit
Private arr() As String '数组 ,用来存储数据
Private ilen As Integer '数组长度
Private icount As Integer '实际数组长度
Private Const per As Integer = 4 '每次扩容的个数(可变)
'容量,只读属性
Property Get length() As Integer
    length = ilen

End Property
'实际数据的个数,只读属性
Property Get count() As Integer
    Dim i As Integer
    For i = 1 To UBound(arr)
        If Len(arr(i)) = 0 Then
        icount = i - 1
        count = icount
        Exit Property
    End If
    Next i
    icount = length
    count = icount
End Property
'添加数据
Sub add(item As String)
   If count = length Then '实际个数达到了容量,应该扩容
        Call expandarr
   End If
   arr(count + 1) = item
  
End Sub

'获取全部数据
Function getallvalue() As String()
    Dim ar() As String, i As Integer
    ReDim ar(1 To count) As String
     For i = 1 To count
         ar(i) = arr(1)
     Next i
    getallvalue = ar
   
End Function
'获取数据
Function getvalue(index As Integer) As String
    If index > length Or index < 1 Then
        getvalue = "小标越界"
    Else
        getvalue = arr(index)
    End If
   
End Function
'扩容(步进式扩容
Sub expandarr()
    ilen = ilen + per
    ReDim Preserve arr(1 To ilen) As String
End Sub

Private Sub Class_Initialize()
 Call expandarr
End Sub

2.我们来测试一下

Option Explicit
Sub 测试()
   Dim myar As myarr
   Set myar = New myarr
   Debug.Print myar.length & "....." & myar.count
   myar.add "坦克"
   myar.add "克"
   myar.add "坦克lo"
   myar.add "坦"
   myar.add "坦克合伙人和健康"
   myar.add "坦克是哦"
     Debug.Print myar.length & "....." & myar.count
End Sub

效果如下图所示

我们可以看出,当数组的容量不够时,数组会自动扩容(表面上增加四个存储空间)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值