powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA: MSWord инициализация большого массива
14 сообщений из 14, страница 1 из 1
VBA: MSWord инициализация большого массива
    #38244728
gametetris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет.
Работаю с MSWord 2010 - есть большой статический массив типа:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Dim arr_bic(3011)
arr_bic(0) = Array("WORD 1", "1012765", "10000765")
arr_bic(1) = Array("WORD 2", "4525870", "20000870")
arr_bic(2) = Array("WORD 3", "4525186", "80000186")
arr_bic(3) = Array("WORD 4", "9209778", "80000778")
....
arr_bic(3009) = Array("WORD 3010", "6643799", "70000799")
arr_bic(3010) = Array("WORD 3011", "9805719", "70000719")



Вопрос - в какое место во встроенном редакторе MVBA его нужно вставить чтобы, его инициализировать, чтобы этот массив воспринимала программа и в дальнейшем его можно былобы использовать для функций поиска итп.
Пробывал вставить в функцию - он пишет ошибку типа слишком большая функция, если в отдельный модуль - массив не виден, если вставить просто вверх или вниз - он пишет что там только комментарии ' ' должны быть..
...
Рейтинг: 0 / 0
VBA: MSWord инициализация большого массива
    #38244733
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gametetris, надо его определять в модуле с кляузой PUBLIC



Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Public arr_bic(3011) As Variant

Public Sub InitArray()
arr_bic(0) = Array("WORD 1", "1012765", "10000765")
arr_bic(1) = Array("WORD 2", "4525870", "20000870")
arr_bic(2) = Array("WORD 3", "4525186", "80000186")
arr_bic(3) = Array("WORD 4", "9209778", "80000778")

arr_bic(3009) = Array("WORD 3010", "6643799", "70000799")
arr_bic(3010) = Array("WORD 3011", "9805719", "70000719")

End Sub



Потом один раз вызвать InitArray и работать с ним

Есть еще кляуза CONST, но что-то так и не смог через нее массив инициализировать :( может кто подскажет
...
Рейтинг: 0 / 0
VBA: MSWord инициализация большого массива
    #38244909
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Оператором Const нельзя создать массив в VBA/VB6.
Для хранения информации в документе Word можно использовать коллекцию Variables - посмотрите, например, тут: http://www.cyberforum.ru/vba/thread713657.html#post3486684
...
Рейтинг: 0 / 0
VBA: MSWord инициализация большого массива
    #38245923
gametetris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дело в том, что в массиве более 3-х тыс. массивов, в каждом из которых 3 элемента (как в первом посте). Повторяющихся нет, все уникальные.
При запуске выдает ошибку - процедура слишком длинная. Как обойти такое ограничение или как можно по другому организовать массив?

...
Рейтинг: 0 / 0
VBA: MSWord инициализация большого массива
    #38245953
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gametetrisДело в том, что в массиве более 3-х тыс. массивов, в каждом из которых 3 элемента (как в первом посте).
...
Как обойти такое ограничение или как можно по другому организовать массив?

имхо, на таком объёме, "не стыдно", уже и методы БД использовать ... :)
т.е. хранить этот 2-х мерный массив во внешней табличке (хотите - в Аксовском mdb, а можно и просто в ТХТ-файле)

и, потом, когда нужно - открыть на этой таб.рекордсет ... если очень хочется именно массив - можно рекордсет, "по быстрому", выгрузить в массив - Recordset.GetRows
но, это врядли нужно будет - у рекордсета свои методы "навигации" / "поиска" есть, и получше чем по массиву ...
...
Рейтинг: 0 / 0
VBA: MSWord инициализация большого массива
    #38245958
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gametetris,

1. Где сейчас хранятся эти данные (текстовый файл, таблица в Excel, таблица в Word...)?

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

3. Первый элемент каждого массива ("WORD 1") можно не хранить, он определяется индексом элемента.

Если хотите конкретной помощи, приложите файл с частью исходных данных, приближенных к реальности .
...
Рейтинг: 0 / 0
VBA: MSWord инициализация большого массива
    #38246037
gametetris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwerty112имхо, на таком объёме, "не стыдно", уже и методы БД использовать ... :)
т.е. хранить этот 2-х мерный массив во внешней табличке (хотите - в Аксовском mdb, а можно и просто в ТХТ-файле)

и, потом, когда нужно - открыть на этой таб.рекордсет ... если очень хочется именно массив - можно рекордсет, "по быстрому", выгрузить в массив - Recordset.GetRows
но, это врядли нужно будет - у рекордсета свои методы "навигации" / "поиска" есть, и получше чем по массиву ...

Методы БД мне знакомы, но условие такое, что нужно ограничиться только возможностями 'единого файла Word .docm' и встроенным редактором MVBA, без привлечения Access,Excel,файлов,sql итд. =(

Казанскийgametetris,
1. Где сейчас хранятся эти данные (текстовый файл, таблица в Excel, таблица в Word...)?
2. Как будет использоваться массив? Почему массив массивов, а не двумерный массив?
3. Первый элемент каждого массива ("WORD 1") можно не хранить, он определяется индексом элемента.
Если хотите конкретной помощи, приложите файл с частью исходных данных, приближенных к реальности .

1. Сейчас данные пока хранятся во втроенном редакторе Microsoft Word 2010 - 'Microsoft Visual Basic for Application' в модуле 'ThisDocument', но инициализировать массив для работы не получилось (см. пред. пост)
Желательно его нужно там оставить и не выносить за пределы этого редактора (в отдельные файлы,excel итд..)

2. Принцип работы с массивом такой - по arr_bic(i)(1) будут найдены 0-й и 2-й элементы массива соответственно, далее эти элементы попадают в сам вордовский файл в поля TextBox'ы.
Т.е. существуют 3 TextBox'a в документе Word - в первом TextBox'е набираешь 6-ти значное число - далее идет поиск по массиву arr_bic(i)(1), если найдено соответствие - второй и третий TextBox автоматически заполняются из arr_bic(i)(0) и arr_bic(i)(2).

3. Поскольку информация в массие конфиденциальная, выкладываю сгенерированный файл - http://rghost.ru/45679470
Принцип такой же - по arr_bic(i)(1) будут найдены 0-й и 2-й элемент массива соответственно.
...
Рейтинг: 0 / 0
VBA: MSWord инициализация большого массива
    #38246058
basicv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gametetris,

говорят что в ВБА процедуры немогут быть больше 64 кб - Procedure too large . Выход - раздели её на несколько подпроцедур.
...
Рейтинг: 0 / 0
VBA: MSWord инициализация большого массива
    #38246145
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gametetris,

а почему бы не хранить инфу в текстовике(или ворд документе) в формате

0,"EAW c4Ee1Mba i ADwC2a9QIcGeagI", "412804035", "70718310561146264909"
1,"dHsM4X6 TDvK3J wdMVmTVaguLAx tb", "991650450", "23858632499019357199"
2,"A95 2 d3eB5jfe cWfjaLaLphwdC e", "220401038", "87286543082884621244"
3,"vggmyolMMSCYvMh6xh9E1 1mrDFimiM", "553681325", "72181838497381736183"
4,"v257V P3o8ybG8qY42Z 8T3SxlHyA7", "510463958", "71305011508900973802"
5,"Z7yHm XOdd3 pgCgetnG2eNnCFEiLNK", "525773559", "16266789812937587623"
6,"PiLrTn9m1dxPws6rUvi8 9Uu pG p", "339476508", "18179830168856225258"
7,"Umg hrqMJC3x CUkB tM3d rEXZf C", "238443126", "51286010222049573163"
8,"v Nc 4k yk tLI9SYQ DkxUY9Re7 Km", "668545786", "44750839920805042102"

и макросик в десяток строк
...
Рейтинг: 0 / 0
VBA: MSWord инициализация большого массива
    #38246174
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gametetrisнужно ограничиться только возможностями 'единого файла Word .docm' и встроенным редактором MVBA, без привлечения Access,Excel,файлов,sql итд.

Желательно его нужно там оставить и не выносить за пределы этого редактора (в отдельные файлы,excel итд..)

Поскольку информация в массиве конфиденциальнаяЕсли вы считаете, что XLSM обеспечит "конфиденциальность" - вы очень глубоко заблуждаетесь. Поэтому всё же проще вынести данные в отдельный файл (пусть даже это будет CSV, путь даже данные будут "зашифрованы") и при запуске - загружать данные в память. Или вообще устроить выборку по запросу, с кэшированием - средства SQL через ADO это вполне позволяют, причем быстродействие будет сравнимо с вашим "поиском в массиве".
...
Рейтинг: 0 / 0
VBA: MSWord инициализация большого массива
    #38246277
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gametetris2. Принцип работы с массивом такой - по arr_bic(i)(1) будут найдены 0-й и 2-й элементы массива соответственно, далее эти элементы попадают в сам вордовский файл в поля TextBox'ы.
Т.е. существуют 3 TextBox'a в документе Word - в первом TextBox'е набираешь 6-ти значное число - далее идет поиск по массиву arr_bic(i)(1), если найдено соответствие - второй и третий TextBox автоматически заполняются из arr_bic(i)(0) и arr_bic(i)(2).
То есть 2-й элемент является уникальным ключом записи?
Тогда коллекция Variables подходит идеально. В приложенном документе содержится коллекция, сформированная из данных примера: ключом служит 2-й элемент, а 1-й и 3-й соединены в строку через символ Tab.
При открытии документа ключи коллекции кладутся в комбобокс.
При выборе значения в комбобоксе извлекается соотв. элемент коллекции и заполняются текстбоксы.
...
Рейтинг: 0 / 0
VBA: MSWord инициализация большого массива
    #38246905
gametetris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
КазанскийВ приложенном документе содержится коллекция, сформированная из данных
омг, об этой возможности ворда я даже не знал, это как туда надо зайти, чтобы добавлять/редактировать/удалять ключи??
Пробывал Вставка->Экспресс-блоки->Поле->Автоматизация->DocVariable а дальше как? Желательно сделать пару скринов :o
...
Рейтинг: 0 / 0
VBA: MSWord инициализация большого массива
    #38246971
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gametetris, добавлять кодом, зачем вручную, рука устанет
...
Рейтинг: 0 / 0
VBA: MSWord инициализация большого массива
    #38247313
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пример создания, обращения к элементу по ключу и по номеру, удаления элемента коллекции Variables. Копия из окна Immediate.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
?activedocument.Variables.Count 
 0 
activedocument.Variables("aaa")="zzz"
?activedocument.Variables.Count
 1 
?activedocument.Variables("aaa")
zzz
?activedocument.Variables(1)
zzz
activedocument.Variables(1).Delete 
?activedocument.Variables.Count
 0
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA: MSWord инициализация большого массива
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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