Значение объекта коллекции MS Access перезаписывается

#ms-access #vba

#ms-access #vba

Вопрос:

У меня есть глобальный объект коллекции в форме, который я использую для хранения идентификаторов.

 Dim newCollection As New Collection
 

Когда пользователь нажимает btn

 Private Sub btn_Click()
Dim key As Variant
    newCollection.ADD Me.ID, CStr(ID)

    For Each key In newCollection
        Debug.Print key 
    Next key
End Sub
 

Когда пользователь имеет идентификатор 1 в формах и нажимает кнопку выше, я получаю ожидаемый 1 результат в моем непосредственном окне

Но когда пользователь переходит к другой записи в форме, скажем, с идентификатора 1 на 2, используя кнопку навигации по формам

По какой-то причине Debug.Print key возвращает

 2
2
 

вместо ожидаемого

 1
2
 

По какой-то причине ключ не перезаписывается, но значение перезаписывается. Я имею в виду, что

На моей непосредственной консоли:

 ?newCollection(1)
 

возвращает 2

И

 ?newCollection(2)
 

также возвращает 2

Я не знаю, почему это происходит

Ответ №1:

Измените это …

 newCollection.ADD Me.ID, CStr(ID)
 

к этому …

 newCollection.ADD Me.ID.Value, CStr(ID)
 

В первом случае вы добавляете объект field. Поэтому, когда вы позже Debug.Print key , вы печатаете текущее значение этого поля. (Это может иметь больше смысла, если вы сделаете Debug.Print TypeName(key) это временно.)

Вам нужно добавить значение поля вместо самого поля.