Darbas su „Excel VBA“ makrokomandomis
„Excel“ makrokomandos saugomos kaip VBA kodas, o kartais norėsite šį kodą redaguoti tiesiogiai. Šioje pamokoje bus aprašyta, kaip peržiūrėti ir redaguoti makrokomandas, aprašyti kai kurie makrokomandų derinimo būdai ir pateikti bendri redagavimo pavyzdžiai.
Peržiūrėti makrokomandas
Makrokomandų sąrašas gali būti rodomas dialogo lange Makrokomandos. Norėdami peržiūrėti šį dialogo langą, juostelėje pasirinkite skirtuką Kūrėjas ir spustelėkite mygtuką Makrokomandos.
Jei atidarytos kelios darbaknygės, visų darbaknygių makrokomandos bus rodomos sąraše. Aktyvios darbaknygės makrokomandos bus rodomos tik pagal pavadinimą, o kitų darbaknygių makrokomandų priešdėlis - darbaknygės pavadinimas ir šauktukas (t. Y. „Book2! OtherMacro“).
Atidarykite makrokomandą redagavimui
Makrokomandos dialogo lange galite atidaryti makrokomandos kodą, pasirinkę makrokomandos pavadinimą ir spustelėję mygtuką Redaguoti. Tai atidarys makrokomandą VB redaktoriuje.
Arba galite atidaryti VB redaktorių tiesiogiai spustelėdami mygtuką „Visual Basic“ skirtuke „Kūrėjas“ arba paspausdami ALT+F11 spartųjį klavišą.
Naudodami šį metodą turėsite pereiti prie norimos makrokomandos (dar vadinamos „procedūra“). Apžvelgsime VBA redaktoriaus išdėstymą:
VB redaktoriaus apžvalga
VB redaktorius turi kelis langus; šioje pamokoje apimsime projekto langą, ypatybių langą ir kodo langą.
Projekto langas
Projekto lange kiekvienas „Excel“ failas rodomas kaip atskiras projektas, o visi to projekto objektai suskirstyti pagal tipą. Įrašytos makrokomandos bus rodomos kategorijoje „Moduliai“, paprastai objekte „Modulis1“. (Jei jūsų projektas turi kelis modulius ir nesate tikri, kur saugoma jūsų makrokomanda, tiesiog atidarykite jį iš minėto makrokomandų dialogo lango.)
Ypatybių langas
Ypatybių lange rodomos objekto savybės ir susijusios vertės - pavyzdžiui, projekto lange spustelėjus darbalapio objektą, bus rodomas darbalapio ypatybių sąrašas. Nuosavybės pavadinimai yra kairėje, o nuosavybės vertės - dešinėje.
Pasirinkus modulį projekto lange bus parodyta, kad jis turi tik vieną ypatybę „(pavadinimas)“. Modulio pavadinimą galite pakeisti dukart spustelėdami nuosavybės vertę, įvesdami naują pavadinimą ir paspausdami „Enter“. Pakeitus modulio pavadinimą, jis bus pervadintas projekto lange, o tai naudinga, jei turite daug modulių.
Kodo langai
Kodo langai yra specialūs teksto redaktoriai, kuriuose galite redaguoti makrokomandos VBA kodą. Jei norite matyti „Module1“ esančios makrokomandos kodą, projekto lange dukart spustelėkite „Modulis1“.
Vykdyti makrokomandas VB redaktoriuje
Makrokomandas galima paleisti tiesiai iš VB redaktoriaus, kuris yra naudingas bandymams ir derinimui.
Makrokomandos paleidimas
- Projekto lange dukart spustelėkite modulį, kuriame yra makro, kurį norite išbandyti (norėdami atidaryti jo kodo langą)
- Lange Kodas padėkite žymeklį bet kurioje makrokomandos kodo vietoje tarp „Sub“ ir „End Sub“
- Spustelėkite Bėgti mygtuką įrankių juostoje arba paspauskite spartųjį klavišą F5
Makrokomanda „žingsnis po žingsnio“
Užuot paleidę makrokomandą vienu metu, galite paleisti makrokomandą po vieną eilutę, naudodami spartųjį klavišą, kad „pereitumėte“ kodą. Makrokomandos bus pristabdytos kiekvienoje eilutėje, todėl galėsite užtikrinti, kad kiekviena kodo eilutė atliktų tai, ko tikitės „Excel“. Taip pat galite bet kuriuo metu sustabdyti makrokomandos tęsimą naudodami šį metodą.
Norėdami „pereiti“ makrokomandą, atlikite toliau nurodytus veiksmus.
- Projekto lange dukart spustelėkite modulį, kuriame yra makro, kurį norite išbandyti (norėdami atidaryti jo kodo langą)
- Kodo lange žymeklį padėkite bet kurioje makrokomandos kodo vietoje
- Paspauskite spartųjį klavišą F8, kad pradėtumėte „žingsnis po žingsnio“ procesą
- Pakartotinai paspauskite F8, kad pakeistumėte kodo vykdymą, kurį rodo geltonas paryškinimas kodo lange
- Norėdami sustabdyti makrokomandos tęsimą, paspauskite Iš naujo nustatyti mygtuką
Kodėl redaguoti VBA makrokomandas?
Makro įrašymo įrenginys, nors ir veiksmingas, taip pat yra labai ribotas. Kai kuriais atvejais jis sukuria lėtas makrokomandas, įrašo veiksmus, kurių neketinote pakartoti, arba įrašo dalykus, kurių, jūsų manymu, nedarėte. Išmokę redaguoti makrokomandas, jie veiks greičiau, efektyviau ir nuspėjamiau.
Be to, kad išspręstumėte šias problemas, padidinsite našumą, kai panaudosite visas makrokomandas. Makrokomandos neturi būti tik užduočių įrašai - makrokomandos gali apimti logiką, todėl jos užduotis atlieka tik tam tikromis sąlygomis. Vos per kelias minutes galite koduoti ciklus, kurie vienu metu šimtus ar tūkstančius kartų pakartoja užduotį!
Žemiau rasite keletą naudingų patarimų, kurie padės optimizuoti makrokomandos kodą, taip pat įrankių, kurie padės makrokomandoms dirbti sunkiau ir protingiau.
Įprasti makrokomandų redagavimo pavyzdžiai
Paspartinkite makrokomandas
Jei turite makrokomandą, kuri paleidžiama ilgai, gali būti keletas priežasčių, kodėl ji veikia lėtai.
Viena: kai vykdoma makrokomanda, „Excel“ viską parodys taip, kaip tai vyksta realiuoju laiku, nors gali žiūrėk greitai tau, tiesą sakantrodydamas darbas yra reikšmingas atlikimo hitas. Vienas iš būdų, kaip „Excel“ veikti žymiai greičiau, yra tai pasakyti nustoti atnaujinti ekraną:
"Išjungti ekrano atnaujinimo programą. ScreenUpdating = False" Įgalinti ekrano atnaujinimo programą. ScreenUpdating = Tiesa
Eilutė „Application.ScreenUpdating = False“ reiškia, kad nematysite makrokomandos veikiančios, tačiau ji veiks daug greičiau. Atminkite, kad makrokomandos pabaigoje visada turėtumėte nustatyti „ScreenUpdating“ į „True“, kitaip „Excel“ gali veikti ne taip, kaip tikitės vėliau!
Kitas būdas pagreitinti makrokomandas:išjungti automatinį skaičiavimą makrokomandoje. Jei dirbote su sudėtingomis skaičiuoklėmis, žinosite, kad nedideli pakeitimai gali paskatinti tūkstančius skaičiavimų, kuriems atlikti reikia laiko, todėl daugelis žmonių „Excel“ parinktyse išjungia automatinį skaičiavimą. Taip pat galite tai perjungti naudodami VBA kodą, kad jūsų makrokomanda vis tiek greitai veiktų kituose kompiuteriuose. Tai padeda tais atvejais, kai kopijuojate ir įklijuojate daug formulės langelių arba kai įvedant duomenis į diapazoną ima veikti daug skaičiavimų:
"Išjungti automatinio skaičiavimo programą. Skaičiavimas = xlCalculationManual" Įgalinti automatinio skaičiavimo programą. Skaičiavimas = xl
Pridėti kilpų ir logikos (jei teiginiai)
Makro įrašymo įrenginys išsaugo visus jūsų veiksmus kaip kodą kalba, vadinama VBA. VBA yra daugiau nei tik būdas įrašyti veiksmus „Excel“ - tai programavimo kalba, o tai reiškia, kad joje gali būti kodo, kad būtų galima nuspręsti, kokius veiksmus atlikti, arba kartoti veiksmus, kol įvykdoma sąlyga.
Kilpos
Tarkime, kad norite sukurti makrokomandą, kuri parengė ataskaitą, ir kaip šios makrokomandos dalį prie darbo knygos turėjote pridėti devyniolika lapų, iš viso dvidešimt. Galite įrašyti save vėl ir vėl spustelėdami mygtuką (+), arba galite parašyti ciklą, kuris jums kartotų veiksmą, kaip šis:
Sub ReportPrep () Dim i As Long For i = 1 to 19 Sheets. Add Next i End Sub
Šiame pavyzdyje mes naudojame a Dėl kilpos, kuri yra tam tikra kilpa, kartojanti įvairius elementus. Čia mūsų diapazonas yra skaičiai nuo 1 iki 19, naudojant kintamąjį pavadinimu „i“, kad ciklas galėtų sekti. Mūsų ciklo viduje yra tik vienas veiksmas, kartojamas tarp dėl irKitas eilutes (lapas pridedamas), bet ciklo viduje galite pridėti tiek kodo, kiek norite, pavyzdžiui, formatuoti lapą, arba nukopijuoti ir įklijuoti duomenis į kiekvieną lapą - ką norite pakartoti.
Jei teiginiai
An Jei pareiškimas naudojamas sprendžiant, ar koks nors kodas paleidžiamas, ar ne, naudojant loginį testą sprendimui priimti. Štai paprastas pavyzdys:
Sub ClearIfSmall () If Selection.Value <100 then Selection.Clear End If End Sub
Šis paprastas pavyzdys parodo, kaip veikia teiginys „If“ - išbandote tam tikrą sąlygą, kuri yra teisinga arba klaidinga (ar pasirinktos langelio vertė yra mažesnė nei 100?), o jei bandymas grąžina „True“, kodas veikia.
Šio kodo trūkumas yra tas, kad vienu metu jis testuoja tik vieną langelį (ir nepavyks, jei pasirinksite kelis langelius). Tai būtų naudingiau, jei galėtumėte … peržiūrėti kiekvieną pasirinktą langelį ir išbandyti kiekvieną …
Sub ClearIfSmall () Dim c Kaip diapazonas kiekvienam pasirinktam c. Ląstelės Jei c.Value <100, tada c. Išvalyti pabaigą, jei kitas c Pabaiga
Šiame pavyzdyje yra šiek tiek kitoks ciklas „For“ - šis neperjungia skaičių diapazono, bet perkelia visas atrankos langelius, naudodamas kintamąjį pavadinimu „c“. Ciklo viduje „c“ reikšmė naudojama norint nustatyti, ar langelį reikia išvalyti, ar ne.
Kilpai ir „If“ teiginiai gali būti derinami bet kokiu jums patogiu būdu - galite įdėti kilpas į kilpų vidų arba vieną „If“ į kitą arba naudoti „If“, kad nuspręstumėte, ar ciklas apskritai turėtų veikti.
<<>>
Pašalinkite slinkties efektus
Dažna makrokomandos redagavimo priežastis yra ekrano slinkimo pašalinimas. Įrašant makrokomandą, slinkdami gali tekti pasiekti kitas darbalapio sritis, tačiau norint pasiekti duomenis, makrokomandų slinkti nereikia.
Slinkimas gali apkrauti jūsų kodą šimtais ar net tūkstančiais nereikalingo kodo eilučių. Štai kodo, kuris įrašomas, kai spustelite ir vilkite slinkties juostą, pavyzdys:
Toks kodas yra visiškai nereikalingas ir gali būti ištrintas nepažeidžiant jokių kitų funkcijų. Net jei norite išlaikyti slinkimą, šis kodas vis tiek gali būti sutrauktas į kilpą.
Pašalinkite nereikalingą kodą
Įrašytos makrokomandos paprastai prideda daug nereikalingo kodo, kuris nebūtinai atspindi tai, ką norite atlikti. Paimkite, pavyzdžiui, šį įrašytą kodą, kuris įrašo langelio šrifto pavadinimo keitimą:
Nors buvo pakeistas tik šrifto pavadinimas, buvo užfiksuota vienuolika (11) šrifto pakeitimų, pvz., Šrifto dydis, teksto efektai ir pan. Jei makrokomandos tikslas buvo pakeisti tik šrifto pavadinimą (paliekant visas kitas savybes) įrašyta makro neveiks!
Šią makrokomandą galima pakeisti taip, kad ji pakeistų tik šrifto pavadinimą:
Ši makrokomanda ne tik veiks taip, kaip numatyta dabar, bet ir daug lengviau skaitoma.
Pašalinkite žymeklio judesius
Kitas dalykas, kuris įrašomas į makrokomandas, yra darbalapio ir langelių pasirinkimas. Tai yra problema, nes vartotojas gali lengvai prarasti tai, ką jie ką tik dirbo, jei žymeklis paleidžiamas į kitą vietą po makrokomandos paleidimo.
Kaip ir slinkdami, tu gali tekti perkelti žymeklį ir pasirinkti skirtingus langelius, kad atliktų užduotį, tačiau makrokomandoms nereikia naudoti žymeklio duomenims pasiekti. Apsvarstykite šį kodą, kuris nukopijuoja diapazoną ir įklijuoja jį į tris kitus lapus:
Su šiuo kodu yra keletas problemų:
- Vartotojas praras ankstesnę vietą darbo knygoje
- Makrokomanda nenurodo, kokį lapą kopijuojamenuo - tai gali būti problema, jei makrokomanda buvo paleista netinkamame lape
Be to, kodą sunku skaityti ir švaistyti. Šias problemas galima išspręsti pakankamai paprastai:
Šiame kode aiškiai matyti, kad kopijuojame iš „Sheet1“, ir norint įklijuoti duomenis nereikia keisti nei aktyvaus darbalapio, nei pasirinkto diapazono. (Vienas reikšmingas pakeitimas yra „PasteSpecial“ naudojimas vietoj „Įklijuoti“ - diapazono objektai, tokie kaip „Range („ C4 ″) “, turi prieigą tik prie„ PasteSpecial “komandos.)
Kai kodas tampa pilnas nuorodų į „.Select“ ir „Selection“, tai yra raktas, kad yra galimybių tą kodą optimizuoti ir padaryti efektyvesnį.
