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:

  1. Vytvorte nový stĺpec výsledkov s názvom dane(taxes) .
  2. Prejdite stĺpec predaných jednotiek(units sold) a vypočítajte daň z obratu.
  3. 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 .



About the author

Som vývojár freeware softvéru a zástanca Windows Vista/7. Napísal som niekoľko stoviek článkov na rôzne témy súvisiace s operačným systémom vrátane tipov a trikov, návodov na opravy a osvedčených postupov. Prostredníctvom svojej spoločnosti Help Desk Services ponúkam aj poradenské služby súvisiace s kanceláriou. Veľmi dobre rozumiem tomu, ako Office 365 funguje, jeho funkcie a ako ich najefektívnejšie používať.



Related posts