Водич и примери модула ВБА класе

Овај водич ће вас научити о модулима класе у ВБА. Научићете шта су они и како их користити.

Модули ВБА класе - Увод

Када уметнете модуле у Висуал Басиц Едитор (ВБЕ) да бисте унели свој код, можда сте приметили да можете уметнути и оно што се назива „Модул класе“.

Модули класе вс модули

Модули класе раде на веома различит начин од обичних модула тако што олакшавају креирање Цомпонент Објецт Модел (ЦОМ) који се затим може користити у вашем нормалном ВБА коду

У ствари, креирате објекат који функционише на исти начин као уграђени Екцел објекат, као што су „Радни листови“. У Објекту радних листова имате низ својстава и метода који вам омогућавају да унесете број радних листова у радну свеску или сваки појединачни назив радног листа или бројне друге информације

Када креирате нови Објект на овај начин, стварате грађевински блок који се може користити било где у ВБА. Објекат има низ својстава и метода којима ваш ВБА код може приступити са било ког места у радној свесци, а да не морате да га поново пишете.

Осим што се позивате на ваш нови објекат из стандардног ВБА модула, можете га користити и у коду иза УсерФорм -а који је део ваше прилагођене апликације

Можете га користити и тамо где сте поставили контроле Ацтиве Кс на радни лист, попут командног дугмета или падајућег менија. Све ове контроле користе ВБА, а ваш нови објект се лако може уградити у код догађаја за ове контроле.

Такође можете претворити свој објекат у додатак за Екцел. Ваш објекат ће аутоматски бити доступан другим корисницима који су учитали тај додатак. Ово додаје вашу властиту вишеслојну архитектуру у вашу Екцел апликацију

Екцел је вишеслојна апликација. Постоји слој услуга клијента који покреће стварни прозор радног листа који је кориснику познат. Екцел објектни модел је следећи слој испод. Притисните Ф2 у ВБА модулу и моћи ћете да видите огроман број објеката и чланова тих објеката који су мотор програма Екцел. Имајте на уму да ће ваш нови објекат такође бити приказан овде.

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

Креирање модула класе омогућава вам да проширите Екцел објектни модул властитим прилагођеним објектима и члановима

Овај чланак вам објашњава како да креирате једноставну хијерархију објеката помоћу модула класе.

Предности коришћења модула класе

  1. Можете развити робустан грађевински блок који се може користити у било којем броју различитих Екцел апликација
  2. Након што се темељно тестира, може се ослонити да ће увек дати тачне резултате на исти начин као и уграђени Екцел објекти
  3. Ако се ажурирају кодови на другом месту у апликацији, нови објекат ће и даље радити на исти начин
  4. Нови објект можете користити у другим Екцел апликацијама као додатак
  5. Објекти се могу поново користити у другим апликацијама и помажу у отклањању грешака

Недостаци коришћења модула класе

  1. Може их бити тешко створити и разумети.
  2. Конвенције именовања су веома важне јер ћете то видети када користите свој објекат у нормалном модулу.
  3. Ако раније нисте креирали модул класе, може их бити тешко разумети и постоји стрма крива учења
  4. Немогуће је извршити измене током извођења-морате поново поставити пројекат.
  5. Ако својства и приватне променљиве имају исти назив, може доћи до бесконачне петље која доводи до грешака

Уметање модула класе

Изаберите Уметни | Модул разреда из ВБЕ (Висуал Басиц Едитор) менија. Нови класни модул аутоматски ће се звати „класа 1“, али то треба одмах променити у име које ћете користити за свој објекат

Мењате име у прозору Својства где стрелица показује. Једноставно укуцате своје ново име и то ће се променити у колекцији Модули разреда

Ако прозор Пропертиес није видљив, изаберите Виев | Својства у ВБЕ менију или притисните Ф4

Позовите нови модул класе „МиИтем“ и кликните двапут на име у приказу стабла у Пројецт Екплореру да бисте приказали прозор кода за њега.

Креирање ставке објекта

Овај пример ће створити објекат највишег нивоа под називом „Моје ставке“ са чланом испод њега под називом „Моја ставка“ који ће садржати појединачне податке за сваку ставку. Када се једном створи, радиће на исти начин као и уграђени Екцел објекат. На пример, постоји објекат под називом „Радни листови“ који је збирка сваког радног листа у вашој радној свесци. Постоји и објекат под називом „Лист“ који представља сваки појединачни радни лист у вашој радној свесци и садржи сва својства и методе за сваки радни лист. Овај објекат се односи на објекат прикупљања „Радни листови“.

Можете понављати збирку „Радни листови“, прегледавајући сваки „Лист“ редом. На исти начин ћете моћи да се крећете кроз збирку „МиИтемс“ прегледавајући својства која сте креирали у члану „Миитем“.

Прво што треба да урадите је да креирате под-објекат за ниво члана који ће садржати стварне ставке у колекцији објекта највишег нивоа. Ово је еквивалент чланова (нпр. Име, видљиво, број) унутар објекта „Лист“ у Екцелу. Овај код се уноси у модул класе под називом „МиИтем“

Модули разреда имају својства и методе. Својства су ефективно попут променљивих, јер садрже вредности података као променљиве, а методе су попут потпрограма или функција.

У подобјекту ћемо створити два својства за објект - Итем и Детаил

У почетку је потребно прогласити две стринг променљиве да држе вредности за својства:

12 Приватни предмет као низПриватни мДетаил Ас Стринг

Они морају бити декларисани у одељку Декларације на врху кода за модул класе, тако да се могу користити у свим потпрограмима током читавог модула

Морају им дати јединствена имена како би се разликовали од својстава која ћемо створити, па је испред сваког имена стављено „м“ (за члана).

Променљиве су декларисане као приватне тако да их нико не може видети помоћу објекта. Они су радне променљиве за употребу унутар кода објекта и не постоје као део коначног објекта.

Следећи корак је подешавање кода за приступ два својства. То радите помоћу Проперти Лет и Проперти Гет извода за свако својство. Они морају бити јавни, иначе објект највишег нивоа неће имати видљива својства

123456789101112131415 Јавна својина Нека ставка (вдата као низ)мИтем = вдатаЕнд ПропертиЈавна својина Гет Итем () Ас СтрингСтавка = мИтемЕнд ПропертиЈавна својина нека се исцрта (вдата као низ)мДетаил = вдатаЕнд ПропертиЈавна својина Гет Детаил () Ас СтрингДетаљ = мДетаилЕнд Проперти

Овај код ствара средства за читање и писање вредности у два својства (Итем и Детаил) користећи две приватне променљиве које су дефинисане у одељку декларација модула.

Параметар „вдата“ се користи за прослеђивање података дотичној некретнини.

Важно је да свако својство има изјаве „Лет“ и „Гет“ и да је име својства у сваком случају исто. Ако сте погрешно написали, могли бисте имати два различита својства - једно из којег можете читати и једно у које можете писати!

Да бисте помогли при креирању овог кода, можете користити Инсерт | Поступак у ВБЕ менију за креирање скелета кода који ће креирати почетни код за својства „Гет“ и „Лет“ за дато име својства

Ово ће приказати искачући прозор у који уписујете име својства и на радио дугмадима изаберите „Својство“:

Кликните на „У реду“ и костур скелета ће бити додат у модул класе:

1234567 Јавна својина Набавите МиПроперти () као варијантуЕнд ПропертиЈавна својина Нека МиПроперти (БиВал вНевВалуе као варијанта)Енд Проперти

Ово спречава грешке у називима својстава. Једноставно додајте свој код између изјава „Јавна својина“ и „Крај својине“.

Сада имате објекат под називом „МиИтем“ који ће садржати све податке за ову вежбу.

Уморни сте од тражења примера ВБА кода? Испробајте АутоМацро!

Креирање колекције

Следећа фаза је креирање објекта највишег нивоа као објекта колекције за приступ својствима која сте поставили у објекту „МиИтем“

Опет, морате да дефинишете радни објекат који ће деловати као објекат колекције на исти начин на који сте дефинисали две променљиве низа у објекту „МиИтем“.

1 Приватне ставке као збирка

Опет, ово мора имати јединствено име, због чега се испред имена налази 'м' (објект члан), а такође је декларисано и као 'Приватно', тако да се не појављује приликом постављања новог објекта коришћен

Затим морате попунити код Цласс_Инитиализе. Ово се покреће када први пут користите објект унутар кода и одређује које ће се вредности учитати у објект

Овој потпрограми можете приступити одабиром „Класа“ у првом падајућем менију и „Иницијализација“ у другом падајућем менију прозора модула

12345678910 Приватна подкласа_Инитиализе ()Дим објекат као МиИтемСет мИтемс = Нова колекцијаЗа н = 1 до 3Постави објИтем = Нова МиИтемобјИтем.Итем = Радни листови ("Лист1"). Распон ("а" & н). ВредностобјИтем.Детаил = Радни листови ("Схеет1"). Распон ("б" & н) .ВредностмИтемс.Адд објИтемНект нЕнд Суб

Код поставља објекат под називом „објИтем“ користећи дефиницију „МиИтем“ коју смо раније изградили као модул класе.

Затим креира нову колекцију засновану на раније дефинисаном објекту „мИтемс“

Он понавља вредности које се налазе на Схеет1 радне свеске и ставља их у својства која смо креирали за објекат „МиИтем“. Имајте на уму да када користите „објитем“, појављује се падајући мени који приказује две особине, баш као да користите уграђени Екцел објекат.

Објекат ставке се затим додаје у објекат збирке који сада садржи све податке у вредностима својстава.

Улазни подаци не морају бити узети са радног листа. То могу бити статичке вредности, или могу доћи из везе са базом података као што је Мицрософт Аццесс или СКЛ Сервер, или могу доћи из другог радног листа.

Затим морате да додате јавну функцију под називом „Ставка“

123 Ставка јавне функције (индекс као цео број) Као МиИтемСет Итем = мИтемс.Итем (индекс)Завршна функција

Ово вам омогућава да се позивате на појединачне објекте унутар објекта колекције према њиховом индексном броју. Ова функција пружа „огледало“ онога што се дешава у збирци „мМиИтемс“ у позадини.

Такође ћете морати да додате својство под називом „Цоунт“ како би ваш код могао да установи колико објеката „МиИтем“ има у колекцији „МиИтемс“, ако желите да прођете кроз њега.

123 Јавна својина Гет Цоунт () Ас ЛонгЦоунт = мИтемс.ЦоунтЕнд Проперти

У овом случају вам је потребно само својство „Гет“ јер је само за читање. Користи збирку мИтемс јер ово већ има својство цоунт уграђено у њу.

Сада имате објекат (МиИтемс) са потпуном хијерархијом дефинисаном објектом „МиИтем“

Да би цела ствар успела, сада морате да попуните радни лист (Схеет1) подацима тако да рутина Инитиализе Цласс може да прикупи ово у објекат

Табела би требало да изгледа овако:

Коришћење вашег новог објекта

Сада можете користити објекат Збирка (Моје ставке) у оквиру стандардног Екцел ВБА модула. Унесите следећи код:

12345678 Суб тест_објецт ()Затамни МиЦласс као нове ставке, н као цео бројМсгБок МиЦласс.ЦоунтЗа н = 1 За МиЦласс.ЦоунтМсгБок МиЦласс.Итем (н) .ИтемМсгБок МиЦласс.Итем (н) .ДетаилНект нЕнд Суб

Овај код ствара објекат под називом „МиЦласс“ на основу објекта колекције који сте креирали под називом „МиИтемс“. Ово покреће рутину „Инитиализе“ која екстрахује све податке са радног листа у објекат.

Приказује број ставки у збирци, а затим се понавља кроз збирку приказујући текст „Ставка“ и „Детаљи“. Приметићете да ћете, када позовете објекат „МиЦласс“ у свом коду, видети списак два својства члана који помажу у додавању исправног својства.

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

Ако уместо речи „Дим“ користите реч „Статично“, рутина иницијализације се не покреће и старе вредности се чувају, све док се код непрекидно изводи. Ако се подаци у табели промене, то се неће одразити на објекту

1234567 Суб Тест_Статиц ()Статичка микласа као нове ставке, н као цео бројЗа н = 1 За Мицласс.ЦоунтМсгБок Мицласс.Итем (н) .ИтемМсгБок Мицласс.Итем (н) .ДетаилНект нЕнд Суб

Сажетак стварања објекта помоћу модула класе

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

Међутим, он има огромне предности што ваш код чини елегантнијим и лакшим за читање. Такође је лакше делити са другим Екцел апликацијама и програмерима претварањем у додатак.

У овом примеру како створити објекат за чување података, био би нормалан приступ стварању вишедимензионалног низа за чување података табеле са више колона, а ви бисте написали ред кода за ажурирање или читање сваког елемента у низ. Ово би вероватно завршило прилично неуредно и лако би се могле направити грешке у адресирању различитих елемената.

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

Такође, ако се подаци промене у прорачунској табели (или у повезаној бази података ако сте ово користили као извор података у модулу класе) кад год користите израз 'Дим', позваће се иницијализација и подаци ће се одмах ажурирати . Нема потребе за писањем кода за поновно попуњавање низа.

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

Када пишете ВБА код, користите променљиве свуда, све са различитим опсезима. Неке се могу дефинисати само за одређену процедуру, неке за одређени модул, а неке могу бити глобалне променљиве које се могу користити у целој апликацији

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

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

Да бисте креирали спремиште, морате уметнути нови модул класе. То радите помоћу Инсерт | Модул класе из менија ВБ Едитор

Промените назив у „Моје променљиве“ користећи исту методологију као што је претходно објашњено у овом чланку.

Унесите следећи код:

12345678910111213141516 Приватно мВ као варијантаЈавна својина Набавите променљиву1 () као варијантуВаријабла1 = мВЕнд ПропертиЈавна својина дозволи променљиву1 (БиВал вНевВалуе као варијанту)мВ = вНова вредностЕнд ПропертиЈавно својство Набавите променљиву2 () као варијантуВаријабла1 = мВЕнд ПропертиЈавна својина дозволи променљиву2 (БиВал вНевВалуе као варијанту)мВ = вНова вредностЕнд Проперти

Овај код поставља својства „Лет“ и „Гет“ за две променљиве („Вариабле1“ и „Вариабле2“). Својства Лет анд Гет су потребна за сваку вашу променљиву тако да се могу читати / писати

Можете користити своја имена за променљиве уместо узорака у овом коду, а можете додати и друге променљиве, водећи рачуна да свака нова променљива има наредбе „Лет“ и „Гет“.

Приватна декларација променљиве „мВ“ је стварање радне променљиве која се користи само у модулу класе за пренос вредности.

Да бисте користили спремиште променљивих, унесите следећи код у стандардни модул:

123456 Глобал ВарРепо као нове МиВариаблесПод ТестВариаблеРепоситори ()МсгБок ВарРепо.Вариабле1ВарРепо.Вариабле1 = 10МсгБок ВарРепо.Вариабле1Енд Суб

Овај код ствара глобалну инстанцу вашег објекта „МиВариаблес“ који сте креирали. Ову декларацију морате да урадите само једном са било ког места у свом коду.

Код прво приказује вредност „Варијабле1“ како би показао да је празна.

„Вариабле1“ је додељена вредност 10, а затим се приказује нова вредност унутар објекта како би се показало да ово својство сада има ову вредност.

Пошто је инстанца објекта „МиВариаблес“ дефинисана глобално, можете се позвати на било коју од дефинисаних променљивих унутар објекта са било ког места у вашем коду.

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

Претварање вашег објекта у додатак

До сада је код за креирање објекта у вашој апликацији радне свеске. Међутим, ако желите да можете да делите свој објекат са другим програмерима или у другим Екцел апликацијама, можете га претворити у додатак

Да бисте то урадили, све што је потребно је да сачувате датотеку као додатак. Изаберите Датотека | Сачувај као и појавиће се прозор прегледача

Изаберите тип датотеке као додатак (.клам) из падајућег типа датотеке и кликните на дугме У реду. Датотека ће подразумевано бити сачувана у фасцикли Адд-Ин, али можете променити локацију.

Затим можете да уградите додатну датотеку у своје Екцел апликације, дајући вам флексибилност у коришћењу вашег новог објекта

Да бисте додали свој нови додатак у Екцел, кликните на Датотека на Екцел траци, а затим на Опције при дну левог окна

Кликните на „Додаци“ у левом окну у искачућем прозору који се појави. При дну прозора налази се дугме са ознаком „Иди“

Кликните на ово и појавиће се искачући прозор „Додатак“. Кликните на „Прегледај“, а затим пронађите датотеку додатка. Тада ћете моћи да се позивате на свој објекат у свом коду.

Ви ће помоћи развој сајта, дељење страницу са пријатељима

wave wave wave wave wave