ВБА динамички опсег

Овај чланак ће показати како створити динамички опсег у програму Екцел ВБА.

Декларисање одређеног опсега ћелија као променљиве у Екцел ВБА ограничава нас на рад само са тим одређеним ћелијама. Декларисањем динамичких опсега у Екцелу, добијамо далеко већу флексибилност у односу на наш код и функционалност коју може да обавља.

Референтни опсези и ћелије

Када се позивамо на објекат Опсег или Ћелија у Екцелу, обично се позивамо на њих чврстим кодирањем у редовима и колонама које нам требају.

Ранге Проперти

Користећи својство опсега, у доњим редовима кода, можемо извршити радње на овом опсегу, као што је промена боје ћелија или подебљавање ћелија.

12 Опсег ("А1: А5"). Фонт.Цолор = вбРедОпсег ("А1: А5"). Фонт.Болд = Тачно

Целлс Проперти

Слично, можемо користити својство ћелија за упућивање на распон ћелија директним упућивањем на ред и ступац у својству ћелија. Ред мора увек бити број, али колона може бити број или слово затворено под наводницима.

На пример, адреса ћелије А1 може се референцирати као:

1 Ћелије (1,1)

Ор

1 Ћелије (1, "А")

Да бисмо користили својство ћелија за референцирање распона ћелија, морамо назначити почетак опсега и крај опсега.

На пример, за референтни опсег А1: А6 могли бисмо користити следећу синтаксу:

1 Опсег (ћелије (1,1), ћелије (1,6)

Затим можемо користити својство Ћелије за извођење радњи на опсегу према примерима линија кода испод:

12 Опсег (ћелије (2, 2), ћелије (6, 2)). Фонт.Цолор = вбРедОпсег (ћелије (2, 2), ћелије (6, 2)). Фонт.Болд = Труе

Динамички опсези са променљивим

Како се величина наших података мења у Екцелу (тј. Користимо више редова и колона него опсеге које смо кодирали), било би корисно да се промене и опсези на које се позивамо у нашем коду. Користећи горе наведени објекат Ранге, можемо креирати променљиве за складиштење максималних бројева редова и колона области радног листа програма Екцел који користимо, и користити ове променљиве за динамичко прилагођавање објекта Ранге док је код покренут.

На пример

1234 Затамните лРов као цео бројЗатамните лЦол као цео бројлРов = Распон ("А1048576"). Крај (клУп) .РовлЦол = Опсег ("КСФД1"). Крај (клТоЛефт). Колона

Последњи ред у колони

Како на радном листу има 1048576 редова, променљива лРов ће отићи на дно листа, а затим ће користити посебну комбинацију тастера Енд и тастера са стрелицом нагоре да оде до последњег реда који се користи на радном листу - то ће нам дати број реда који нам је потребан у нашем опсегу.

Последња колона у реду

Слично, лЦол ће се преселити у колону КСФД која је последња колона на радном листу, а затим употребити посебну комбинацију тастера тастера Енд плус тастера са стрелицом налево да одемо до последње колоне која се користи на радном листу - то ће нам дати број колоне која нам је потребна у нашем опсегу.

Стога, да бисмо добили читав опсег који се користи на радном листу, можемо покренути следећи код:

1234567891011 Суб ГетРанге ()Дим лРов Ас ИнтегерДим лЦол као цео бројДим рнг Ас РангелРов = Распон ("А1048576"). Крај (клУп) .Ров'користите лРов да бисте лакше пронашли последњу колону у опсегулЦол = Опсег ("КСФД" & лРов). Крај (клТоЛефт). КолонаПостави рнг = опсег (ћелије (1, 1), ћелије (лРов, лЦол))'мсгбок да нам покаже дометМсгБок "Опсег је" & рнг.АдресЕнд Суб

СпециалЦеллс - ЛастЦелл

Такође можемо користити метод СпециалЦеллс за објекат опсега да добијемо последњи ред и колону који се користе на радном листу.

123456789101112 Суб УсеСпециалЦеллс ()Дим лРов Ас ИнтегерДим лЦол као цео бројДим рнг Ас РангеДим рнгБегин Ас РангеПостави рнгБегин = Опсег ("А1")лРов = рнгБегин.СпециалЦеллс (клЦеллТипеЛастЦелл) .РовлЦол = рнгБегин.СпециалЦеллс (клЦеллТипеЛастЦелл). КолонаПостави рнг = опсег (ћелије (1, 1), ћелије (лРов, лЦол))'мсгбок да нам покаже дометМсгБок "Опсег је" & рнг.АдресЕнд Суб

УседРанге

Метода коришћеног опсега укључује све ћелије које имају вредности у тренутном радном листу.

123456 Суб УседРангеЕкампле ()Дим рнг Ас РангеПоставите рнг = АцтивеСхеет.УседРанге'мсгбок да нам покаже дометМсгБок "Опсег је" & рнг.АдресЕнд Суб

ЦуррентРегион

Тренутни регион се разликује од УседРанге по томе што посматра ћелије које окружују ћелију коју смо декларисали као почетни опсег (тј. Променљиву рнгБегин у доњем примеру), а затим гледа све ћелије које су „повезане“ или повезане у ту декларисану ћелију. Ако се појави празна ћелија у реду или колони, ЦуррентРегион ће престати да тражи даље ћелије.

12345678 Под ЦуррентРегион ()Дим рнг Ас РангеДим рнгБегин Ас РангеПостави рнгБегин = Опсег ("А1")Подесите рнг = рнгБегин.ЦуррентРегион'мсгбок да нам покаже дометМсгБок "Опсег је" & рнг.АдресЕнд Суб

Ако користимо овај метод, морамо се уверити да су све ћелије у опсегу који вам је потребан повезане без празних редова или колона међу њима.

Намед Ранге

Такође се у нашем коду можемо позивати на Намед Рангес. Именовани опсези могу бити динамични све док се подаци ажурирају или убацују, назив опсега може да се промени тако да укључи нове податке.

Овај пример ће променити фонт у подебљан за назив опсега „јануар“

12345 ПодразносНазивЕкампле ()Дим рнг ас РангеСет рнг = Ранге ("јануар")рнг.Фонт.Болд = = ТачноЕнд Суб

Као што ћете видети на доњој слици, ако се ред дода у назив опсега, тада се назив опсега аутоматски ажурира тако да укључује тај ред.

Ако бисмо затим поново покренули пример кода, опсег на који би код утицао био би Ц5: Ц9, док би у првом случају то био Ц5: Ц8.

Табеле

У нашем коду можемо упутити табеле (кликните за више информација о креирању и руковању табелама у ВБА). Како се подаци табеле у Екцелу ажурирају или мењају, код који се односи на табелу ће се тада односити на ажуриране податке табеле. Ово је посебно корисно када се позивате на изведене табеле које су повезане са спољним извором података.

Користећи ову табелу у нашем коду, можемо се позивати на колоне табеле према насловима у свакој колони и извршавати радње на колони према њиховом имену. Како се редови у табели повећавају или смањују према подацима, опсег табеле ће се према томе прилагођавати и наш код ће и даље радити за целу колону у табели.

На пример:

123 Суб ДелетеТаблеЦолумн ()АцтивеВоркбоок.Ворксхеетс ("Схеет1"). ЛистОбјецтс ("Табле1"). ЛистЦолумнс ("Супплиер"). ДелетеЕнд Суб
wave wave wave wave wave