Работа с динамични масиви (dynamic arrays)

Безплатни 20 урока
регистрирай се и научи

Ако сте вече потребител - Регистриран съм
Видео

Тест за преминаване към следващия урок

 
Долната и горната граница на динамичния масив се променят с оператор:
ReDim
For
Dim
 
Масивите във VBA имат:
едно, две и повече - до 60 измерения
едно, две и повече - във VBA няма ограничение за броя на измеренията
едно или две измерения
 
Елементите на динамичния масив НЕ могат да се запазят, винаги се изтриват
Твърдението НЕ е вярно
Твърдението е вярно
 
Статичен масив означава :
Масив, който не може да променя долната и горната граница
Масив, който не може да променя САМО долната граница
Масив, който не може да променя САМО горната граница
 
Използваме променлива за граница само в:
динамичен масив
статичен масив

Въпроси и отговори

  • Защо в скобите на масива arr_data2(i,2) слагаме като втори индекс 2, нали индексите стартират от нула?

    Gergana Miteva:

    Да започна по-отдалече. С оператора For i = 0 To rng_row казваме "третирай масива от долен индекс нула до горен - броя на редовете"(вярно ли разбирам?), а със следващите два записа казваме копирай от масива arr_data2 (i,2) в wks.Range ("B"&i+2). Защо в този запис дефинираме второто измерение на масива с 2? Това не реферира ли по-скоро към колона? И още нещо, защо не декларираме i като променлива? И последно - защо не използваме Rows, за да оперделим броя на редовете за динамичия масив, не ни ли трабва брой редове, а не номер на реда?

    Димитринка Вълкова:

    Масивите съхраняват повече променливи, които се присвояват на техните елементи. Всеки елемент на масива се определя с индекс. В примера използвам двумерен масив. Оператор For единственото нещо, което прави е да повтори инструкциите, докато броячът (i) = rng_row. Първата и втората инструкция в оператор For означават съответно: запиши в елементa на масива arr_data2(i,2) стойността, която се намира в клетката wks.Range("B" & i + 2) и запиши в елементa на масива arr_data2(i,3) стойността, която се намира в клетката wks.Range("C" & i + 2). Променливата (i) е декларирана с оператор Dim, виж началото на процедурата. В случая Row, съответно Column определят индексите съответно за реда и колоната. Според мен ще бъде полезно за Вас да изгледате още веднъж внимателно урока, но този път до край, целия урок. Така сама ще намерите отговорите на въпросите. Ако нещо не е ясно, винаги съм насреща, да помогна.

  • Може ли малко помощ?

    Виолета Николова:

    Здравейте!

    Имам проблем при използването на масиви в работна среда и не мога да открия грешката в кода. Надявам се аудиторията да е склонна за съдействие.

    дефинирала съм vCOLs as Variant и c as Integer от тук искам колоните в дадена таблица да се подреждат по специфичен ред, който съм задала и съм посочила в масива;

    vCOLs = Array ("Name", "Date", "Type")

    With Worksheets ('"Test")

    добавям колони, които не съществуват в таблицата от списъка:

    For c = LBound (vCOLs) To UBound (vCOLs) If IsError (Application.Match (vCOLs (c), .Rows (1), 0)) Then _ .Cells (1, Columns.Count).End(xlToLeft).Offset (0,1) = vCOLs (c) Next c

    With .Cells (1,1).CurrentRegion премахвам колони, които не са в списъка отдясно-наляво For c = .Columns.Count to 1 Step -1 If UBound (Filter (vCOLs, .Cells (1,c), True, vbTextCompare)) < 0 Then _ Next c

    добавям избрания списък Application.AddCustomList ListArray :=vCOLs

    премахвам текущото сортиране .Parent.Sort.SortFields.Clear

    подреждам колоните в правилния ред .Cells.Sort Key1 :=.Rows (1), Order1:=xlAscending, _ Orientation :=xlLeftToRight, Header :=xlNo, MatchCase :=False, _ OrderCustom :=Application.CustomListCount - 1 End With

    End With

    и след това ми подрежда колоните по азбучен ред, а не както съм ги избрала

    Благодаря ви предварително!

    Димитринка Вълкова:

    Здравейте, Виолета. Изпратете файла с процедурата и данните на мейл dutoto@gmail.com.