powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Прошу помочь с массивом
5 сообщений из 5, страница 1 из 1
Прошу помочь с массивом
    #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
Прошу помочь с массивом
    #38429126
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КДВ данном варианте: Subscript out of range.
Ошибки не возникают в вакууме. Они возникают в строго определённой строке программы при строго определённом состоянии окружения.
Включай трассировку и смотри, где Subscript out of range, чему равен Subscript, для какого массива это out of range и почему.
...
Рейтинг: 0 / 0
Прошу помочь с массивом
    #38430373
КД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё, спасибо, разобрался.
В одной книге поставил буковку g arrValues (про венгерскую нотацию вспомнил, умник), а в другой - забыл (arrValues). Соответственно, переменная приходила пустой со всеми вытекающими...
...
Рейтинг: 0 / 0
Прошу помочь с массивом
    #38430384
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нефиг было удалять Option Explicit
...
Рейтинг: 0 / 0
Прошу помочь с массивом
    #38430436
КД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А я и не удалял. Сам не знаю, как так вышло.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Прошу помочь с массивом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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