Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Прошу помочь с массивом / 5 сообщений из 5, страница 1 из 1
16.10.2013, 00:24
    #38428961
КД
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прошу помочь с массивом
Задача такая:
из процедуры книги (К1П1) вызывается процедура в другой книге (К2П1), выбирает в таблице значения ячеек в определенных строках и определенных столбцах, заносит их в массив.
Затем массив как аргумент передается в процедуру первой книги (К1П2), там из него надо извлечь значения и ими заполнить определенные ячейки.
Код К2П1:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
intCountRowInArray = lngHighBorder - lngLowBorder + 1 'количество строк в массиве
ReDim arrValues(intCountRowInArray, 8)  'назначим массив (число аргументов, разделенных запятой - число размерностей;
'значения аргументов - значения размерностей; т.е. в данном случае это двумерная таблица с intCountRowInArray числом строк и 8 столбцами)
intRowIndexInArray = 0
For lngRow = lngLowBorder To lngHighBorder
    
    'заполняем строку массива
    arrValues(intRowIndexInArray, 0) = mxlSheetWithActualDiapasons.Cells(lngRow, 3).Value
    arrValues(intRowIndexInArray, 1) = mxlSheetWithActualDiapasons.Cells(lngRow, 6).Value
    arrValues(intRowIndexInArray, 2) = mxlSheetWithActualDiapasons.Cells(lngRow, 8).Value
    arrValues(intRowIndexInArray, 3) = mxlSheetWithActualDiapasons.Cells(lngRow, 10).Value
    arrValues(intRowIndexInArray, 4) = mxlSheetWithActualDiapasons.Cells(lngRow, 12).Value
    arrValues(intRowIndexInArray, 5) = mxlSheetWithActualDiapasons.Cells(lngRow, 22).Value
    arrValues(intRowIndexInArray, 6) = mxlSheetWithActualDiapasons.Cells(lngRow, 14).Value
    arrValues(intRowIndexInArray, 7) = mxlSheetWithActualDiapasons.Cells(lngRow, 18).Value
    arrValues(intRowIndexInArray, 8) = mxlSheetWithActualDiapasons.Cells(lngRow, 20).Value
    intRowIndexInArray = intRowIndexInArray + 1
       
Next lngRow

'вызов процедуры К1П2 (массив как аргумент)
Application.Run gvarFileAndProcedureNames, gstrSheetName, garrValues



Код К1П2:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
Public Sub FillTableWithPokazatelFromArray(gstrSheetName As String, ByRef garrValues() As Variant)

Dim xlSheet As Excel.Worksheet
Dim varMemberArray As Variant
Dim intRowIndexInArray As Integer
Dim intRowIndex As Integer

    Set xlSheet = Application.Sheets(gstrSheetName)
    
    Rem If UBound(garrValues) > 0 Then
        
        intRowIndex = 3 'заполняем таблицу с показателями значениями из массива, начиная с 3 строки
        
        'от первой до последней строки массива
        intRowIndexInArray = 0
        For intRowIndexInArray = 0 To UBound(garrValues(1))
            
            'вызовем установку границ Range
            mintRowIndexBegin = intRowIndex
            mintRowIndexEnd = intRowIndex
            Call SetBordersForRange(mstrSheetName, mintRowIndexBegin, 20, mintRowIndexEnd, 28)
            
            'заполним Range значениями из массива
            xlSheet.Cells(intRowIndex, 20) = garrValues(intRowIndexInArray, 0)
            xlSheet.Cells(intRowIndex, 21) = garrValues(intRowIndexInArray, 1)
            xlSheet.Cells(intRowIndex, 22) = garrValues(intRowIndexInArray, 2)
            xlSheet.Cells(intRowIndex, 23) = garrValues(intRowIndexInArray, 3)
            xlSheet.Cells(intRowIndex, 24) = garrValues(intRowIndexInArray, 4)
            xlSheet.Cells(intRowIndex, 25) = garrValues(intRowIndexInArray, 5)
            xlSheet.Cells(intRowIndex, 26) = garrValues(intRowIndexInArray, 6)
            xlSheet.Cells(intRowIndex, 27) = garrValues(intRowIndexInArray, 7)
            xlSheet.Cells(intRowIndex, 28) = garrValues(intRowIndexInArray, 8)
                        
            intRowIndex = intRowIndex + 1
            
        Next intRowIndexInArray
        
    Rem End If
    
End Sub


Вот при разборе массива (или уже в момент вызова) - в зависимости от способа моего очередного извращения возникает какая-н. ошибка - то число размерностей задано неправильно, то еще что-н. В данном варианте: Subscript out of range.
Как правильно сделать?
...
Рейтинг: 0 / 0
16.10.2013, 08:46
    #38429126
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прошу помочь с массивом
КДВ данном варианте: Subscript out of range.
Ошибки не возникают в вакууме. Они возникают в строго определённой строке программы при строго определённом состоянии окружения.
Включай трассировку и смотри, где Subscript out of range, чему равен Subscript, для какого массива это out of range и почему.
...
Рейтинг: 0 / 0
16.10.2013, 21:10
    #38430373
КД
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прошу помочь с массивом
Всё, спасибо, разобрался.
В одной книге поставил буковку g arrValues (про венгерскую нотацию вспомнил, умник), а в другой - забыл (arrValues). Соответственно, переменная приходила пустой со всеми вытекающими...
...
Рейтинг: 0 / 0
16.10.2013, 21:24
    #38430384
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прошу помочь с массивом
Нефиг было удалять Option Explicit
...
Рейтинг: 0 / 0
16.10.2013, 22:23
    #38430436
КД
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Прошу помочь с массивом
А я и не удалял. Сам не знаю, как так вышло.
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Прошу помочь с массивом / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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