1

使用单个变量一切正常,动态数组出现问题。

有一个带有全局变量的模块:

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

但是返回两个不同的。在第二种情况下,它为零。

所以我的问题是如何在表单之间传递动态数组?

4

3 回答 3

1

代替:

ReDim gbl_mv_clsJobPositions(rs.RecordCount)

利用:

ReDim Preserve gbl_mv_clsJobPositions(rs.RecordCount)
于 2013-07-09T16:02:36.867 回答
0

您似乎有两种不同的拼写,这可能会导致问题:

  • gbl_mv_clsJobPostions
  • gbl_mv_clsJobPositions

另外,我想知道你为什么使用这个:

Global gbl_mv_clsJobPostions() As clsJobPostion
                                  -------------

为什么不使用As String,或变体,或其他一些标准变量类型?

于 2013-07-09T16:18:59.730 回答
0

从另一个SO 帖子

Public 和 Global 在功能上几乎相同,但是 Global 只能在标准模块中使用,而 Public 可以在所有上下文中使用(模块、类、控件、表单等) Global 来自旧版本的 VB,并且可能保留为了向后兼容,但已被 Public 完全取代。

于 2013-07-09T15:55:56.120 回答