1 (изменено: tetris, 2013-04-29 21:23:54)

Тема: VBA: MSWord инициализация большого массива

Всем привет.
Работаю с MSWord 2010 - есть большой статический массив типа:

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 его нужно вставить чтобы, его инициализировать, чтобы этот массив воспринимала программа и в дальнейшем его можно былобы использовать для функций поиска итп.
Пробывал вставить в функцию - он пишет ошибку типа слишком большая функция, если в отдельный модуль - массив не виден, если вставить просто вверх или вниз - он пишет что там только комментарии '  '   должны быть..

2

Re: VBA: MSWord инициализация большого массива

Модуль «ThisDocument»:

Option Explicit

Private arr_bic(3011) As Variant

Private Sub Document_Open()
    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

Sub SomeSub()
    MsgBox TypeName(arr_bic(0))
    
    MsgBox _
        arr_bic(0)(0) & vbCrLf & _
        arr_bic(0)(1) & vbCrLf & _
        arr_bic(0)(2)

    MsgBox _
        arr_bic(1)(0) & vbCrLf & _
        arr_bic(1)(1) & vbCrLf & _
        arr_bic(1)(2)
End Sub

Вставьте код, сохраните документ, закройте и снова откройте (чтобы исполнилась процедура «Document_Open()»).

3

Re: VBA: MSWord инициализация большого массива

Дело в том, что в массиве более 3-х тыс. массивов, в каждом из которых 3 элемента (как в первом посте). Повторяющихся нет, все уникальные.
При запуске выдает ошибку - процедура слишком длинная. Как обойти такое ограничение или как можно по другому организовать массив?

http://s017.radikal.ru/i421/1304/9b/5dbc190fe971.png

4

Re: VBA: MSWord инициализация большого массива

tetris, упакуйте код модуля в архив (или документ целиком), выложите на RGhost, ссылку — сюда.

5

Re: VBA: MSWord инициализация большого массива

Поскольку информация в массие конфиденциальная, выкладываю сгенерированный файл - http://rghost.ru/45679470
Принцип такой же - по arr_bic(i)(1) будут найдены 0-й и 2-й элемент массива соответственно.

6

Re: VBA: MSWord инициализация большого массива

Option Explicit

Private arr_bic(3099) As Variant

Private Sub Document_Open()
    Call ArrayInitializePart1
    Call ArrayInitializePart2
    Call ArrayInitializePart3
    Call ArrayInitializePart4
    Call ArrayInitializePart5
    Call ArrayInitializePart6
    Call ArrayInitializePart7
End Sub

Sub ArrayInitializePart1()
    arr_bic(0) = Array("EAW c4Ee1Mba i ADwC2a9QIcGeagI", "412804035", "70718310561146264909")
    arr_bic(1) = Array("dHsM4X6 TDvK3J wdMVmTVaguLAx tb", "991650450", "23858632499019357199")
    …
    arr_bic(499) = Array("KYgTsmY2NKJR QczpDxzfN9ow 52xMi", "363320547", "25346322227009627478")
    arr_bic(500) = Array("55lIpQIrWOLjcZKQ91XSZV1h1g98c c", "449205298", "40370574440858282691")
End Sub

Sub ArrayInitializePart2()
    arr_bic(501) = Array("yUOGWJbiC9f 7hDR1nvgUz R2II1Wz7", "439043040", "76154766955422462137")
    arr_bic(502) = Array("5yUjk aha 8Vj5Kt5txpgJmd8NxmlK", "918000389", "11000064612648337731")
    …
    arr_bic(999) = Array("NkmIlZrDJ HZOCP Ey5 hXibj ON", "903517808", "81863431107188045269")
    arr_bic(1000) = Array("sFFs2Ye l4cwvSu8D X5y zbZadL1nq", "327675579", "26476304362884226998")
End Sub
…
…
…
Sub ArrayInitializePart7()
    arr_bic(3001) = Array("vjC1zAYyVa oc3xxR 8ci l4 FK 7bL", "477546380", "79951073829944333088")
    arr_bic(3002) = Array("92BVjMf5 Y7 DvZD DZcn4EkQ3TG91Y", "405359052", "40649267370861368966")
    …
    arr_bic(3098) = Array("WuYP 5IQegB sXM7yAxJ kC BWX sa", "484569637", "67317802932916156386")
    arr_bic(3099) = Array("f67VPi4bSYFSdsFCsTjy1yMv1TzJfVf", "874413249", "21399298198451184763")
End Sub

Sub SomeSub()
    MsgBox TypeName(arr_bic(0))
    
    MsgBox _
        arr_bic(0)(0) & vbCrLf & _
        arr_bic(0)(1) & vbCrLf & _
        arr_bic(0)(2)

    MsgBox _
        arr_bic(1)(0) & vbCrLf & _
        arr_bic(1)(1) & vbCrLf & _
        arr_bic(1)(2)
End Sub

P.S. Не будет ли удобнее разместить информацию в отдельном файле — CSV, або в базе данных, и загружать её при открытии документа?