【发布时间】:2015-06-16 16:55:52
【问题描述】:
在 MS Access 2003 VBA 中对全局对象的数组调用 LBound() 和 UBound() 函数时,我收到“下标超出范围”错误。我不明白为什么会发生这种情况,因为我确定数组已经初始化,因为我可以通过引用数组的已知索引来访问数组中的值。
这是我的类,它有一个字符串数组作为属性。我正在使用 Class_Initialize 方法初始化数组。
Private pIgnoreDifferencesInDatabaseComparisonForFields() As String
Public Property Get ignoreDifferencesInDatabaseComparisonForFields() As String()
ignoreDifferncesInDatabaseComparisonForFields = pIgnoreDifferencesInDatabaseComparisonForFields
End Property
Public Property Get ignoreDifferencesInDatabaseComparisonForField(index As Long) As String
ignoreDifferencesInDatabaseComparisonForField = pIgnoreDifferencesInDatabaseComparisonForFields(index)
End Property
Public Property Let ignoreDifferencesInDatabaseComparisonForField(index As Long, fld As String)
If index > UBound(pIgnoreDifferencesInDatabaseComparisonForFields) Then ReDim Preserve pIgnoreDifferencesInDatabaseComparisonForFields(index)
pIgnoreDifferencesInDatabaseComparisonForFields(index) = fld
End Property
Private Sub Class_Initialize()
Dim ignoreDiffInDBComparisonForFields() As String
Dim i As Long
' Add any new columns to skip inside this string
ignoreDiffInDBComparisonForFields = Split("EligOvr,UpdateTS,groupStartDate,groupEndDate", ",")
ReDim pIgnoreDifferencesInDatabaseComparisonForFields(0)
For i = LBound(ignoreDiffInDBComparisonForFields) To UBound(ignoreDiffInDBComparisonForFields)
Me.ignoreDifferencesInDatabaseComparisonForField(i) = ignoreDiffInDBComparisonForFields(i)
Next i
End Sub
我在主模块顶部的任何函数或子模块之外将对象声明为全局变量。
Public settings As Options
然后,在我调用的主函数中,我有以下代码行。
Set settings = New Options
稍后在我的代码中,这个函数被调用。
Function isAnIgnoreDifferencesInDatabaseComparisonField(field As String) As Boolean
Dim found As Boolean
Dim i As Long
found = False
x = settings.ignoreDifferencesInDatabaseComparisonForField(1)
For i = LBound(settings.ignoreDifferencesInDatabaseComparisonForFields) To UBound(settings.ignoreDifferencesInDatabaseComparisonForFields)
If (LCase(field) = LCase(settings.ignoreDifferencesInDatabaseComparisonForField(i))) Then
found = True
End If
Next i
isAnIgnoreDifferencesInDatabaseComparisonField = found
End Function
我在第一次遇到“For i ...”行时调用 UBound 和 LBound 函数的 for 循环中收到错误消息。它不会通过循环的任何迭代。我将 x 设置为数组中位置 1 处的值作为测试,并且该值确实填充而没有错误,因此数组已被初始化。有谁知道为什么我收到“下标超出范围”错误?谢谢!
【问题讨论】: