Dim iCollection As New Collection, iObject As Object
iCollection.Add ActiveCell
iCollection.Add ActiveSheet
iCollection.Add ActiveWorkbook
For Each iObject In iCollection
MsgBox TypeName(iObject), , ""
Next
Как работать с коллекциями в VBA?
Я использовала конструкцию For Each:
For Each A in Col
Next A,
где A имеет тип Variant (другие типы не работают).
Но при этом я получаю в A только значения (Item).
А как получить пару: ключ - значение я не знаю.
Кто знает, прошу подсказать.
с использованием Key - не получается?
Код:
Кроме того, допускается и такой способ перебора элементов коллекции :
Код:
For iCount = 1 To iCollection.Count
MsgBox TypeName(iCollection(iCount)), , ""
Next
MsgBox TypeName(iCollection(iCount)), , ""
Next
Что касается получения ключей, то коллекции в VB(A) этого не позволяют, однако, Вы можете попробовать использовать об'ект "Dictionary", более подробную информацию можно получить, например, в офисной справке (XL2000 и старше)
Код:
With CreateObject("Scripting.Dictionary")
For iCount = 1 To 100
'.Add "Key", "Item"
.Add _
Item:="Элемент" & iCount, _
Key:="Ключ" & Rnd() * 10000 'только для примера
Next
iItems = .Items
iKeys = .Keys
End With
For iCount = 1 To 100
'.Add "Key", "Item"
.Add _
Item:="Элемент" & iCount, _
Key:="Ключ" & Rnd() * 10000 'только для примера
Next
iItems = .Items
iKeys = .Keys
End With
Так в том-то и дело, что я не знаю этих ключей (Key) заранее!
Код:
For Each A in Col
Debug.Print Col(A)
Next A
Debug.Print Col(A)
Next A
?
lakuster, В моём примере - ключи также неизвестны заранее, а если добавить Randomize, то и при дальнейших тестированиях тоже, так что рекомендую повнимательнее изучить об'ект "Dictionary"
Цитата: pashulka
lakuster, В моём примере - ключи также неизвестны заранее, а если добавить Randomize, то и при дальнейших тестированиях тоже, так что рекомендую повнимательнее изучить об'ект "Dictionary"
Спасибо за подсказку.
Ваш пример прекрасно бы работал, если бы я сама создавала
коллекцию. Но она уже создана, а мне надо иметь список
пар элементов ключ - значение. Для чего?
Для того, чтобы я могла сохранить эту коллекцию на диске,
а потом восстановить её, когда это нужно.
К сожалению, в VBA отсутствует понятие сериализации,
поддерживаемое платформой .NET Framework. Я смотрела ссылки -
там нет явных ссылок даже на пространство имён System.IO.
Помогите мне советом: как я могу сохраить коллекцию с ключами
(аналог Hashtable в C#) на диске, чтобы её можно было восстановить
в том виде, в каком она сохранялась?
Заранее благодарю!