Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Динамический массив! HelP! Добавлено: 25.08.09 13:00  

Автор вопроса:  fifa36
Всем привет!
Объявляю динамический массив

Dim arrayname() as string
sub main()
varname = Ubound(arrayname) 'для отладки
ReDim arrayname(Ubound(arrayname)+1)
end sub


Выдает ошибку что subscript out of range. Помогите плиз.
Может надо изменить опцию размерности массива по умолчанию, при первом объявлении, если да то как?)

Ответить

  Ответы Всего ответов: 14  

Номер ответа: 1
Автор ответа:
 Skywalker



ICQ: 300-70-6пятьЪ 

Вопросов: 62
Ответов: 545
 Web-сайт: iSkywalker.ru
 Профиль | | #1
Добавлено: 25.08.09 13:10
тебе что вообще надо-то? потому что написал ты полную тупость

Ответить

Номер ответа: 2
Автор ответа:
 fifa36



Вопросов: 33
Ответов: 116
 Профиль | | #2 Добавлено: 25.08.09 13:12
надо чтоб тупицы вроде тебя не выделывались

Ответить

Номер ответа: 3
Автор ответа:
 Дмитрий Юпатов



Вопросов: 4
Ответов: 457
 Web-сайт: cargomaster.at.ua/
 Профиль | | #3
Добавлено: 25.08.09 13:31
fifa36 а все-таки, чего надо-то?

Ответить

Номер ответа: 4
Автор ответа:
 fifa36



Вопросов: 33
Ответов: 116
 Профиль | | #4 Добавлено: 25.08.09 13:34
я заранее не знаю какой размерности нужен массив
есть цикл которой заполняет массив, нужно чтоб каждый раз при выполнении цикла в массив записывался новый элемент с сохранением прежних. Спасибо за помощь! извините что не корректно сформулировал вначале.

Ответить

Номер ответа: 5
Автор ответа:
 Loner-new_



Вопросов: 0
Ответов: 4
 Профиль | | #5 Добавлено: 25.08.09 15:10
Ошибка возникает при запросе размерности несуществующего массива.
Решение как обойти (тупое, "в лоб", но думать сильно не хочется):
  1. Option Explicit
  2. Option Base 1
  3. Sub main()
  4. Dim varname As Integer
  5. Dim ArrayName() As String
  6. On Error GoTo ArrayErr
  7. varname = UBound(ArrayName) 'для отладки
  8. MsgBox "stop1-" & varname & "-" & ArrayName(varname)
  9. 2:
  10. On Error GoTo 0
  11. varname = UBound(ArrayName) 'для отладки
  12. MsgBox "stop2-" & varname & "-" & ArrayName(varname)
  13. Stop
  14. ArrayErr:
  15. ReDim ArrayName(1)
  16. ArrayName(1) = "test"
  17. GoTo 2:
  18. End Sub

Ответить

Номер ответа: 6
Автор ответа:
 UnDeAdZak



Вопросов: 80
Ответов: 476
 Профиль | | #6 Добавлено: 25.08.09 18:15
А если массив задать в самом событии Main? Когда ты узнаёшего размер, типа dim arrayname(0 to 'число) As string?

Ответить

Номер ответа: 7
Автор ответа:
 AngryBadger



Вопросов: 33
Ответов: 245
 Профиль | | #7 Добавлено: 25.08.09 18:19
я заранее не знаю какой размерности нужен массив
есть цикл которой заполняет массив, нужно чтоб каждый раз при выполнении цикла в массив записывался новый элемент с сохранением прежних.

Дык в чем проблема то?

Option Explicit
Option Base 1

Sub MyArr()

Dim i As Integer
Dim UpBound As Integer
Dim LoBound As Integer
Dim MyArray() As Integer

UpBound = 150
LoBound = -150

For i = 1 To 100
    ReDim Preserve MyArray(i)
    MyArray(i) = CInt((UpBound - LoBound + 1) * Rnd + LoBound)
Next i

For i = 1 To UBound(MyArray)
    Debug.Print MyArray(i)
Next i

End Sub


Волшебное слово
Redim Preserve ' в массив записывается новый элемент с сохранением прежних.


А Ubound массива (для отладки) определишь потом(когда он будет заполнен).

Ответить

Номер ответа: 8
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #8
Добавлено: 25.08.09 18:53
  1.  
  2. Dim arrayname() as string
  3. sub main()
  4. static g as boolean
  5. if g then
  6. varname = Ubound(arrayname) 'для отладки
  7. else
  8. varname = 0
  9. end if
  10. ReDim Preserve arrayname(Ubound(arrayname)+1)
  11. g = true
  12. end sub

Ответить

Номер ответа: 9
Автор ответа:
 fifa36



Вопросов: 33
Ответов: 116
 Профиль | | #9 Добавлено: 27.08.09 10:33
Всем спасибо! разобрался

Ответить

Номер ответа: 10
Автор ответа:
 GDK



Вопросов: 13
Ответов: 348
 Профиль | | #10 Добавлено: 28.08.09 13:20
И блин никто не сказал что есть объекты Collection и Scripting.Dictionary, которые бывает оказываются намного удобнее массивов.

Ответить

Номер ответа: 11
Автор ответа:
 GDK



Вопросов: 13
Ответов: 348
 Профиль | | #11 Добавлено: 28.08.09 13:21
ReDim Preserve - осторожнее с этим.

Ответить

Номер ответа: 12
Автор ответа:
 ADSemenov.ru



Вопросов: 5
Ответов: 276
 Web-сайт: www.adsemenov.ru
 Профиль | | #12
Добавлено: 28.08.09 16:23
____ Коллекции дольше работают.

____ GDK, а что там с Preserve[тивом]? Есть камешки подводные?

Ответить

Номер ответа: 13
Автор ответа:
 GDK



Вопросов: 13
Ответов: 348
 Профиль | | #13 Добавлено: 31.08.09 16:21
Есть. Посмотри спавку по этой директиве.
Я точно не смогу описать косяки, но примерно скажу, что не следует пользоваться ей при работе с многомерными массивами. Данные будут потеряны. Типа сохранятся данные только в первом измерении.

Коллекции работают дольше, занимают больше памяти, но работать с ними удобнее, с Scripting.Dictionary ещё удобнее.

Ответить

Номер ответа: 14
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #14 Добавлено: 31.08.09 17:56
Как всегда за удобство приходится платить.
О проблемах с одномерным массивом никто ничего не слышал?

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам