Hi Lihonggen and guys :
I need your strong support! Thanks in ahead !
When I compile and make .exe file , it always shows a window error "Type mismatch : array or user defined type expected"
#####################################################
第一步:
以下为我在模块module中声明的16个动态数组,分别代表了我们测试机的16个测试site。数组元素类型为Long型
Public CurrentSite1() As Long, CurrentSite2() As Long, CurrentSite3() As Long, CurrentSite4() As Long
Public CurrentSite5() As Long, CurrentSite6() As Long, CurrentSite7() As Long, CurrentSite8() As Long
Public CurrentSite9() As Long, CurrentSite10() As Long, CurrentSite11() As Long, CurrentSite12() As Long
Public CurrentSite13() As Long, CurrentSite14() As Long, CurrentSite15() As Long, CurrentSite16() As Long第二步:
对16个数组初始化:
   ReDim CurrentSite1(1 To 2, 1 To BinCounter(1)): ReDim CurrentSite2(1 To 2, 1 To BinCounter(2))
   ReDim CurrentSite3(1 To 2, 1 To BinCounter(3)): ReDim CurrentSite4(1 To 2, 1 To BinCounter(4))
   ReDim CurrentSite5(1 To 2, 1 To BinCounter(5)): ReDim CurrentSite6(1 To 2, 1 To BinCounter(6))
   ReDim CurrentSite7(1 To 2, 1 To BinCounter(7)): ReDim CurrentSite8(1 To 2, 1 To BinCounter(8))
   ReDim CurrentSite9(1 To 2, 1 To BinCounter(9)): ReDim CurrentSite10(1 To 2, 1 To BinCounter(10))
   ReDim CurrentSite11(1 To 2, 1 To BinCounter(11)): ReDim CurrentSite12(1 To 2, 1 To BinCounter(12))
   ReDim CurrentSite13(1 To 2, 1 To BinCounter(13)): ReDim CurrentSite14(1 To 2, 1 To BinCounter(14))
   ReDim CurrentSite15(1 To 2, 1 To BinCounter(15)): ReDim CurrentSite16(1 To 2, 1 To BinCounter(16))
   CurrentSite1(1, 1) = 1: CurrentSite1(2, 1) = 0: CurrentSite2(1, 1) = 1: CurrentSite2(2, 1) = 0
   CurrentSite3(1, 1) = 1: CurrentSite3(2, 1) = 0: CurrentSite4(1, 1) = 1: CurrentSite4(2, 1) = 0
   CurrentSite5(1, 1) = 1: CurrentSite5(2, 1) = 0: CurrentSite6(1, 1) = 1: CurrentSite6(2, 1) = 0
   CurrentSite7(1, 1) = 1: CurrentSite7(2, 1) = 0: CurrentSite8(1, 1) = 1: CurrentSite8(2, 1) = 0
   CurrentSite9(1, 1) = 1: CurrentSite9(2, 1) = 0: CurrentSite10(1, 1) = 1: CurrentSite10(2, 1) = 0
   CurrentSite11(1, 1) = 1: CurrentSite11(2, 1) = 0: CurrentSite12(1, 1) = 1: CurrentSite12(2, 1) = 0
   CurrentSite13(1, 1) = 1: CurrentSite13(2, 1) = 0: CurrentSite14(1, 1) = 1: CurrentSite14(2, 1) = 0
   CurrentSite15(1, 1) = 1: CurrentSite15(2, 1) = 0: CurrentSite16(1, 1) = 1: CurrentSite16(2, 1) = 0第三步:我声明了CS()数组来存储这些数组,使得数组的元素是数组同时,我生明了如下的一个动态数组 CS(),用来存储上面16个数组【数组CS()的元素还是数组,不知道CS()的元素类型是什么?】
Public CS() As Variant
注释:因为没法判断数组CS()的元素的数据类型是什么,我的本意就想用变体variant来声明。
接着,我在我的初始化函数中做了如下初始化:
ReDim CS(1 To 16)
CS(1) = CurrentSite1: CS(2) = CurrentSite2: CS(3) = CurrentSite3: CS(4) = CurrentSite4: CS(5) = CurrentSite5: CS(6) = CurrentSite6: CS(7) = CurrentSite7: CS(8) = CurrentSite8
CS(9) = CurrentSite9: CS(10) = CurrentSite10: CS(11) = CurrentSite11: CS(12) = CurrentSite12: CS(13) = CurrentSite13: CS(14) = CurrentSite14: CS(15) = CurrentSite15: CS(16) = CurrentSite16然后,我在dll文件里写了一个函数 
Public Function UpdateArrayWhenTestComplete(ByRef CurrentSite() As Long, ByVal SoftBin As Long, ByRef IsSortIn As Boolean)然后我在调用时: Call UpdateArrayWhenTestComplete(CS(1), 8, True)编译告诉我CS(1)类型不匹配?为什么?高手帮我解决一下问题吧?万分感谢了!但如果我写成     Call UpdateArrayWhenTestComplete(CurrentSite1, 8, True)  编译就通过,为什么呢? CS(1)不就是 CurrentSite1吗?????
谢谢

解决方案 »

  1.   

    李洪根好长时间没见了,不知道这家伙现在还上不上CSDN!你的这个问题一般都不用数组来做了,而是用Collection对象来实现。ReDim CS(1 To 16) 
    CS(1) = CurrentSite1: CS(2) = CurrentSite2: CS(3) = CurrentSite3: CS(4) = CurrentSite4: CS(5) = CurrentSite5: CS(6) = CurrentSite6: CS(7) = CurrentSite7: CS(8) = CurrentSite8 
    CS(9) = CurrentSite9: CS(10) = CurrentSite10: CS(11) = CurrentSite11: CS(12) = CurrentSite12: CS(13) = CurrentSite13: CS(14) = CurrentSite14: CS(15) = CurrentSite15: CS(16) = CurrentSite16 这一段改成:dim cs as new collection
    cs.add CurrentSite1,"CurrentSite1"
    cs.add CurrentSite2,"CurrentSite2"
    '…………
    cs.add CurrentSite16,"CurrentSite16"调用的时候用:
    Call UpdateArrayWhenTestComplete(CS.item(1), 8, True)
    或者
    Call UpdateArrayWhenTestComplete(CS.item("CurrentSite1"), 8, True)
      

  2.   

    用 Variant 总归不方便,推荐这样用
    '定义
    Type CurrentSite
        Site() As Long
    End Type
    Public CS() As CurrentSite'初始化
    ReDim CS(1 To 16)
    ReDim CS(1).Site(1 To 2, 1 To BinCounter(1)): ReDim CS(2).Site(1 To 2, 1 To BinCounter(2))
    ReDim CS(3).Site(1 To 2, 1 To BinCounter(3)): ReDim CS(4).Site(1 To 2, 1 To BinCounter(4))
    ReDim CS(5).Site(1 To 2, 1 To BinCounter(5)): ReDim CS(6).Site(1 To 2, 1 To BinCounter(6))
    ReDim CS(7).Site(1 To 2, 1 To BinCounter(7)): ReDim CS(8).Site(1 To 2, 1 To BinCounter(8))
    ReDim CS(9).Site(1 To 2, 1 To BinCounter(9)): ReDim CS(10).Site(1 To 2, 1 To BinCounter(10))
    ReDim CS(11).Site(1 To 2, 1 To BinCounter(11)): ReDim CS(12).Site(1 To 2, 1 To BinCounter(12))
    ReDim CS(13).Site(1 To 2, 1 To BinCounter(13)): ReDim CS(14).Site(1 To 2, 1 To BinCounter(14))
    ReDim CS(15).Site(1 To 2, 1 To BinCounter(15)): ReDim CS(16).Site(1 To 2, 1 To BinCounter(16))
    CS(1).Site(1, 1) = 1: CS(1).Site(2, 1) = 0: CS(2).Site(1, 1) = 1: CS(2).Site(2, 1) = 0
    CS(3).Site(1, 1) = 1: CS(3).Site(2, 1) = 0: CS(4).Site(1, 1) = 1: CS(4).Site(2, 1) = 0
    CS(5).Site(1, 1) = 1: CS(5).Site(2, 1) = 0: CS(6).Site(1, 1) = 1: CS(6).Site(2, 1) = 0
    CS(7).Site(1, 1) = 1: CS(7).Site(2, 1) = 0: CS(8).Site(1, 1) = 1: CS(8).Site(2, 1) = 0
    CS(9).Site(1, 1) = 1: CS(9).Site(2, 1) = 0: CS(10).Site(1, 1) = 1: CS(10).Site(2, 1) = 0
    CS(11).Site(1, 1) = 1: CS(11).Site(2, 1) = 0: CS(12).Site(1, 1) = 1: CS(12).Site(2, 1) = 0
    CS(13).Site(1, 1) = 1: CS(13).Site(2, 1) = 0: CS(14).Site(1, 1) = 1: CS(14).Site(2, 1) = 0
    CS(15).Site(1, 1) = 1: CS(15).Site(2, 1) = 0: CS(16).Site(1, 1) = 1: CS(16).Site(2, 1) = 0'调用
    Call UpdateArrayWhenTestComplete(CS(1).Site, 8, True) 
      

  3.   

    用一个变量过渡一下:
    dim lng() as long
    lng=CS(1)
    Call UpdateArrayWhenTestComplete(lng, 8, True)