Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как работать с коллекциями в VBA?

21K
15 октября 2007 года
lakuster
24 / / 04.10.2007
Как получить полный список значений (Items) и ключей (Keys) из заполненной коллекции Col?
Я использовала конструкцию For Each:
For Each A in Col

Next A,
где A имеет тип Variant (другие типы не работают).
Но при этом я получаю в A только значения (Item).
А как получить пару: ключ - значение я не знаю.
Кто знает, прошу подсказать.
251
15 октября 2007 года
SkyMаn
1.7K / / 31.07.2007
с использованием Key - не получается?
275
15 октября 2007 года
pashulka
985 / / 19.09.2004
Если коллекция содержит об'екты, то переменная также может иметь тип Object (пример для VBA Excel)

 
Код:
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


Кроме того, допускается и такой способ перебора элементов коллекции :

 
Код:
For iCount = 1 To iCollection.Count
    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
21K
15 октября 2007 года
lakuster
24 / / 04.10.2007
Так в том-то и дело, что я не знаю этих ключей (Key) заранее!
15K
16 октября 2007 года
gruz0
71 / / 23.11.2006
 
Код:
For Each A in Col
    Debug.Print Col(A)
Next A

?
275
16 октября 2007 года
pashulka
985 / / 19.09.2004
lakuster, В моём примере - ключи также неизвестны заранее, а если добавить Randomize, то и при дальнейших тестированиях тоже, так что рекомендую повнимательнее изучить об'ект "Dictionary"
21K
16 октября 2007 года
lakuster
24 / / 04.10.2007
Цитата: pashulka
lakuster, В моём примере - ключи также неизвестны заранее, а если добавить Randomize, то и при дальнейших тестированиях тоже, так что рекомендую повнимательнее изучить об'ект "Dictionary"



Спасибо за подсказку.
Ваш пример прекрасно бы работал, если бы я сама создавала
коллекцию. Но она уже создана, а мне надо иметь список
пар элементов ключ - значение. Для чего?
Для того, чтобы я могла сохранить эту коллекцию на диске,
а потом восстановить её, когда это нужно.
К сожалению, в VBA отсутствует понятие сериализации,
поддерживаемое платформой .NET Framework. Я смотрела ссылки -
там нет явных ссылок даже на пространство имён System.IO.
Помогите мне советом: как я могу сохраить коллекцию с ключами
(аналог Hashtable в C#) на диске, чтобы её можно было восстановить
в том виде, в каком она сохранялась?
Заранее благодарю!

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог