Pokročilá príručka VBA pre MS Excel
Ak s VBA(VBA) ešte len začínate , mali by ste začať študovať našu príručku VBA pre začiatočníkov(VBA guide for beginners) . Ale ak ste skúsený odborník na VBA a hľadáte pokročilejšie veci, ktoré môžete robiť s VBA v Exceli(Excel) , pokračujte v čítaní.
Možnosť používať kódovanie VBA v (VBA)Exceli(Excel) otvára celý svet automatizácie. Môžete automatizovať výpočty v Exceli(Excel) , pomocou tlačidiel a dokonca aj odosielať e-maily. Existuje viac možností na automatizáciu vašej každodennej práce s VBA , ako si možno uvedomujete.
Pokročilá príručka VBA pre Microsoft Excel(Advanced VBA Guide For Microsoft Excel)
Hlavným cieľom písania kódu VBA v (VBA)Exceli(Excel) je, aby ste mohli extrahovať informácie z tabuľky, vykonávať na nej rôzne výpočty a potom zapísať výsledky späť do tabuľky.
Nasledujú najbežnejšie použitia jazyka VBA(VBA) v Exceli(Excel) .
- Importujte(Import) údaje a vykonávajte výpočty
- Vypočítajte(Calculate) výsledky, keď používateľ stlačí tlačidlo
- Pošlite(Email) niekomu výsledky výpočtu e-mailom
Pomocou týchto troch príkladov by ste mali byť schopní napísať celý rad vlastného pokročilého kódu Excel VBA .
Import údajov a vykonávanie výpočtov(Importing Data and Performing Calculations)
Jednou z najbežnejších vecí, na ktoré ľudia používajú Excel , je vykonávanie výpočtov s údajmi, ktoré existujú mimo Excelu(Excel) . Ak nepoužívate VBA , znamená to, že musíte manuálne importovať údaje, spustiť výpočty a vypísať tieto hodnoty do iného hárku alebo zostavy.
S VBA môžete automatizovať celý proces. Ak máte napríklad každý pondelok stiahnutý nový súbor (Monday)CSV do adresára vo svojom počítači , môžete svoj kód VBA nakonfigurovať tak, aby sa spustil pri prvom otvorení tabuľky v utorok(Tuesday) ráno.
Nasledujúci importovací kód sa spustí a importuje súbor CSV do tabuľky Excel .
Dim ws As Worksheet, strFile As String Set ws = ActiveWorkbook.Sheets("Sheet1") Cells.ClearContents strFile = “c:\temp\purchases.csv” With ws.QueryTables.Add(Connection:="TEXT;" & strFile, Destination:=ws.Range("A1")) .TextFileParseType = xlDelimited .TextFileCommaDelimiter = True .Refresh End With
Otvorte nástroj na úpravu jazyka Excel VBA(Excel VBA) a vyberte objekt Sheet1 . V rozbaľovacích poliach objektu a metódy vyberte Pracovný hárok(Worksheet) a Aktivovať(Activate) . Toto spustí kód pri každom otvorení tabuľky.
Tým sa vytvorí funkcia Sub Worksheet_Activate() . Vložte vyššie uvedený kód do tejto funkcie.
Toto nastaví aktívny pracovný hárok na Hárok1(Sheet1) , vymaže hárok, pripojí sa k súboru pomocou cesty k súboru, ktorú ste definovali pomocou premennej strFile , a potom cyklus With prejde každým riadkom v súbore a umiestni údaje do hárka počnúc bunkou A1. .
Ak spustíte tento kód, uvidíte, že údaje súboru CSV sa importujú do vašej prázdnej tabuľky v Hárok1(Sheet1) .
Import je len prvým krokom. Ďalej chcete vytvoriť novú hlavičku pre stĺpec, ktorý bude obsahovať výsledky vašich výpočtov. V tomto príklade povedzme, že chcete vypočítať 5 % dane zaplatené za predaj každej položky.
Poradie akcií, ktoré by mal váš kód vykonať, je:
- Vytvorte nový stĺpec výsledkov s názvom dane(taxes) .
- Prejdite stĺpec predaných jednotiek(units sold) a vypočítajte daň z obratu.
- Výsledky výpočtu zapíšte do príslušného riadku v hárku.
Nasledujúci kód vykoná všetky tieto kroky.
Dim LastRow As Long
Dim StartCell As Range
Dim rowCounter As Integer
Dim rng As Range, cell As Range
Dim fltTax As Double
Set StartCell = Range("A1")
'Find Last Row and Column
LastRow = ws.Cells(ws.Rows.Count, StartCell.Column).End(xlUp).Row
Set rng = ws.Range(ws.Cells(2, 4), ws.Cells(LastRow, 4))
rowCounter = 2
Cells(1, 5) = "taxes"
For Each cell In rng
fltTax = cell.Value * 0.05
Cells(rowCounter, 5) = fltTax
rowCounter = rowCounter + 1
Next cell
Tento kód nájde posledný riadok vo vašom hárku údajov a potom nastaví rozsah buniek (stĺpec s predajnými cenami) podľa prvého a posledného riadka údajov. Potom kód prejde každou z týchto buniek, vykoná výpočet dane a zapíše výsledky do vášho nového stĺpca (stĺpec 5).
Prilepte vyššie uvedený kód VBA pod predchádzajúci kód a spustite skript. Výsledky uvidíte v stĺpci E.
Teraz zakaždým, keď otvoríte pracovný hárok programu Excel(Excel) , automaticky sa vypne a získa najnovšiu kópiu údajov zo súboru CSV . Potom vykoná výpočty a výsledky zapíše do hárku. Už nemusíte nič robiť ručne!
Vypočítajte výsledky stlačením tlačidla(Calculate Results From Button Press)
Ak uprednostňujete priamu kontrolu nad spustením výpočtov namiesto automatického spúšťania pri otvorení hárka, môžete namiesto toho použiť ovládacie tlačidlo.
Ovládacie(Control) tlačidlá sú užitočné, ak chcete ovládať, ktoré výpočty sa použijú. Napríklad v tom istom prípade ako je uvedené vyššie, čo ak chcete použiť 5 % sadzbu dane pre jeden región a 7 % sadzbu dane pre iný región?
Môžete povoliť, aby sa rovnaký importný kód CSV spustil automaticky, ale kód výpočtu dane ponechajte spustený, keď stlačíte príslušné tlačidlo.
Pomocou rovnakej tabuľky ako vyššie vyberte kartu Vývojár(Developer) a v skupine Ovládacie prvky(Controls) na páse s nástrojmi vyberte položku Vložiť . (Insert)V rozbaľovacej ponuke vyberte tlačidlo (push button)ActiveX Control .
Nakreslite tlačidlo na ľubovoľnú časť hárku mimo miesta, kam budú smerovať údaje.
Kliknite pravým tlačidlom myši na tlačidlo a vyberte položku Vlastnosti(Properties) . V okne Vlastnosti(Properties) zmeňte popis na to, čo chcete zobraziť používateľovi. V tomto prípade to môže byť Calculate 5% Tax .
Tento text uvidíte na samotnom tlačidle. Zatvorte okno vlastností(properties) a dvakrát kliknite na samotné tlačidlo. Tým sa otvorí okno editora kódu a váš kurzor bude vo vnútri funkcie, ktorá sa spustí, keď používateľ stlačí tlačidlo.
Do tejto funkcie prilepte kód výpočtu dane z časti vyššie, pričom ponechajte násobiteľ sadzby dane na hodnote 0,05. Nezabudnite zahrnúť nasledujúce 2 riadky, aby ste definovali aktívny hárok.
Dim ws As Worksheet, strFile As String
Set ws = ActiveWorkbook.Sheets("Sheet1")
Teraz zopakujte proces znova a vytvorte druhé tlačidlo. Vytvorte nadpis Calculate 7% Tax .
Dvakrát kliknite na(Double-click) toto tlačidlo a vložte rovnaký kód, ale použite daňový multiplikátor na 0,07.
Teraz sa podľa toho, ktoré tlačidlo stlačíte, vypočíta stĺpec daní.
Po dokončení budete mať na hárku obe tlačidlá. Každý z nich spustí iný výpočet dane a do stĺpca výsledku zapíše iné výsledky.
Ak chcete tento text napísať, vyberte ponuku Vývojár(Developer) a vyberte Režim návrhu(Design Mode) zo skupiny Ovládacie prvky(Controls) na páse s nástrojmi, čím deaktivujete režim návrhu(Design Mode) . Tým sa aktivujú tlačidlá.
Skúste vybrať každé tlačidlo, aby ste videli, ako sa mení stĺpec výsledkov „dane“.
Pošlite niekomu výsledky výpočtu e-mailom(Email Calculation Results to Someone)
Čo ak chcete výsledky v tabuľke poslať niekomu e-mailom?
Rovnakým postupom uvedeným vyššie môžete vytvoriť ďalšie tlačidlo s názvom E-mailový list šéfovi . (Email Sheet to Boss)Kód pre toto tlačidlo bude zahŕňať použitie objektu Excel CDO na konfiguráciu nastavení e-mailu SMTP a odoslanie výsledkov e-mailom vo formáte čitateľnom pre používateľa.
Ak chcete povoliť túto funkciu, musíte vybrať položku Nástroje a odkazy(Tools and References) . Prejdite nadol na Microsoft CDO for Windows 2000 Library , povoľte ju a vyberte OK .
Existujú tri hlavné časti kódu, ktoré musíte vytvoriť, aby ste mohli odoslať e-mail a vložiť výsledky tabuľky.
Prvým je nastavenie premenných, ktoré budú obsahovať predmet, adresy(From) príjemcu a odosielateľa a telo e-mailu.
Dim CDO_Mail As Object
Dim CDO_Config As Object
Dim SMTP_Config As Variant
Dim strSubject As String
Dim strFrom As String
Dim strTo As String
Dim strCc As String
Dim strBcc As String
Dim strBody As String
Dim LastRow As Long
Dim StartCell As Range
Dim rowCounter As Integer
Dim rng As Range, cell As Range
Dim fltTax As Double
Set ws = ActiveWorkbook.Sheets("Sheet1")
strSubject = "Taxes Paid This Quarter"
strFrom = "[email protected]"
strTo = "[email protected]"
strCc = ""
strBcc = ""
strBody = "The following is the breakdown of taxes paid on sales this quarter."
Samozrejme, telo musí byť dynamické v závislosti od toho, aké výsledky sú v hárku, takže tu budete musieť pridať slučku, ktorá prechádza rozsahom, extrahuje údaje a zapisuje riadok po riadku do tela.
Set StartCell = Range("A1") 'Find Last Row and Column LastRow = ws.Cells(ws.Rows.Count, StartCell.Column).End(xlUp).Row Set rng = ws.Range(ws.Cells(2, 4), ws.Cells(LastRow, 4)) rowCounter = 2 strBody = strBody & vbCrLf For Each cell In rng strBody = strBody & vbCrLf strBody = strBody & "We sold " & Cells(rowCounter, 3).Value & " of " & Cells(rowCounter, 1).Value _ & " for " & Cells(rowCounter, 4).Value & " and paid taxes of " & Cells(rowCounter, 5).Value & "." rowCounter = rowCounter + 1 Next cell
Ďalšia časť zahŕňa nastavenie nastavení SMTP , aby ste mohli odosielať e-maily cez váš server SMTP . Ak používate službu Gmail(Gmail) , je to zvyčajne vaša e-mailová adresa služby Gmail , heslo služby Gmail a server (Gmail)SMTP služby Gmail(Gmail SMTP) (smtp.gmail.com).
Set CDO_Mail = CreateObject("CDO.Message") On Error GoTo Error_Handling Set CDO_Config = CreateObject("CDO.Configuration") CDO_Config.Load -1 Set SMTP_Config = CDO_Config.Fields With SMTP_Config .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com" .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "[email protected]" .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "password" .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465 .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True .Update End With With CDO_Mail Set .Configuration = CDO_Config End With
Nahraďte [email protected] a heslo svojimi podrobnosťami o účte.
Nakoniec na začatie odosielania e-mailu vložte nasledujúci kód.
CDO_Mail.Subject = strSubject
CDO_Mail.From = strFrom
CDO_Mail.To = strTo
CDO_Mail.TextBody = strBody
CDO_Mail.CC = strCc
CDO_Mail.BCC = strBcc
CDO_Mail.Send
Error_Handling:
If Err.Description <> "" Then MsgBox Err.Description
Poznámka(Note) : Ak sa pri pokuse o spustenie tohto kódu zobrazí chyba prenosu, je to pravdepodobne preto, že váš účet Google blokuje spustenie „menej bezpečných aplikácií“. Budete musieť navštíviť stránku nastavení menej bezpečných aplikácií(less secure apps settings page) a zapnúť túto funkciu.
Po aktivácii bude váš e-mail odoslaný. Takto to vyzerá pre osobu, ktorá dostane váš automaticky generovaný e-mail s výsledkami.
Ako vidíte, je toho veľa, čo môžete skutočne automatizovať pomocou Excel VBA . Skúste sa pohrať s útržkami kódu, o ktorých ste sa dozvedeli v tomto článku, a vytvorte si vlastné jedinečné automatizácie VBA .
Related posts
Najlepší sprievodca VBA (pre začiatočníkov), aký budete kedy potrebovať
Ako vytvoriť makro alebo skript VBA v programe Excel
Sprievodca všetkými rozšíreniami súborov programu Excel a ich význam
Ako odstrániť prázdne riadky v Exceli
Opravte chybové hlásenie MS Office „Nedá sa overiť licencia“.
Ako triediť podľa dátumu v Exceli
Ako odstrániť mriežku v Exceli
Prečo by ste mali používať pomenované rozsahy v Exceli
Ako presúvať stĺpce v Exceli
Ako rýchlo vložiť viac riadkov v Exceli
Pomocou nástroja Excel na vyhľadávanie cieľov analýzy What-If
Zoskupte riadky a stĺpce v pracovnom hárku programu Excel
Čo je Microsoft Publisher? Sprievodca pre začiatočníkov
Ako vytvoriť viacero prepojených rozbaľovacích zoznamov v Exceli
Ako vložiť CSV alebo TSV do pracovného hárka programu Excel
2 spôsoby použitia funkcie Transponovať v Exceli
Ako používať absolútne odkazy v Exceli
Ako zlúčiť údaje vo viacerých súboroch programu Excel
Ako odstrániť duplicitné riadky v Exceli
Použite názvy dynamických rozsahov v Exceli na flexibilné rozbaľovacie zoznamy