Страница: 1 |
|
Вопрос: Работа с коллекциями
|
Добавлено: 17.07.08 21:24
|
|
Автор вопроса: Jktu | ICQ: 381648295
|
Проблема следующая.
В ВБА(Эксель) я создал 2 модуля класса.
Одним из свойств первого класса является коллекция, в которую входят объекты второго класса.
Объекты первого класса, в свою очередь, образуют ещё одну (назовём её главной) коллекцию.
Запускаю заполнение главной коллекции.
На её основе мне нужно создать ещё одну коллекцию, которая будет содержать некоторые элементы главной коллекции с изменёнными свойствами.
Так вот.
Когда я меняю свойства у элементов новой коллекции, они меняются и у соответствующих элементов главной коллекции...
Не уверен, что хоть кто-то поймёт эту муть, попробую выложить здесь упрощённый код:
Примерно так:
Модули класса:
Класс Mark
Public Ord As String
Public Nam As String
Public Dias As New Collection
Класс Dia
Public Size As Single
Public Mar As Single
Public PS As Single
Заполнение коллекции:
Dim Mark1 As New Mark
Dim Dia1 As New Dia
Dim Marks As New Collection
Public Sub Fill()
With Workbooks("Книга1.xls").Sheets("1")
HSh = .Rows.Count
LR = .Cells(HSh, 1).End(xlUp).Row
NRow = .Cells(1, 1).End(xlDown).Row
For i = NRow To LR Step 5
Set A = New Mark
For j = i To i + 4
Dia1.Size = .Cells(j, 5).Value
Dia1.Mar = .Cells(j, 6).Value
Dia1.PS = .Cells(j, 7).Value
Mark1.Dias.Add Item:=Dia
Set Dia = Nothing
Next j
Mark1.Ord = .Cells(i, 1).Value
Mark1.Nam = .Cells(i, 2).Value
Marks.Add Item:=Mark1
Set Mark1 = Nothing
Next i
End With
End Sub
Создаю новую коллекцию:
' ... (Dim, Sub) ...
Dim ThN = New Mark
Ndd = InputBox1 ...
Ndd2 = InputBox2 ...
Ndd3 = InputBox3 ...
'...
For i = 1 To Marks.Count
If Ndd = Marks(i).Nam Then
Set ThN = Marks(i)
j = 1
Do Until ThN.Dias.Count = 1
If Ndd2 <> ThN.Dias(j).Size Then
ThN.Dias.Remove (j)
Else
ThN.Dias(j).Mar = Ndd3
j = j + 1
End If
Loop
ThNs.Add Item:=ThN
Set ThN = Nothing
Exit For
End If
Next i
Так вот. Когда я удаляю элемент Dia из коллекции Dias объекта ThN (ThN.Dias.Remove (j)), автоматически удаляется такой же элемент Dia из коллекции Dias объекта Mark1 (коллекции Marks).
Во как!
Как этого избежать?
Ответить
|
Номер ответа: 1 Автор ответа: bi-lya
Вопросов: 1 Ответов: 125
|
Профиль | | #1
|
Добавлено: 18.07.08 16:12
|
Лучше скажите, чего вы хотите добиться - может и не нужно изобретать велосипед с коллекциями и классами
Ответить
|
Номер ответа: 2 Автор ответа: Jktu
ICQ: 381648295
Вопросов: 8 Ответов: 32
|
Профиль | | #2
|
Добавлено: 20.07.08 00:59
|
Может и не нужно...
А вот чего я хочу добиться:
На предприятии изготавливается несколько марок однотипной продукции. Назовём их марка1, марка2, и т. д.
Каждая марка бывает нескольких видов, т. е., допустим, размеров. Также имеются общие для всех размеров одной марки свойства. Ну, скажем, цвет, форма, название, наконец.
Каждый вид (размер) продукта имеет свои собственные свойства, то есть в состав каждого из них входят одинаковые элементы, но в различном количестве (соотношениях).
Так вот. Я хочу в форму вводить по маркам количество требуемой на месячный план продукции (по маркам и размерам) и получать в результате (тоже в форме или на листе, неважно) необходимое количество сырья, то есть тех самых элементов, о которых я уже упомянул выше.
Может быть есть и более простой способ, не знаю, подскажите!
Всё бы ничего, можно было бы и на калькуляторе посчитать, да всё дело в том, что марок порядка 70 шт., тех самых видов (размеров) у каждой марки по 2 - 5 шт., а материалов (или элементов, как Вам будет угодно) тоже около 70! Причём из них в каждом размере присутствуют около 30 - 35, в каждой марке разные.
Сидит со мной в кабинете девушка, весь месяц только этим и занимается, что считает эту всю муть. Очень мне её жалко... Она уже даже формулы в Экселе составлять научилась сама! Только этими формулами ещё больше всё запутала. Представьте себе лист Экселя 2003 на 400 строк в высоту и на всю ширину заполненный формулами, нормами расхода и подобной лажей. Этот лист весит 3 метра и там сам чёрт ногу сломит.
Надеюсь, понятно объяснил...
Ответить
|
Страница: 1 |
Поиск по форуму