Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Многомерный массив / 19 сообщений из 19, страница 1 из 1
31.03.2011, 14:11
    #37192409
dd44
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
Что-то я запутался, подскажите плиз.
Есть многомерные массив их одной строки и двух столбцов.
Если мы этот массив переопределяем
Код: plaintext
ReDim myArray( 1 ,  1 )
, то есть делаем две строки и два столбца, то значения которые были в первой строке так и остаются в первой строке, или переносятся во вторую строку?
...
Рейтинг: 0 / 0
31.03.2011, 14:12
    #37192414
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
redim без preserve просто очистит массив
...
Рейтинг: 0 / 0
31.03.2011, 14:19
    #37192444
dd44
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
Konst_Oneredim без preserve просто очистит массив
АААА голова дырявая, совсем забыл, спасибо. :)
...
Рейтинг: 0 / 0
31.03.2011, 15:21
    #37192589
dd44
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
Блин, либо голова уже не работает, либо не знаю что тут не так:
Код: 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.
32.
33.
        g =  0 
        Dim myArray( 0 ,  2 )
        For i =  4  To .Cells(Rows.Count, intTempStartCol).End(xlUp).Row
            f =  0 
            If Not .Cells(i, intTempStartCol +  9 ).Value = "" And .Cells(i, intTempStartCol +  19 ).Value = "" Then
                For j =  0  To g
                    If myArray(j,  0 ) = .Cells(i, intTempStartCol +  9 ).Value And myArray(j,  1 ) = Format(CDate(.Cells(i, intTempStartCol +  10 ).Value)) Then
                        myArray(j,  2 ) = Format(CCur(CCur(myArray(j,  2 )) + CCur(.Cells(i, intTempStartCol +  8 ).Value)), "#,##0.00")
                        f =  1 
                    End If
                Next
                If Not f =  1  Then
                    If myArray( 0 ,  0 ) =  0  Then
                        myArray( 0 ,  0 ) = .Cells(i, intTempStartCol +  9 ).Value
                        myArray( 0 ,  1 ) = Format(CDate(.Cells(i, intTempStartCol +  10 ).Value))
                        myArray( 0 ,  2 ) = Format(CCur(.Cells(i, intTempStartCol +  8 ).Value), "#,##0.00")
                    Else
                        g = g +  1 
                        ReDim Preserve myArray(g,  2 )
                        myArray(g,  0 ) = .Cells(i, intTempStartCol +  9 ).Value
                        myArray(g,  1 ) = Format(CDate(.Cells(i, intTempStartCol +  10 ).Value))
                        myArray(g,  2 ) = Format(CCur(.Cells(i, intTempStartCol +  8 ).Value), "#,##0.00")
                    End If
                End If
            End If
        Next
        If Not myArray( 0 ,  0 ) =  0  Then
            For j =  0  To g
                Me.ComboBox1.AddItem myArray(j,  0 )
            Next
        Else
            MsgBox "Íåîïëà÷åííûõ ñ÷åòîâ íåò.", vbOKOnly
            Call Unload(Me)
        End If
так эта сволочь ругается на
Код: plaintext
ReDim Preserve myArray(g,  2 )
...
Рейтинг: 0 / 0
31.03.2011, 15:39
    #37192626
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
dd44,

Определить массив надо вне процедуры изначально не указывая размер
...
Рейтинг: 0 / 0
31.03.2011, 15:50
    #37192661
dd44
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
Shocker.Prodd44,

Определить массив надо вне процедуры изначально не указывая размер
Приношу извинения, что забыл это указать, он у меня определен
Код: plaintext
Dim myArray() As Variant
...
Рейтинг: 0 / 0
31.03.2011, 15:58
    #37192680
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
тогда выбросить строку
Код: plaintext
Dim myArray( 0 ,  2 )
...
Рейтинг: 0 / 0
31.03.2011, 15:59
    #37192683
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
Shocker.Proтогда выбросить строку
Код: plaintext
Dim myArray( 0 ,  2 )

если в процедуре определена переменная, то она перекрывает переменную, определенную на более высоком уровне
...
Рейтинг: 0 / 0
31.03.2011, 16:40
    #37192793
dd44
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
Shocker.ProShocker.Proтогда выбросить строку
Код: plaintext
Dim myArray( 0 ,  2 )

если в процедуре определена переменная, то она перекрывает переменную, определенную на более высоком уровне
Изменил
Код: plaintext
Dim myArray( 0 ,  2 )
на
Код: plaintext
ReDim myArray( 0 ,  2 )
, все равно ругается на
Код: plaintext
ReDim Preserve myArray(g,  2 )
пишет: Subscript out of range.
...
Рейтинг: 0 / 0
31.03.2011, 16:59
    #37192843
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
dd44,

Странная ошибка
Уверены, что ругается именно на эту строку?

попробуйте локализовать или выкладывайте рабочий фрагмент для анализа.
...
Рейтинг: 0 / 0
31.03.2011, 17:06
    #37192867
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
потому что нельзя
читайте классику
...
Рейтинг: 0 / 0
31.03.2011, 17:20
    #37192911
dd44
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
Konst_Oneпотому что нельзя
читайте классику Все равно туплю. Изменил строку в соответствии с примером на
Код: plaintext
ReDim Preserve myArray(UBound(myArray) +  1 )
опять та же ошибка: Subscript out of range.
...
Рейтинг: 0 / 0
31.03.2011, 17:23
    #37192914
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
Плохо читаете классику:
Коррекция длины массива с использование Preserve возможна и для многомерных массивов, но при этом допускается изменение только последнего индекса

Спасибо, Костя, за подсказкку, сам я об этом позабыл
...
Рейтинг: 0 / 0
31.03.2011, 17:24
    #37192916
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Dim myArray() as String

Redim myArray( 2 )
myArray( 0 )="раз"
myArray( 1 )="два"
myArray( 2 )="три"

ReDim Preserve myArray(UBound(myArray) +  1 )
myArray( 3 )="четыре"

теперь надеюсь, что сами разберётесь
...
Рейтинг: 0 / 0
31.03.2011, 20:53
    #37193257
dd44
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
Так что, я могу добавить только столбец?
...
Рейтинг: 0 / 0
31.03.2011, 21:38
    #37193300
Многомерный массив
dd44,
Что мешает тебе выдумать порох непромокаемый?(с) Козьма Прутков

Поменяйте "ряды" и "столбцы" местами
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Dim myArray()
'...
ReDim myArray( 2 ,  0 )
'...
    g = g +  1 
    ReDim Preserve myArray( 2 , g)
    myArray( 0 , g) = .Cells(i, intTempStartCol +  9 ).Value
    myArray( 1 , g) = Format(CDate(.Cells(i, intTempStartCol +  10 ).Value))
    myArray( 2 , g) = Format(CCur(.Cells(i, intTempStartCol +  8 ).Value), "#,##0.00")
'...
...
Рейтинг: 0 / 0
01.04.2011, 10:05
    #37193698
dd44
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
пробуй камнемdd44,
Что мешает тебе выдумать порох непромокаемый?(с) Козьма Прутков

Поменяйте "ряды" и "столбцы" местами
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Dim myArray()
'...
ReDim myArray( 2 ,  0 )
'...
    g = g +  1 
    ReDim Preserve myArray( 2 , g)
    myArray( 0 , g) = .Cells(i, intTempStartCol +  9 ).Value
    myArray( 1 , g) = Format(CDate(.Cells(i, intTempStartCol +  10 ).Value))
    myArray( 2 , g) = Format(CCur(.Cells(i, intTempStartCol +  8 ).Value), "#,##0.00")
'...

Спасибо всем огромное. Это понятно что можно транспонировать массив, понятно, что его можно сделать одномерным и добавлять по три значения, можно также сделать два массива и предварительно изменив один передавать в него значения из другого, но это все как-то неправильно что ли, не красиво и губит в душе тягу к прекрасному.
...
Рейтинг: 0 / 0
01.04.2011, 10:45
    #37193788
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
dd44Спасибо всем огромное. Это понятно что можно транспонировать массив, понятно, что его можно сделать одномерным и добавлять по три значения, можно также сделать два массива и предварительно изменив один передавать в него значения из другого, но это все как-то неправильно что ли, не красиво и губит в душе тягу к прекрасному.

Когда возникает подобный душевный диссонанс, ты берешь в руки мышь и парой кликов создаешь класс. Затем заполняешь класс всем, что тебя так сильно расстраивает, и реализуешь свою тягу к прекрасному путем создания прекрасных методов и свойств этого класса. Таким образом создав "черный ящик", ты навсегда забываешь о плохом настроении из-за массивов, после создания не менее двух десятков подобных классов, можешь достичь просветления, а после пятого десятка - нирваны.
...
Рейтинг: 0 / 0
04.04.2011, 10:30
    #37197368
dd44
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многомерный массив
Shocker.Prodd44Спасибо всем огромное. Это понятно что можно транспонировать массив, понятно, что его можно сделать одномерным и добавлять по три значения, можно также сделать два массива и предварительно изменив один передавать в него значения из другого, но это все как-то неправильно что ли, не красиво и губит в душе тягу к прекрасному.

Когда возникает подобный душевный диссонанс, ты берешь в руки мышь и парой кликов создаешь класс. Затем заполняешь класс всем, что тебя так сильно расстраивает, и реализуешь свою тягу к прекрасному путем создания прекрасных методов и свойств этого класса. Таким образом создав "черный ящик", ты навсегда забываешь о плохом настроении из-за массивов, после создания не менее двух десятков подобных классов, можешь достичь просветления, а после пятого десятка - нирваны.Улыбнуло, с классами я еще не знаком, будем изучать матчасть.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Многомерный массив / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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