Овај водич ће објаснити шта значи грешка при аутоматизацији ВБА и како се јавља.
Екцел се састоји од објеката - објекта радне свеске, објекта радног листа, објекта опсега и објекта ћелије да назовемо само неколико. Сваки објекат има више својстава и метода чије се понашање може контролисати помоћу ВБА кода. Ако ВБА код није правилно програмиран, може доћи до грешке у аутоматизацији. То је једна од фрустрирајућих грешака у ВБА јер се често може појавити без очигледног разлога када ваш код изгледа савршено у реду!
(За више информација о ВБА грешкама погледајте наш Водич за руковање грешкама)
Позивајући се на променљиву која више није активна
До грешке при аутоматизацији може доћи када се позивате на радну свеску или радни лист преко променљиве, али она више није активна.
1234567891011 | Суб ТестАутоматион ()Дим стрФиле Ас СтрингДим вб Као радна свеска'отворите датотеку и подесите променљиву радне свескестрФиле = Апплицатион.ГетОпенФиленамеСет вб = Воркбоокс.Опен (стрФиле)„Затворите радну свескувб.Цлосе'покушајте да активирате радну свескувб.АцтиватеЕнд Суб |
Када покренемо горњи код, добићемо грешку аутоматизације. То је због чињенице да смо отворили радну свеску и тој радној свесци доделили променљиву. Затим смо затворили радну свеску, али у следећем реду кода покушавамо да активирамо затворену радну свеску. Ово ће узроковати грешку јер променљива више није активна.
Ако желимо да активирамо радну свеску, прво морамо да је отворимо!
Преоптерећење меморије
Ова грешка се понекад може појавити и ако имате петљу и заборавите да очистите објекат током петље. Међутим, то се може догодити само понекад, а не и други- што је један од разлога зашто ова грешка може бити толико неугодна.
Узмите на пример овај код испод:
1234567891011121314151617 | Суб ИнсертПицтуре ()Дим и Ас ИнтегерДим схп као објекатЗа и = 1 до 100Са радним листовима („Лист1“)'поставите променљиву објектаПодесите схп = .ОЛЕОбјецтс.Адд (ЦлассТипе: = "Формс.Имаге.1", Линк: = Фалсе, ДисплаиАсИцон: = Фалсе, Лево: =. Ћелије (и, "А"). Лево, Горе: =. Ћелије ( и, "А"). Врх, ширина: = 264, висина: = 124)ЗавршитиСа шп.Објецт.ПицтуреСизеМоде = 3'учитај слику.Објецт.Пицтуре = ЛоадПицтуре ("Ц: \ дата \ имаге" & и & ".јпг").Објецт.БордерСтиле = 0.Објецт.БацкСтиле = 0ЗавршитиЗатим самЕнд Суб |
Променљива је декларисана као Објецт, а затим КОМПЛЕТ кључна реч се користи за додељивање слике објекту. Објекат се затим попуњава сликом и убацује у Екцел лист са неким обликовањем које се одвија у исто време. Затим коду додајемо петљу за уметање 100 слика у Екцел листу. Повремено ово узрокује грешку у аутоматизацији, али понекад не - фрустрирајуће, зар не?
Решење овог проблема је брисање променљиве објекта унутар петље постављањем објекта на НИШТА - ово ће ослободити меморију и спречити грешку.
12345678910111213141516171819 | Суб ИнсертПицтуре ()Дим и Ас ИнтегерДим схп као објекатЗа и = 1 до 100Са радним листовима („Лист 1“)'поставите променљиву објектаПодесите схп = .ОЛЕОбјецтс.Адд (ЦлассТипе: = "Формс.Имаге.1", Линк: = Фалсе, ДисплаиАсИцон: = Фалсе, Лево: =. Ћелије (и, "А"). Лево, Горе: =. Ћелије ( и, "А"). Врх, ширина: = 264, висина: = 124)ЗавршитиСа шп.Објецт.ПицтуреСизеМоде = 3'учитај слику.Објецт.Пицтуре = ЛоадПицтуре ("Ц: \ дата \ имаге.јпг").Објецт.БордерСтиле = 0.Објецт.БацкСтиле = 0Завршити'обриши променљиву објектаСет схп = НиштаЗатим самЕнд Суб |
ДЛЛ грешке и ажурирање оперативног система Виндовс
Понекад се догоди грешка и ништа се не може учинити унутар ВБА кода. Поновна регистрација ДЛЛ-ова који се користе, пазећи да је наш Виндовс ажуриран и као крајње средство, покретање провере регистратора као понекад једино што може да помогне у уклањању ове грешке.
Добар начин да избегнете ову грешку је да се уверите да су замке грешака постављене помоћу Он Еррор Иди на или Он Еррор Настави даље рутине.