когда я пытаюсь добавить объект в коллекцию, все значения объекта меняются на текущий объект, как? - PullRequest
1 голос
/ 05 ноября 2019

У меня есть книга Excel, я хочу прочитать значения столбца из листа 'input1' и на основе значения столбца скопировать строку из листа 'input' и сохранить ее в объекте класса. Сделайте это для всех записей столбца на листе «input1».

Private Sub CommandButton1_Click()
    Call PrepareOutput
End Sub
Public Sub PrepareOutput()
   Dim i, indexValue,inputIndexRow As Integer
   Dim bills As New Collection
   inputIndexRow = 2
   indexValue= Worksheets("Input1").Cells(inputIndexRow , 1).Value

   While (Not IsEmpty(indexValue))
      i = indexValue+ 1
      Dim bill As New bill
      bill.quantity = Worksheets("Input1").Cells(inputIndexRow , 2).Value
      bill.cost = Worksheets("Input").Cells(i, 3).Value
      bills.Add bill
      inputIndexRow = inputIndexRow + 1
      indexValue= Worksheets("Input1").Cells(inputIndexRow , 1).Value
   Wend
End Sub

'class Bill has these public variables
Public service As String
Public serialNumber As Byte
Public cost As Double
Public quantity As Byte

After adding first object

after adding second object

1 Ответ

4 голосов
/ 05 ноября 2019

Вам нужно будет создать новый экземпляр счета в вашем цикле. Ваше определение Dim bill As New bill объявляет переменную bill и создает экземпляр, но, хотя это внутри вашего цикла, оно не создает новый экземпляр для каждой итерации.

Поэтому измените свой код на

While (Not IsEmpty(indexValue))
    Dim bill As bill
    set bill = new bill
    bill.quantity = Worksheets("Input1").Cells(inputIndexRow , 2).Value
    ...
Wend
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...