Защо се предименсира ar_week няколко пъти?
Защо е необходимо цикълът arr_week
да се предименсира в процедурата Fill_ArrayWeek
няколко пъти, вместо да се направи само веднъж преди
цикъла в процедурата Fill_Table, веднага след
преброяването на листовете в променливата sht_nu.
Здравейте, Румен. Процедурата Fill_Table попълва колони Процент и Комисионна за всеки лист от файла "Седмична справка" и изчислява сумите за тези колони. След това с процедурата Fill_ArrayWeek се попълват елементите на двумерния масив arr_week, които съхраняват изчислените суми за всеки лист. За да се запазят попълнените вече суми (елементи на масива), използвам Redim Preserve. Накрая елементите на масива arr_week попълват обобщаващата таблица на лист Седмица. "Предименсирането" в процедурата Fill_ArrayWeek има за цел да запази записаните в масива стойности и да добави следващите.
Разбира се, това е едно решение, но винаги могат да се намерят и други решения!
Имах предвид, че размерът на масива става ясен и не се променя след като се определи броят на листовете във файла и по време на изпълнението не се променя. Процедурата Redim се извиква неколкократно с едни и същи параметри.
Така е, размерът на динамичния масив не се променя след като се определи броя на листовете. Но следващата задача е да се попълни масива със сумите от всеки лист. За да се запазят въведените стойности (елементи на масива), използвам Redim Preserve и се добавя новия елемент. Вижте урок 11 от модул 4 и ще стане по-ясно.
Масивът е дефиниран на модулно ниво и би трябвало да не се загуби, освен ако не се използва Redim без нужда.
Румене, благодаря за подробното описание.
Попълвам елементите на масива в процедурата Fill_ArrayWeek като използвам ReDim Preserve, а Вашето решение попълва елементите във Fill_Table. На практика няма разлика във времето на изпълнение.
Всяка една задача на VBA има повече от едно решение, а Вие сте отделили време и сте намерили различно и много добро решение, поздравления!