|
VBA: MSWord инициализация большого массива
|
|||
---|---|---|---|
#18+
Всем привет. Работаю с MSWord 2010 - есть большой статический массив типа: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8.
Вопрос - в какое место во встроенном редакторе MVBA его нужно вставить чтобы, его инициализировать, чтобы этот массив воспринимала программа и в дальнейшем его можно былобы использовать для функций поиска итп. Пробывал вставить в функцию - он пишет ошибку типа слишком большая функция, если в отдельный модуль - массив не виден, если вставить просто вверх или вниз - он пишет что там только комментарии ' ' должны быть.. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2013, 07:52 |
|
VBA: MSWord инициализация большого массива
|
|||
---|---|---|---|
#18+
gametetris, надо его определять в модуле с кляузой PUBLIC Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Потом один раз вызвать InitArray и работать с ним Есть еще кляуза CONST, но что-то так и не смог через нее массив инициализировать :( может кто подскажет ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2013, 08:07 |
|
VBA: MSWord инициализация большого массива
|
|||
---|---|---|---|
#18+
Оператором Const нельзя создать массив в VBA/VB6. Для хранения информации в документе Word можно использовать коллекцию Variables - посмотрите, например, тут: http://www.cyberforum.ru/vba/thread713657.html#post3486684 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2013, 10:29 |
|
VBA: MSWord инициализация большого массива
|
|||
---|---|---|---|
#18+
Дело в том, что в массиве более 3-х тыс. массивов, в каждом из которых 3 элемента (как в первом посте). Повторяющихся нет, все уникальные. При запуске выдает ошибку - процедура слишком длинная. Как обойти такое ограничение или как можно по другому организовать массив? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2013, 03:55 |
|
VBA: MSWord инициализация большого массива
|
|||
---|---|---|---|
#18+
gametetrisДело в том, что в массиве более 3-х тыс. массивов, в каждом из которых 3 элемента (как в первом посте). ... Как обойти такое ограничение или как можно по другому организовать массив? имхо, на таком объёме, "не стыдно", уже и методы БД использовать ... :) т.е. хранить этот 2-х мерный массив во внешней табличке (хотите - в Аксовском mdb, а можно и просто в ТХТ-файле) и, потом, когда нужно - открыть на этой таб.рекордсет ... если очень хочется именно массив - можно рекордсет, "по быстрому", выгрузить в массив - Recordset.GetRows но, это врядли нужно будет - у рекордсета свои методы "навигации" / "поиска" есть, и получше чем по массиву ... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2013, 09:59 |
|
VBA: MSWord инициализация большого массива
|
|||
---|---|---|---|
#18+
gametetris, 1. Где сейчас хранятся эти данные (текстовый файл, таблица в Excel, таблица в Word...)? 2. Как будет использоваться массив? Почему массив массивов, а не двумерный массив? 3. Первый элемент каждого массива ("WORD 1") можно не хранить, он определяется индексом элемента. Если хотите конкретной помощи, приложите файл с частью исходных данных, приближенных к реальности . ... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2013, 10:14 |
|
VBA: MSWord инициализация большого массива
|
|||
---|---|---|---|
#18+
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-й элемент массива соответственно. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2013, 13:16 |
|
VBA: MSWord инициализация большого массива
|
|||
---|---|---|---|
#18+
gametetris, говорят что в ВБА процедуры немогут быть больше 64 кб - Procedure too large . Выход - раздели её на несколько подпроцедур. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2013, 13:49 |
|
VBA: MSWord инициализация большого массива
|
|||
---|---|---|---|
#18+
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" и макросик в десяток строк ... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2013, 16:46 |
|
VBA: MSWord инициализация большого массива
|
|||
---|---|---|---|
#18+
gametetrisнужно ограничиться только возможностями 'единого файла Word .docm' и встроенным редактором MVBA, без привлечения Access,Excel,файлов,sql итд. Желательно его нужно там оставить и не выносить за пределы этого редактора (в отдельные файлы,excel итд..) Поскольку информация в массиве конфиденциальнаяЕсли вы считаете, что XLSM обеспечит "конфиденциальность" - вы очень глубоко заблуждаетесь. Поэтому всё же проще вынести данные в отдельный файл (пусть даже это будет CSV, путь даже данные будут "зашифрованы") и при запуске - загружать данные в память. Или вообще устроить выборку по запросу, с кэшированием - средства SQL через ADO это вполне позволяют, причем быстродействие будет сравнимо с вашим "поиском в массиве". ... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2013, 18:45 |
|
VBA: MSWord инициализация большого массива
|
|||
---|---|---|---|
#18+
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. При открытии документа ключи коллекции кладутся в комбобокс. При выборе значения в комбобоксе извлекается соотв. элемент коллекции и заполняются текстбоксы. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2013, 22:50 |
|
VBA: MSWord инициализация большого массива
|
|||
---|---|---|---|
#18+
КазанскийВ приложенном документе содержится коллекция, сформированная из данных омг, об этой возможности ворда я даже не знал, это как туда надо зайти, чтобы добавлять/редактировать/удалять ключи?? Пробывал Вставка->Экспресс-блоки->Поле->Автоматизация->DocVariable а дальше как? Желательно сделать пару скринов :o ... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2013, 00:16 |
|
VBA: MSWord инициализация большого массива
|
|||
---|---|---|---|
#18+
gametetris, добавлять кодом, зачем вручную, рука устанет ... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2013, 07:09 |
|
VBA: MSWord инициализация большого массива
|
|||
---|---|---|---|
#18+
Пример создания, обращения к элементу по ключу и по номеру, удаления элемента коллекции Variables. Копия из окна Immediate. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.05.2013, 18:21 |
|
|
start [/forum/topic.php?fid=60&msg=38247313&tid=2157001]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
47ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 255ms |
total: | 390ms |
0 / 0 |