Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Массив в качестве параметра в процедуру / 8 сообщений из 8, страница 1 из 1
12.09.2008, 11:01
    #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
12.09.2008, 11:25
    #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
12.09.2008, 12:53
    #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
12.09.2008, 13:02
    #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
12.09.2008, 13:55
    #35536432
trud
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массив в качестве параметра в процедуру
Если не сложно, взгляните на пример. В Module1, процедура Opis, строка 136.
Жмем кнопку "Подготовить", msgBox выводятся значения массива arrData.
для 826, первые 6 элементов пусты, непусто только 7 значение.
Если в ReDim вставить Preserve, - ошибка:
Run-time error '9':Subscript out of range
...
Рейтинг: 0 / 0
12.09.2008, 14:04
    #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
12.09.2008, 14:06
    #35536470
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массив в качестве параметра в процедуру
Переобъявляй массив как arrData(1 To 2, 1 To j).
...
Рейтинг: 0 / 0
12.09.2008, 14:13
    #35536488
trud
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массив в качестве параметра в процедуру
СПАСИБО! :)
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Массив в качестве параметра в процедуру / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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