После добавления объекта и массива исходный объект перезаписывается - PullRequest
0 голосов
/ 02 апреля 2012

У меня есть метод, который добавляет пользовательские объекты в массив в цикле. Проблема в том, что последний объект, добавленный в массив, перезаписывает все остальные объекты в массиве. Я прошел по коду, чтобы увидеть, что правильные объекты добавляются изначально, но я не могу понять, почему последний объект перезаписывает все остальные. У меня такое ощущение, что это как-то связано с указателями памяти и моим объектом CallNum, но я не смог понять это.

Function getCallNumObjects(TotalCol As Integer) As Lib_CallNum
'
'   Find all the call numbers and their coresponding total
'
    Dim CallNumObjs() As Lib_CallNum
    Dim i As Integer

    i = 0
    Do Until ActiveCell.Value = "$<total:U>"
        If i <> 1 Or i <> 0 Then
            ReDim Preserve CallNumObjs(i) As Lib_CallNum
        End If
        Dim CallNum As New Lib_CallNum
        CallNum.Title = Replace(ActiveCell.Value & ActiveCell.Offset(1, 0).Value, " ", "")
        CallNum.Total = ActiveCell.Offset(0, TotalCol - 1).Value
        Set CallNumObjs(i) = CallNum
        ActiveCell.Offset(2, 0).Activate
        Debug.Print CallNumObjs(i).Title
        i = i + 1
    Loop

    Debug.Print CallNumObjs(0).Title
    Debug.Print CallNumObjs(1).Title
    Debug.Print CallNumObjs(2).Title



    Set getCallNumObjects = CallNumObjs
End Function

Выход этой функции:

DS0000701-DS000800

LH-PK

PL001001-PL003300

Печать после цикла:

PL001001-PL003300

PL001001-PL003300

PL001001-PL003300

1 Ответ

1 голос
/ 02 апреля 2012

CallNumObjs - это массив Lib_CallNum.Функция присваивает этот массив одному экземпляру Lib_CallNum, а не массиву.Возможно, если ваша функция была определена как:

Function getCallNumObjects(TotalCol As Integer) As Lib_CallNum()

РЕДАКТИРОВАТЬ: я включил изменения из комментариев и удалил промежуточную переменную CallNum.Это может по крайней мере убрать ненужные вещи для отладки.Кроме того, я думаю, что повторное создание этой переменной могло вызвать вашу проблему:

Function getCallNumObjects(TotalCol As Integer) As Lib_CallNum ()
    Dim CallNumObjs() As Lib_CallNum
    Dim i As Integer

    i = 0
    Do Until ActiveCell.Value = "$<total:U>"
        ReDim Preserve CallNumObjs(i) As Lib_CallNum
        CallNumObjs(i).Title = Replace(ActiveCell.Value & ActiveCell.Offset(1, 0).Value, " ", "") = CallNum
        CallNumObjs(i).Total = ActiveCell.Offset(0, TotalCol - 1).Value
        ActiveCell.Offset(2, 0).Activate
        i = i + 1
    Loop
    Set getCallNumObjects = CallNumObjs
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...