powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / добавление объекта класа в коллекцию
9 сообщений из 9, страница 1 из 1
добавление объекта класа в коллекцию
    #38072509
NecroArt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пишу макрос для Excel 2010. На текущем этапе макрос должен считывать определённые строки из одного листа, затем добавить их в новую книгу. Считываемая строка представляет собой заказ с характеристиками Name, Code и Amount. Поэтому создал класса Order и пытаюсь добавлять его в коллекцию.
Сам класс:
Код: vbnet
1.
2.
3.
Public Name As String
Public code As Integer
Public amount As Integer


И код из процедуры, который должен считывать определённые строки:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Dim cell As Range, sFileName As String, Orders As New Collection
    
Dim rowCount As Long
rowCount = ActiveSheet.Rows.Count

Dim j As Long
Dim orderValue As Integer, codeValue As Integer, sheet As Worksheet, currentOrder As Order
    For j = 5 To rowCount
        orderValue = ActiveSheet.Cells(j, 5).Value
        If orderValue <> 0 Then
            Set currentOrder = New Order
            With currentOrder
                .amount = orderValue
                .code = ActiveSheet.Cells(j, 1).Value
                .Name = ActiveSheet.Cells(j, 2).Value
            End With
            Orders.Add (currendOrder)
        End If
    Next j


Если смотреть в дебагере, то после добавления в коллекцию в ней появляется одна Item со значением Empty типа Variant/Empty.
Думаю, в коллекцию добавляется какой-то пустой элемент.
И так же при попытке записи этой коллекции в новую книгу вылетает ошибка "Object required" на строке оператора For Each:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
    Dim NewBook As Workbook
    Set NewBook = Workbooks.Add
    With NewBook
        .Title = "All Sales"
        .Subject = "Sales"
        sFileName = Application.GetSaveAsFilename & ".xls"
        
        Dim addingOrder As Order
        j = 1
        For Each addingOrder In Orders
            ActiveSheet.Range(j, 1).Value = Orders.Item(j).code
            ActiveSheet.Range(j, 2).Value = Orders.Item(j).Name
            ActiveSheet.Range(j, 3).Value = Orders.Item(j).amount
            j = j + 1
        Next addingOrder
        
        If sFileName = "False.xls" Then Exit Sub
        .SaveAs Filename:=sFileName
    End With


Подскажите пожалуйста, как правильно будет выглядеть код, или даже как лучше сделать эту задачу, если моё решение гораздо хуже вашей идеи.
...
Рейтинг: 0 / 0
добавление объекта класа в коллекцию
    #38072529
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NecroArtДумаю, в коллекцию добавляется какой-то пустой элемент.
NecroArt
Код: vbnet
1.
Orders.Add (currendOrder)

скобки надо убрать - скорее всего дело в этом
...
Рейтинг: 0 / 0
добавление объекта класа в коллекцию
    #38072785
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NecroArt
Код: vbnet
1.
For Each addingOrder In Orders


addingOrder - это и будет ссылкой на текущий элемент в коллекции Orders. В цикле ссылка будет меняться, не надо j = j + 1 никаких...
...
Рейтинг: 0 / 0
добавление объекта класа в коллекцию
    #38073039
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что за тип такой - Order? где его дефиниция? или это пользовательский тип, структура которого написана выше и гордо обозвана классом?
...
Рейтинг: 0 / 0
добавление объекта класа в коллекцию
    #38073092
NecroArt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VSVLADNecroArt
Код: vbnet
1.
For Each addingOrder In Orders


addingOrder - это и будет ссылкой на текущий элемент в коллекции Orders. В цикле ссылка будет меняться, не надо j = j + 1 никаких...

Да, пробовал делать так с самого начала, а когда не получилось, то уже брал явным образом Item. В общем, ошибка та же самая и в таком случае:
Код: vbnet
1.
2.
3.
4.
5.
6.
For Each addingOrder In Orders
            ActiveSheet.Range(j, 1).Value = addingOrder.code
            ActiveSheet.Range(j, 2).Value = addingOrder.Name
            ActiveSheet.Range(j, 3).Value = addingOrder.amount
            j = j + 1
        Next addingOrder



AkinaА что за тип такой - Order? где его дефиниция? или это пользовательский тип, структура которого написана выше и гордо обозвана классом?

Этот класс описан в модуле класса:
Код: vbnet
1.
2.
3.
Public Name As String
Public code As Integer
Public amount As Integer
...
Рейтинг: 0 / 0
добавление объекта класа в коллекцию
    #38073095
NecroArt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProNecroArtДумаю, в коллекцию добавляется какой-то пустой элемент.
NecroArt
Код: vbnet
1.
Orders.Add (currendOrder)

скобки надо убрать - скорее всего дело в этом

К сожалению, без скобок тоже не работает. Как я где-то читал, без скобок и со скобками смысл для компилятор одинаков.
...
Рейтинг: 0 / 0
добавление объекта класа в коллекцию
    #38073108
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NecroArtК сожалению, без скобок тоже не работает. Как я где-то читал, без скобок и со скобками смысл для компилятор одинаков.плохо читали или неправильно поняли.... эх придется все же взять в руки эксель и посмотреть, где косяк
...
Рейтинг: 0 / 0
добавление объекта класа в коллекцию
    #38073122
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашел ошибку.
Решение тут
...
Рейтинг: 0 / 0
добавление объекта класа в коллекцию
    #38073137
NecroArt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProНашел ошибку.
Решение тут

Нет, ну это просто жесть ) Так ошибитсья ) Большое спасибо, мысленно жму вам руку :)
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / добавление объекта класа в коллекцию
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]