使用单个变量一切正常,动态数组会出现问题。
有一个包含全局变量的模块:
Option Compare Database
Option Explicit
Global gbl_numberOfPositions As Integer
Global gbl_numberOfDisciplines As Integer
Global gbl_mv_clsJobPostions() As clsJobPostion
Public Sub Init_Globals()
gbl_numberOfPositions = 0
gbl_numberOfDisciplines = 0
ReDim gbl_mv_clsJobPostions(0)
End Sub
在第一种形式中定义了动态数组
Private Sub Form_Load()
Call Init_Globals
End Sub
Private Sub InitCBox()
Dim rs As DAO.Recordset
Set rs = db.OpenRecordset(strSQL)
rs.MoveLast
ReDim gbl_mv_clsJobPositions(rs.RecordCount)
rs.MoveFirst
i = 1
Do While (Not rs.EOF)
Set gbl_mv_clsJobPositions(i) = New clsJobPostion
gbl_mv_clsJobPositions(i).InitializeMe _
rs![ID Job Position], rs![ID Position], rs![ID Discipline]
i = i + 1
rs.MoveNext
Loop
Debug.Print UBound(gbl_mv_clsJobPositions)
End Sub
然后加载第二个:
Private Sub Form_Load()
Debug.Print UBound(gbl_mv_clsJobPostions)
End Sub
但是返回了两个不同的。在第二种情况下,它是零。
所以我的问题是如何在表单之间传递动态数组?
答案 0 :(得分:1)
而不是:
ReDim gbl_mv_clsJobPositions(rs.RecordCount)
使用:
ReDim Preserve gbl_mv_clsJobPositions(rs.RecordCount)
答案 1 :(得分:0)
来自另一个SO post:
Public和Global的功能几乎完全相同,但Global只能在标准模块中使用,而Public可以在所有上下文中使用(模块,类,控件,表单等)。全局来自旧版本的VB和很可能是为了向后兼容,但已被公众完全取代。
答案 2 :(得分:0)
您似乎有两种不同的拼写,这可能会导致问题:
gbl_mv_clsJobPostions
gbl_mv_clsJobPositions
另外,我想知道你为什么使用它:
Global gbl_mv_clsJobPostions() As clsJobPostion
-------------
为什么不使用As String
,变体或其他标准变量类型?