Jei bandote gerai išmanyti „Excel VBA“ , jums tikriausiai būtų naudingi keli pavyzdžiai, kad patobulintumėte tą vizualinį pagrindinį meistriškumą. Čia rasite kelis Excel VBA pavyzdžius, kad galėtumėte susipažinti su šiuo įvykių tvarkymo verslu.
Excel VBA pavyzdys: darbaknygės atidarymo įvykis
Vienas iš dažniausiai naudojamų Excel VBA įvykių yra Workbook Open įvykis. Tarkime, kad turite darbaknygę, kurią naudojate kiekvieną dieną. Procedūra Workbook_Open šiame pavyzdyje vykdoma kiekvieną kartą atidarius darbaknygę. Procedūra tikrina savaitės dieną; jei penktadienis, kodas rodo jums priminimo pranešimą.
Norėdami sukurti „Excel“ VBA procedūrą, kuri vykdoma kiekvieną kartą, kai įvyksta darbaknygės atidarymo įvykis, atlikite šiuos veiksmus:
Atidarykite „Excel“ darbaknygę.
Tiks bet kuri „Excel“ darbaknygė.
Paspauskite Alt + F11, kad suaktyvintumėte VBE.
Projekto lange raskite darbaknygę.
Dukart spustelėkite projekto pavadinimą, kad būtų rodomi jo elementai, jei reikia.
Dukart spustelėkite elementą ThisWorkbook.
VBE rodo tuščią „ThisWorkbook“ objekto kodo langą.
Lango Kodas išskleidžiamajame sąraše Objektas (kairėje) pasirinkite Darbaknygė.
VBE įveda darbo knygos_Open procedūros pradžios ir pabaigos sakinius.
Įveskite šiuos teiginius, kad visa renginio procedūra atrodytų taip:
Privati antrinė darbaknygė_Open()
Pritemdyti pranešimą kaip eilutę
Jei savaitės diena (dabar) = 6 Tada
Msg = "Šiandien penktadienis. Nepamirškite "
Msg = Msg & "pateikite TPS ataskaitą!"
MsgBox Msg
Pabaiga, jei
Pabaigos sub
Kodo langas turėtų atrodyti taip.
Ši įvykių tvarkyklės procedūra vykdoma atidarius darbaknygę.
Darbaknygė_Open vykdoma automatiškai, kai tik atidaroma darbaknygė. Jis naudoja VBA WeekDay funkciją, kad nustatytų savaitės dieną. Jei penktadienis (6 diena), pranešimo langelis primena vartotojui, kad jis turi pateikti ataskaitą. Jei ne penktadienis, nieko neatsitiks.
Jei šiandien ne penktadienis, jums gali būti sunku išbandyti šią procedūrą. Galite tiesiog pakeisti 6, kad atitiktų šiandienos faktinį dienos skaičių.
Ir, žinoma, šią procedūrą galite keisti kaip tik norite. Pavyzdžiui, šioje versijoje kiekvieną kartą atidarant darbaknygę rodomas pranešimas. Tai po kurio laiko pradeda erzinti.
„Workbook_Open“ procedūra gali padaryti beveik viską. Šios įvykių tvarkyklės dažnai naudojamos šiems tikslams:
- Pasisveikinimo pranešimų rodymas (pvz., puikioje Franko darbaknygėje)
- Kitų darbo knygų atidarymas
- Tam tikro darbalapio aktyvinimas darbaknygėje
- Pasirinktinių nuorodų meniu nustatymas
Štai paskutinis Excel VBA procedūros Workbook_Open pavyzdys, kuris naudoja GetSetting ir SaveSetting funkcijas, kad galėtų sekti, kiek kartų darbaknygė buvo atidaryta. Funkcija „SaveSetting“ įrašo reikšmę į „Windows“ registrą, o funkcija „GetSetting“ nuskaito tą reikšmę (daugiau informacijos rasite žinyno sistemoje). Šis Excel VBA pavyzdys nuskaito skaičių iš registro, padidina jį ir išsaugo jį atgal registre. Ji taip pat nurodo vartotojui Cnt reikšmę, atitinkančią darbaknygės atidarymo kartų skaičių.
Privati antrinė darbaknygė_Open()
Dim Cnt As Long
Cnt = GetSetting ("Mano programa", "Nustatymai", "Atidaryti", 0)
Cnt = Cnt + 1
„SaveSetting“ „MyApp“, „Nustatymai“, „Atidaryti“, „Cnt
MsgBox "Ši darbaknygė buvo atidaryta " & Cnt & " kartus."
Pabaigos sub
Workbook_Open įvykių tvarkyklės naudojimas norint sekti, kiek kartų darbaknygė buvo atidaryta.
Excel VBA pavyzdys: darbaknygės įvykis BeforeClose
Štai „Excel VBA Workbook_BeforeClose“ įvykių tvarkyklės procedūros, kuri vykdoma automatiškai prieš pat uždarant darbaknygę, pavyzdys. Ši procedūra yra „ThisWorkbook“ objekto kodo lange:
Privati antrinė darbo knyga_Prieš uždarymą (Atšaukti kaip Būlio)
Pritemdyti pranešimą kaip eilutę
Dim Ans As Long
Dim FName As String
Msg = "Ar norėtumėte sukurti šio failo atsarginę kopiją?"
Ans = MsgBox(Msg, vbYesNo)
Jei Ans = vbTaip Tada
FName = "F:\BACKUP\" & ThisWorkbook.Name
ThisWorkbook.SaveCopyAs FName
Pabaiga, jei
Pabaigos sub
Ši rutina naudoja pranešimų laukelį, kad paklaustų vartotojo, ar jis norėtų sukurti atsarginę darbaknygės kopiją. Jei atsakymas yra teigiamas, kodas naudoja SaveCopyAs metodą, kad išsaugotų atsarginę failo kopiją F diske. Jei pritaikysite šią procedūrą savo reikmėms, turėsite pakeisti diską ir kelią.
„Excel“ programuotojai dažnai naudoja procedūrą „Workbook_BeforeClose“, kad susitvarkytų. Pavyzdžiui, jei naudojate procedūrą Workbook_Open norėdami pakeisti kai kuriuos nustatymus atidarydami darbaknygę (pavyzdžiui, paslėpdami būsenos juostą), tikslinga tik tada, kai uždarote darbaknygę, grąžinsite nustatymus į pradinę būseną. Šią elektroninę namų tvarkymą galite atlikti naudodami procedūrą Workbook_BeforeClose.
Kai naudojate įvykį Workbook_BeforeClose, atminkite tai: jei uždarote „Excel“ ir bet kuris atidarytas failas buvo pakeistas po paskutinio išsaugojimo, „Excel“ rodo įprastą pranešimo laukelį „Ar norite išsaugoti pakeitimus“. Spustelėjus mygtuką Atšaukti atšaukiamas visas uždarymo procesas. Tačiau įvykis Workbook_BeforeClose vis tiek bus įvykdytas.
Excel VBA pavyzdys: darbaknygės įvykis BeforeSave
Įvykis BeforeSave, kaip rodo jo pavadinimas, suaktyvinamas prieš išsaugant darbaknygę. Šis įvykis įvyksta, kai pasirenkate Failas → Įrašyti arba Failas → Įrašyti kaip.
Ši procedūra, kuri patalpinama į „ ThisWorkbook“ objekto kodo langą , parodo įvykį BeforeSave. Įprasta atnaujina langelio reikšmę (ląstelė A1 lape 1) kiekvieną kartą, kai išsaugoma darbaknygė. Kitaip tariant, langelis A1 tarnauja kaip skaitiklis, leidžiantis sekti, kiek kartų failas buvo išsaugotas.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI _
Kaip Būlis, Atšaukti Kaip Būlis)
Pritemdytas skaitiklis kaip diapazonas
Nustatyti skaitiklį = lapeliai ("1 lapas"). Diapazonas ("A1")
Counter.Value = Counter.Value + 1
Pabaigos sub
Atkreipkite dėmesį, kad procedūra Workbook_BeforeSave turi du argumentus: SaveAsUI ir Cancel. Norėdami parodyti, kaip šie argumentai veikia, išnagrinėkite šią makrokomandą, kuri vykdoma prieš išsaugant darbaknygę. Šia procedūra bandoma neleisti vartotojui įrašyti darbaknygės kitu pavadinimu. Jei vartotojas pasirenka Failas → Įrašyti kaip, argumentas SaveAsUI yra teisingas.
Kai kodas vykdomas, jis patikrina SaveAsUI reikšmę. Jei šis kintamasis yra True, procedūra rodo pranešimą ir nustato Atšaukti į True, o tai atšaukia išsaugojimo operaciją.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI _
Kaip Būlis, Atšaukti Kaip Būlis)
Jei SaveAsUI Tada
MsgBox "Negalite išsaugoti šios darbaknygės kopijos!"
Atšaukti = Tiesa
Pabaiga, jei
Pabaigos sub
Atminkite, kad ši procedūra tikrai netrukdys niekam išsaugoti kopijos kitu pavadinimu. Jei kas nors tikrai nori tai padaryti, jis arba ji gali tiesiog atidaryti darbaknygę su išjungtomis makrokomandomis. Kai makrokomandos yra išjungtos, įvykių tvarkyklės procedūros taip pat išjungiamos, o tai logiška, nes tai yra makrokomandos.