自定义一个结构类型:
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()函数放到一个类模块中,随后在该函数作为
定义类的一个函数来调用就不可以克服以上错误.
哪位高手指教一下,不胜感激!
最好用public
我刚才写的有点不太清楚,是这样子的:
数据的我已经存在a1() ,a2() 中了(通过设置断点跟踪后发现数据已经存在数组里面了),但在cc()中调用数组中的值时,就提示提示编译错误:"只有定义在公共对象模块类中
用户自定义类型能和变体类型进行相互转换或传递给后期绑定功能"如类似 If Mid(a1(i).ID1, 1, 4) = "Para" And Mid(a1(i).ID2, 1, 4) = "Para" Then
.....
调用
如果是这样,解决的方案大体有三种:
一、定义为类模块:较方便、安全,但对象多时资源占用较大
二、把过程cc的参数类型定义为Variant类型。方便、安全,但对象多时资源和效率都可能成为问题。
三、把过程cc的参数类型定义为long,调用参数时将自定义类型的变量的地址传过去,然后在cc过程内再用API函数CopyMemory得到相应的值。代码较费力、调用过程中必须保证足够安全。但资源和效率最佳。
以上仅代表个人观点。
上面所说的错误
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