加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

VBA实现数组Array与集合Collection互换

(2017-05-09 08:56:59)
分类: ◆VBA
VBA实现数组Array与集合Collection互换
━━━━━━━━━━━━━━━━━━━━━━━━━
数组和集合在VBA中是常用的数据类型,这里水文具工集在VBA中实现数组Array与集合Collection的相互转换,编写了两个通用的过程ArrayToCollection与CollectionToArray,方便程序中调用,具体源代码如下:
数组转换到集合ArrayToCollection
'================================
VBA数组转换到集合ArrayToCollection
http://www.cnhup.com
'================================

Public Function ArrayToCollection_
Arr As Variant, ByRef Coll As Collection_
As Boolean
    
Dim Ndx As Long
    
Dim KeyVal As String

    If IsArray
(ArrFalse Then
        
ArrayToCollection False
        Exit Function
    End If

    on Error 
GoTo ErrH:
    Select Case NumberOfArrayDimensions(Arr: = Arr)
        
Case 0
            ArrayToCollection False
            Exit Function

        Case 
1
            For Ndx LBound(ArrTo UBound(Arr)
                
Coll.Add Item: = Arr(Ndx)
            
Next Ndx

        Case 2
            For Ndx LBound(Arr, 1To UBound(Arr, 1)
                
KeyVal Arr(Ndx, 1)
                
If Trim(KeyValvbNullString Then
                    
Coll.Add Item: = Arr(Ndx, 1)
                
Else
                    
Coll.Add Item: = Arr(Ndx, 0), Key: = KeyVal
                End If
            Next 
Ndx

        Case Else
            
ArrayToCollection False
            Exit Function

    End Select

    
ArrayToCollection True
    Exit Function

    
ErrH:
    ArrayToCollection False

End Function


Public Function CollectionToArray_
Coll As Collection, Arr As Variant) _
As Boolean
    
Dim As Variant
    
Dim Ndx As Long

    
If Coll Is Nothing Then
        
CollectionToArray False
        Exit Function
    End If

    If IsArray
(ArrFalse Then
        
CollectionToArray False
        Exit Function
    End If
    If 
IsArrayDynamic(Arr: = ArrFalse Then
        
CollectionToArray False
        Exit Function
    End If

    If 
Coll.Count Then
        
CollectionToArray False
        Exit Function
    End If

    ReDim 
Arr(To Coll.Count)

    
For Ndx To Coll.Count
        If IsObject(Coll(Ndx)) True Then
            Set 
Arr(NdxColl(Ndx)
        
Else
            
Arr(NdxColl(Ndx)
        
End If
    Next 
Ndx

    CollectionToArray True

End Function

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有