Защо се предименсира ar_week няколко пъти?

Microsoft Excel Електронни таблици Microsoft 365 Excel VBA Програмиране VBA за Excel

Защо е необходимо цикълът 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_Table(), вместо това да отпадне
ReDim Preserve arr_week... в процедурата Fill_ArrayWeek.

Румене, благодаря за подробното описание.
Попълвам елементите на масива в процедурата Fill_ArrayWeek като използвам ReDim Preserve, а Вашето решение попълва елементите във Fill_Table. На практика няма разлика във времето на изпълнение. 
Всяка една задача на VBA има повече от едно решение, а Вие сте отделили време и сте намерили различно и много добро решение, поздравления!


Вашият отговор

Научи компютърните програми онлайн от топ експертите на България
Регистрацията в АУЛА ви дава:
  • 20 безплатни урока
  • Трикове и тънкости за софтуера
  • Отговори на вашите въпроси
  • Регистрация