Excel VBA makro rediģēšana

Darbs ar Excel VBA makro

Makro programmā Excel tiek saglabāti kā VBA kods, un dažreiz šo kodu vēlaties rediģēt tieši. Šajā apmācībā tiks apskatīts, kā skatīt un rediģēt makro, aprakstītas dažas makro atkļūdošanas metodes un sniegti daži izplatīti rediģēšanas piemēri.

Skatīt makro

Makro sarakstu var parādīt dialoglodziņā Makro. Lai skatītu šo dialoglodziņu, lentē atlasiet cilni Izstrādātājs un noklikšķiniet uz pogas Makro.

Ja ir atvērtas vairākas darbgrāmatas, sarakstā tiks parādīti visu darbgrāmatu makro. Makro aktīvajā darbgrāmatā tiks parādīts tikai pēc nosaukuma, savukārt citu darbgrāmatu makro priekšā būs darbgrāmatas nosaukums un izsaukuma zīme (piemēram, “Grāmata2! CitsMakro”).

Atveriet rediģēšanas makro

Lai atvērtu makro kodu, varat izmantot dialoglodziņu Makro, atlasot makro nosaukumu un noklikšķinot uz pogas Rediģēt. Tas atvērs makro VB redaktorā.

Varat arī atvērt VB redaktoru, cilnē Izstrādātājs noklikšķinot uz pogas Visual Basic vai nospiežot īsinājumtaustiņu ALT+F11.

Izmantojot šo metodi, jums būs jāpārvietojas uz vēlamo makro (to sauc arī par “procedūru”). Mēs apskatīsim VBA redaktora izkārtojumu:

Pārskats par VB redaktoru

VB redaktoram ir vairāki logi; šajā apmācībā mēs apskatīsim projekta logu, rekvizītu logu un koda logu.

Projekta logs

Projekta logā katrs Excel fails tiek parādīts kā savs projekts, un visi šī projekta objekti ir sakārtoti pēc veida. Ierakstītie makro tiks parādīti kategorijā “Moduļi”, parasti objektā “Module1”. (Ja jūsu projektam ir vairāki moduļi un neesat pārliecināts, kur ir saglabāts jūsu makro, vienkārši atveriet to no iepriekš minētā makro dialoglodziņa.)

Rekvizītu logs

Rekvizītu logs parāda objekta rekvizītus un saistītās vērtības - piemēram, projekta logā noklikšķinot uz darblapas objekta, tiks parādīts darblapas rekvizītu saraksts. Īpašumu nosaukumi ir kreisajā pusē, un īpašuma vērtības ir labajā pusē.

Atlasot moduli projekta logā, tiks parādīts, ka tam ir tikai viens rekvizīts “(nosaukums)”. Jūs varat mainīt moduļa nosaukumu, veicot dubultklikšķi uz rekvizīta vērtības, ierakstot jaunu nosaukumu un nospiežot Enter. Mainot moduļa nosaukumu, tas tiks pārdēvēts projekta logā, kas ir noderīgi, ja jums ir daudz moduļu.

Koda logi

Koda logi ir īpaši teksta redaktori, kuros varat rediģēt makro VBA kodu. Ja vēlaties redzēt makro kodu, kas atrodas 1. modulī, projekta logā veiciet dubultklikšķi uz “Module1”.

Makro palaišana VB redaktorā

Makro var palaist tieši no VB redaktora, kas ir noderīgi testēšanai un atkļūdošanai.

Makro vadīšana

  • Projekta logā veiciet dubultklikšķi uz moduļa, kurā ir makro, kuru vēlaties pārbaudīt (lai atvērtu tā koda logu)
  • Logā Kods novietojiet kursoru jebkurā makro koda vietā starp “Sub” un “End Sub”
  • Noklikšķiniet uz Skrien pogu rīkjoslā vai nospiediet īsinājumtaustiņu F5

Makro “Step-Through”

Tā vietā, lai makro palaistu visu uzreiz, makro var palaist pa vienai rindai, izmantojot īsinājumtaustiņu, lai “izietu” caur kodu. Makro tiks apturēts katrā rindā, ļaujot jums nodrošināt, ka katra koda rinda atbilst gaidītajam programmā Excel. Varat arī pārtraukt makro turpināšanu jebkurā laikā, izmantojot šo metodi.

Lai “izietu cauri” makro, veiciet tālāk norādītās darbības.

  • Projekta logā veiciet dubultklikšķi uz moduļa, kurā ir makro, kuru vēlaties pārbaudīt (lai atvērtu tā koda logu)
  • Logā Kods novietojiet kursoru jebkurā makro koda vietā
  • Nospiediet īsinājumtaustiņu F8, lai sāktu pakāpenisko procesu
  • Atkārtoti nospiediet F8, lai turpinātu koda izpildi, ko norāda dzeltenais izcēlums koda logā
  • Lai pārtrauktu makro turpināšanu, nospiediet Atiestatīt pogu

Kāpēc rediģēt VBA makro?

Makro ierakstītājs - lai arī tas ir efektīvs - ir arī ļoti ierobežots. Dažos gadījumos tas rada lēnus makro, reģistrē darbības, kuras neplānojāt atkārtot, vai ieraksta lietas, kuras, jūsuprāt, nedarījāt. Mācīšanās rediģēt makro palīdzēs tiem darboties ātrāk, efektīvāk un paredzamāk.

Papildus šo problēmu novēršanai jūs arī iegūsit milzīgu produktivitātes pieaugumu, izmantojot visas makro iespējas. Makro nav tikai jābūt uzdevumu ierakstiem - makro var ietvert loģiku, tāpēc tie veic uzdevumus tikai noteiktos apstākļos. Tikai dažu minūšu laikā jūs varat kodēt cilpas, kas vienā piegājienā atkārto uzdevumu simtiem vai tūkstošiem reižu!

Zemāk atradīsit dažus noderīgus padomus, kas palīdzēs optimizēt makro kodu, kā arī rīkus, kas ļaus makro darboties grūtāk un gudrāk.

Populārākie makro rediģēšanas piemēri

Paātrināt makro

Ja jums ir makro, kas darbojas ilgu laiku, tam var būt daži iemesli, kāpēc tas darbojas lēni.

Viens: kad darbojas makro, programma Excel parādīs visu, kā tas notiek reāllaikā - lai gan tas var notikt Skaties ātri jums, patiesībārāda darbs ir nozīmīgs izpildījuma trāpījums. Viens veids, kā padarīt Excel darbību ievērojami ātrāku, ir to pateikt pārtraukt ekrāna atjaunināšanu:

'Disable Screen Updating Application.ScreenUpdating = False' Iespējot ekrāna atjaunināšanas lietojumprogrammu. ScreenUpdating = True

Rinda “Application.ScreenUpdating = False” nozīmē, ka makro nedarbosies, taču tas darbosies daudz ātrāk. Ņemiet vērā, ka makro beigās vienmēr ir jāiestata ScreenUpdating uz True, pretējā gadījumā Excel var nedarboties tā, kā jūs gaidāt vēlāk!

Vēl viens veids, kā paātrināt makro:izslēdziet automātisko aprēķinu makro. Ja esat strādājis ar sarežģītām izklājlapām, jūs zināt, ka nelielas izmaiņas var izraisīt tūkstošiem aprēķinu, kuru pabeigšana prasa laiku, tāpēc daudzi cilvēki Excel opcijās izslēdz automātisko aprēķinu. Varat arī to pārslēgt ar VBA kodu, lai jūsu makro joprojām ātri darbotos citos datoros. Tas palīdz gadījumos, kad kopējat un ielīmējat daudz formulu šūnu vai liekat veikt daudzus aprēķinus, ielīmējot datus diapazonā:

"Atspējot automātisko aprēķinu lietojumprogrammu. Aprēķins = xlCalculationManual" Iespējot automātisko aprēķinu lietojumprogrammu. Aprēķins = xlCalculationAutomatic

Pievienojiet cilpas un loģiku (ja paziņojumi)

Makro ierakstītājs visas jūsu darbības saglabā kā kodu valodā, ko sauc par VBA. VBA ir vairāk nekā tikai veids, kā ierakstīt darbības programmā Excel - tā ir programmēšanas valoda, kas nozīmē, ka tā var saturēt kodu, lai pieņemtu lēmumus par veicamajām darbībām, vai atkārtot darbības, līdz tiek izpildīts nosacījums.

Cilpa

Pieņemsim, ka vēlaties izveidot makro, kas sagatavotu pārskatu, un šī makro ietvaros darbgrāmatai bija jāpievieno deviņpadsmit lapas, kopā divdesmit. Jūs varētu ierakstīt sevi, noklikšķinot uz pogas (+), vai rakstīt cilpu, kas atkārto darbību jūsu vietā, piemēram:

Sub ReportPrep () Dim i As Long for i = 1 to 19 Sheets. Pievienot Next i End Sub

Šajā piemērā mēs izmantojam a Cilpai, kas ir sava veida cilpa, kas atkārtojas, izmantojot virkni vienumu. Šeit mūsu diapazons ir skaitļi no 1 līdz 19, izmantojot mainīgo ar nosaukumu “i”, lai cilpa varētu izsekot. Mūsu cilpas iekšienē starp darbību tiek atkārtota tikai viena darbība priekš unNākamais rindas (lapas pievienošana), bet cilpai var pievienot tik daudz koda, cik vēlaties, piemēram, formatēt lapu vai kopēt un ielīmēt datus katrā lapā - neatkarīgi no tā, ko vēlaties atkārtot.

Ja paziņojumi

An Ja paziņojums tiek izmantots, lai izlemtu, vai kāds kods darbojas vai nē, izmantojot loģisku testu, lai pieņemtu lēmumu. Šeit ir vienkāršs piemērs:

Sub ClearIfSmall () If Selection.Value <100, tad Selection. Notīrīt beigas, ja beigas Sub

Šis vienkāršais piemērs parāda, kā darbojas paziņojums If - jūs pārbaudāt kādu nosacījumu, kas ir patiess vai nepatiess (vai atlasītās šūnas vērtība ir mazāka par 100?), un, ja tests atgriež True, tiek palaists kods.

Šī koda trūkums ir tāds, ka tas vienlaikus pārbauda tikai vienu šūnu (un neizdotos, ja atlasītu vairākas šūnas). Tas būtu noderīgāk, ja jūs varētu… izlaist cauri katru izvēlēto šūnu un pārbaudīt katru …

Sub ClearIfSmall () Dim c Kā diapazons katram c atlasē. Šūnas Ja c. Vērtība <100, tad c. Notīriet beigas, ja nākamā

Šajā piemērā ir nedaudz atšķirīga cilpa For - šī cilpa nepārslēdz skaitļu diapazonu, bet gan cilpa cauri visām atlases šūnām, lai izsekotu, izmantojot mainīgo ar nosaukumu “c”. Cilpas iekšpusē tiek izmantota “c” vērtība, lai noteiktu, vai šūna ir jātīra vai nē.

Cilpas un Ja paziņojumus var apvienot jebkurā jums patīkamā veidā - varat ievietot cilpas cilpu iekšpusē vai vienu Ja citā, vai arī izmantot If, lai izlemtu, vai cilpa vispār jāpalaiž.

<<>>

Noņemt ritināšanas efektus

Bieži iemesls makro koda rediģēšanai ir ekrāna ritināšanas noņemšana. Ierakstot makro, iespējams, jums būs jāsasniedz citi darblapas apgabali, ritinot, bet makro nav nepieciešams ritināt, lai piekļūtu datiem.

Ritināšana var pārblīvēt jūsu kodu ar simtiem vai pat tūkstošiem nevajadzīga koda rindu. Šeit ir koda piemērs, kas tiek ierakstīts, noklikšķinot un velkot ritjoslu:

Šāda veida kods ir pilnīgi nevajadzīgs, un to var izdzēst, neietekmējot citas funkcijas. Pat ja vēlaties saglabāt ritināšanu, šo kodu joprojām var saīsināt.

Noņemiet lieko kodu

Reģistrētie makro parasti pievieno daudz lieku kodu, kas ne vienmēr atspoguļo to, ko vēlaties makro. Piemēram, ņemiet vērā šādu ierakstīto kodu, kas ieraksta fonta nosaukuma maiņu šūnā:

Lai gan tika mainīts tikai fonta nosaukums, tika reģistrētas vienpadsmit (11) fonta izmaiņas, piemēram, fonta lielums, teksta efekti utt. Ja makro mērķis bija mainīt tikai fonta nosaukumu (vienlaikus atstājot visus pārējos rekvizītus), ierakstītais makro nedarbosies!

Šo makro ir iespējams mainīt tā, lai tas mainītu tikai fonta nosaukumu:

Šis makro ne tikai darbosies, kā paredzēts tagad, bet arī daudz vieglāk lasāms.

Noņemt kursora kustības

Vēl viena lieta, kas tiek ierakstīta makro, ir darblapu un šūnu atlase. Šī ir problēma, jo lietotājs var viegli zaudēt ieskatu par to, ar ko viņš tikko strādāja, ja kursors pēc makro izpildes pārvietojas citā pozīcijā.

Tāpat kā ritinot, jūs var būt nepieciešams pārvietot kursoru un atlasīt dažādas šūnas, lai veiktu uzdevumu, bet makro nav jāizmanto kursors, lai piekļūtu datiem. Apsveriet šādu kodu, kas kopē diapazonu un pēc tam ielīmē to trīs citās lapās:

Ar šo kodu ir dažas problēmas:

  • Lietotājs zaudēs savu iepriekšējo vietu darbgrāmatā
  • Makro nenosaka, kuru lapu mēs kopējamno - tā varētu būt problēma, ja makro tiktu palaists nepareizā lapā

Turklāt kods ir grūti lasāms un izšķērdīgs. Šos jautājumus var atrisināt pietiekami vienkārši:

Šajā kodā ir skaidri redzams, ka mēs kopējam no 1. lapas, un, lai ielīmētu datus, nav jāmaina ne aktīvā darblapa, ne atlasītais diapazons. (Viena būtiska izmaiņa ir “PasteSpecial” izmantošana “Paste” vietā - diapazona objektiem, piemēram, “Range (“ C4 ″ ”), ir piekļuve tikai PasteSpecial komandai.)

Ikreiz, kad kods kļūst pilns ar atsaucēm uz “.Select” un “Selection”, tas liecina, ka ir iespējams šo kodu optimizēt un padarīt efektīvāku.

wave wave wave wave wave