powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Массив в качестве параметра в процедуру
8 сообщений из 8, страница 1 из 1
Массив в качестве параметра в процедуру
    #35535867
trud
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При передаче массива в качестве параметра в процедуру, в этой самой процедуре видны не все элементы массива.

Имеется такой вот код:
Код: plaintext
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.
Private Sub butt_ok_Click()
Dim arrData() As Variant
......
' заполняю элементы масива данными
j =  1 
With Worksheets("data").Range("d2:d100")
    Set c = .Find(Kod_val.Column( 0 ), LookIn:=xlValues)
    If Not c Is Nothing Then
        FirstAddress = c.Address
        Do
           ReDim arrData( 1  To j,  1  To  2 ) As Variant
           arrData(j,  1 ) = c.Offset( 0 ,  2 ).Value
           arrData(j,  2 ) = c.Offset( 0 ,  3 ).Value
           Set c = .FindNext(c)
           j = j +  1 
        Loop Until c.Address = FirstAddress
    End If
End With
'и затем передаю этот массив в качестве параметра в процедуру Opis.
 Call opis(Otd_From.Value, Otd_To.Value, Kod_val.Column( 0 ), Kod_val.Column( 1 ), Range("Date_Op"), Range("CursCB"), arrData)
...
End Sub

' Процедура находится в модуле Module1
Sub opis(nameOtdFrom, nameOtdTo, kodVal, nameVal, dateOp, curscb, ByRef arrData As Variant)
...
[color=red]' и вот здесь, выводится только последний элемент массива, первые элементы пустые!!!!!![/color]
For i = LBound(arrData,  1 ) To UBound(arrData,  1 )
    MsgBox i & ",  " & arrData(i,  1 ) & ",  " & arrData(i,  2 )
Next

End Sub
...
Рейтинг: 0 / 0
Массив в качестве параметра в процедуру
    #35535950
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
Private Sub butt_ok_Click()
Dim arrData() As Variant
' Процедура находится в модуле Module1
Sub opis(nameOtdFrom, nameOtdTo, kodVal, nameVal, dateOp, curscb, ByRef arrData() As Variant)
...
End Sub

Ы?
...
Рейтинг: 0 / 0
Массив в качестве параметра в процедуру
    #35536243
trud
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игорь Горбонос
Код: plaintext
1.
2.
3.
4.
5.
Private Sub butt_ok_Click()
Dim arrData() As Variant
' Процедура находится в модуле Module1
Sub opis(nameOtdFrom, nameOtdTo, kodVal, nameVal, dateOp, curscb, ByRef arrData() As Variant)
...
End Sub

Ы?

И... собственно, когда в цикле MsgBox-ом вывожу элементы массива, так, для проверки, то размерность определяется правильно, скажем, 7 элементов, но первые 6 элементов - пустые, и только в седьмом лежит значение.
Что я сделал не так?
...
Рейтинг: 0 / 0
Массив в качестве параметра в процедуру
    #35536277
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: trud
>
> И... собственно, когда в цикле MsgBox-ом вывожу элементы массива, так, для
> проверки, то размерность определяется правильно, скажем, 7 элементов, но первые 6
> элементов - пустые, и только в седьмом лежит значение.
> Что я сделал не так?

Блин, смотрел в кгнигу и видел комбинацию :)

ReDim arrData(1 To j, 1 To 2) As Variant
Не хватает ключевого слова Preserve

--
С уважением Горбонос Игорь Леонидович

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Массив в качестве параметра в процедуру
    #35536432
trud
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если не сложно, взгляните на пример. В Module1, процедура Opis, строка 136.
Жмем кнопку "Подготовить", msgBox выводятся значения массива arrData.
для 826, первые 6 элементов пусты, непусто только 7 значение.
Если в ReDim вставить Preserve, - ошибка:
Run-time error '9':Subscript out of range
...
Рейтинг: 0 / 0
Массив в качестве параметра в процедуру
    #35536464
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MSDNIf you use the Preserve keyword, you can resize only the last array dimension and you can't change the number of dimensions at all.
...
Рейтинг: 0 / 0
Массив в качестве параметра в процедуру
    #35536470
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переобъявляй массив как arrData(1 To 2, 1 To j).
...
Рейтинг: 0 / 0
Массив в качестве параметра в процедуру
    #35536488
trud
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
СПАСИБО! :)
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Массив в качестве параметра в процедуру
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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