自定义一个结构类型:
  Option Explicit
  Private Type ShuizhunNode   '定义点的结构
 ID As String    
  ceduanH() As ceduanH    
 IDH As Double 
 End TypePrivate Type ceduanH   '定义测段结构,存储大小和方向
 H As Double        
 
 ID1 As ShuizhunNode 
 ID2 As ShuizhunNode  
End Type
********************
Dim a1() As ceduanH, a2() As ShuizhunNode  '定义两个动态数组a1,a2
随后定义了一个函数cc(),在该函数中对
用数据来存储数据,在调用cc(),提示编译错误:"只有定义在公共对象模块类中
用户自定义类型能和变体类型进行相互转换或传递给后期绑定功能"
这是不是说我必须把自定义的结构和cc()函数放到一个类模块中,随后在该函数作为
定义类的一个函数来调用就不可以克服以上错误.
哪位高手指教一下,不胜感激!

解决方案 »

  1.   

    定义在模块中也行。
    最好用public
      

  2.   


         我刚才写的有点不太清楚,是这样子的:
        数据的我已经存在a1() ,a2() 中了(通过设置断点跟踪后发现数据已经存在数组里面了),但在cc()中调用数组中的值时,就提示提示编译错误:"只有定义在公共对象模块类中
    用户自定义类型能和变体类型进行相互转换或传递给后期绑定功能"如类似 If Mid(a1(i).ID1, 1, 4) = "Para" And Mid(a1(i).ID2, 1, 4) = "Para" Then
     .....
    调用
      

  3.   

    你是不是把它们做为过程cc()的参数进行传递了?
    如果是这样,解决的方案大体有三种:
    一、定义为类模块:较方便、安全,但对象多时资源占用较大
    二、把过程cc的参数类型定义为Variant类型。方便、安全,但对象多时资源和效率都可能成为问题。
    三、把过程cc的参数类型定义为long,调用参数时将自定义类型的变量的地址传过去,然后在cc过程内再用API函数CopyMemory得到相应的值。代码较费力、调用过程中必须保证足够安全。但资源和效率最佳。
    以上仅代表个人观点。
      

  4.   

    在给a1,a2两个动态数组赋值后就用这个xshuB()来对这两个数组中的数进行操作,就引发了
    上面所说的错误  
     
    Public Function xshuB()  As  Boolean   
      Dim i As Integer
      Dim k0 As Integer, k1 As Integer, k2 As Integer  'k0,k1,k2为for循环计数器
      ReDim xishuB(1 To i1, 1 To i2)  
      ReDim L(1 To i1)
      
      For i = 1 To i1
      If Mid(a1(i).ID1, 1, 4) = "Para" And Mid(a1(i).ID2, 1, 4) = "Para" Then
        xishuB(i, Val(Right(a1(i).ID1, 2))) = 1
        xishuB(i, Val(Right(a1(i).ID2, 2))) = -1
        For k0 = 1 To i2
          If Val(Right(a1(i).ID1, 2)) <> i0 Or Val(Right(a1(i).ID2, 2)) <> i0 Then
            xishuB(i, k0) = 0
          End If
            
        Next i2
        L(i) = (-1) * (a1(i).ID1.IDH - a1(i).ID2.IDH - a1(i).H) '构建常量矩阵L
        i = 1 + 1
     Else
      
      Select Case Mid(a1(i).ID1, 1, 4)
      Case Mid(a1.ID1, 1, 4) = "Para"
      'If Mid(a1.ID1, 1, 4) = "Para" Then
        xishuB(i, Val(Right(a1(i).ID1, 2))) = 1
        For k1 = 1 To i1
          If k1 <> Val(Right(a1(i).ID1, 2)) Then
          xishuB(i, k1) = 0
         End If
        Next k1
        L(i) = (-1) * (a1(i).ID1.IDH - a1(i).ID2.IDH - a1(i).H) '构建常量矩阵L
        i = i + 1
       Case Mid(a1(i).ID2, 1, 4) = "Para"
        xishuB(i, Val(Right(a1(i).ID2, 2))) = -1
        For k2 = 1 To i1
          If k2 <> Val(Right(a1(i).ID2, 2)) Then
          xishuB(i, k2) = 0
         End If
        Next k2
        L(i) = (-1) * (a1(i).ID1.IDH - a1(i).ID2.IDH - a1(i).H) '构建常量矩阵L
        i = i + 1
       End Select
     End If
       
        
       ' L(i) = (-1) * (a1(i).ID1.IDH - a1(i).ID2.IDH - a1(i).H) '构建常量矩阵L
        
        
      Next i
     xshuB=True
    End Function