Можно ли постоянно хранить элементы массива в VBA в Excel? - PullRequest
5 голосов
/ 29 сентября 2011

Я написал макрос в Excel, который использует динамический массив. Пользователи будут добавлять элементы в этот массив.

Можно ли хранить элементы постоянно, чтобы они были доступны даже после закрытия книги?

Хитрость в том, что я не хочу хранить элементы на листе и вставлять их обратно в массив, когда рабочая книга открыта, но чтобы элементы постоянно сохранялись в массиве.

Ответы [ 5 ]

6 голосов
/ 29 сентября 2011

Один из лучших вариантов - сохранить значения массива на листе и пометить лист как скрытый с помощью VBA.

Me.Worksheets("ArrayValuesWorksheet").Visible = False

Если вы используете другие вещи, такие как локальные файлы CSV, реестр и т. Д., То код будет вести себя по-разному, просто перемещая книгу на разные компьютеры, и вы потеряете возможность иметь несколько копий массива.

Редактировать (Отличное предложение в комментариях @ Reafidy ниже)

2 голосов
/ 29 сентября 2011

Вы также можете сохранить массив в имени из коллекции имен, и это имя может быть скрыто.

Names.Add Name:="StoredArray", RefersTo:=myArray, Visible:=False
1 голос
/ 29 сентября 2011

Чтобы ответить на ваш вопрос напрямую: Нет, в памяти нет способа сохранить массив с временем жизни, превышающим срок действия приложения, - вам придется его где-то сохранить.

Доступно несколько вариантов, нолучше всего сохранить его на листе.«Очень скрытые» листы видны только через код VBA, поэтому для пользователя это то же самое, что массив всегда находится там и активен в памяти.

0 голосов
/ 13 июня 2016

"нет пути ...", >>> да можно сделать!

некоторые примеры: listbox / ComboListBox (на листе) = массив ...

Для двумерного варианта массива: range () = array.

Или сохраните его в командной строкеMenu (они могут быть сделаны многомерными)

или все, что остается после перезагрузки книги ...

0 голосов
/ 29 сентября 2011

Для чтения / записи массива в листе вы можете использовать

Sub WriteArray()
Dim MyArray As Variant

MyArray = Array("x", "y", "z")

Range("A1:C1").Value = MyArray

End Sub

Sub ReadArray()

Dim MyArray As Variant

MyArray = Range("A1:C1").Value

End Sub

После того, как вы можете использовать свойство Visible листа, чтобы скрыть, как мы ответили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...