Napredni VBA vodič za MS Excel

Ako tek počinjete s VBA -om , onda ćete htjeti početi proučavati naš VBA vodič za početnike(VBA guide for beginners) . Ali ako ste iskusni VBA stručnjak i tražite naprednije stvari koje možete učiniti s VBA -om u Excelu(Excel) , nastavite čitati.

Mogućnost korištenja VBA kodiranja u Excelu(Excel) otvara cijeli svijet automatizacije. Možete automatizirati izračune u Excelu(Excel) , tipke, pa čak i slati e-poštu. Postoji više mogućnosti za automatizaciju vašeg svakodnevnog rada s VBA nego što mislite.

Napredni VBA vodič za Microsoft Excel(Advanced VBA Guide For Microsoft Excel)

Glavni cilj pisanja VBA koda u Excelu(Excel) je tako da možete izdvojiti informacije iz proračunske tablice, izvršiti razne izračune na njoj, a zatim rezultate zapisati natrag u proračunsku tablicu

Sljedeće su najčešće upotrebe VBA u Excelu(Excel) .

  • Uvezite(Import) podatke i izvršite izračune
  • Izračunajte(Calculate) rezultate od korisnika koji pritisne gumb
  • Pošaljite(Email) nekome rezultate izračuna

Uz ova tri primjera trebali biste biti u mogućnosti napisati razne vlastite napredne Excel VBA koda.

Uvoz podataka i izvođenje izračuna(Importing Data and Performing Calculations)

Jedna od najčešćih stvari za koje ljudi koriste Excel je izvođenje izračuna na podacima koji postoje izvan Excela(Excel) . Ako ne koristite VBA , to znači da morate ručno uvesti podatke, pokrenuti izračune i ispisati te vrijednosti na drugi list ili izvješće.

S VBA možete automatizirati cijeli proces. Na primjer, ako imate novu CSV datoteku koja se preuzima u direktorij na vašem računalu svakog ponedjeljka(Monday) , možete konfigurirati svoj VBA kôd da se pokrene kada prvi put otvorite proračunsku tablicu u utorak(Tuesday) ujutro.

Sljedeći kod za uvoz pokrenut će se i uvesti CSV datoteku u vašu Excel proračunsku tablicu.

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

Otvorite Excel VBA alat za uređivanje i odaberite objekt Sheet1 . Iz padajućih okvira objekata i metoda odaberite Radni list(Worksheet) i Aktiviraj(Activate) . To će pokrenuti kod svaki put kada otvorite proračunsku tablicu.

Ovo će stvoriti funkciju Sub Worksheet_Activate() . Zalijepite gornji kod u tu funkciju.

Ovo postavlja aktivni radni list na Sheet1 , briše list, povezuje se s datotekom pomoću putanje datoteke koju ste definirali s varijablom strFile , a zatim petlja With prolazi kroz svaki redak u datoteci i stavlja podatke u list počevši od ćelije A1 .

Ako pokrenete ovaj kod, vidjet ćete da su podaci iz CSV datoteke uvezeni u vašu praznu proračunsku tablicu, u Sheet1 .

Uvoz je samo prvi korak. Zatim želite stvoriti novo zaglavlje za stupac koji će sadržavati vaše rezultate izračuna. U ovom primjeru, recimo da želite izračunati poreze od 5% plaćenih na prodaju svake stavke.

Redoslijed radnji koje vaš kod treba poduzeti je:

  1. Napravite novi stupac rezultata koji se zove porezi(taxes) .
  2. Prođite kroz stupac prodanih jedinica(units sold) i izračunajte porez na promet.
  3. Upišite rezultate izračuna u odgovarajući redak na listu.

Sljedeći kod će izvršiti sve ove korake.

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

Ovaj kod pronalazi zadnji redak u vašem listu podataka, a zatim postavlja raspon ćelija (stupac s prodajnim cijenama) prema prvom i posljednjem retku podataka. Zatim kod petlja kroz svaku od tih ćelija, izvodi izračun poreza i upisuje rezultate u vaš novi stupac (stupac 5).

Zalijepite gornji VBA kod ispod prethodnog koda i pokrenite skriptu. Vidjet ćete rezultate prikazane u stupcu E.

Sada, svaki put kada otvorite svoj radni list programa Excel(Excel) , on će se automatski ugasiti i dobiti najsvježiju kopiju podataka iz CSV datoteke. Zatim će izvršiti izračune i rezultate zapisati na list. Više ne morate ništa raditi ručno!

Izračunajte rezultate pritiskom na gumb(Calculate Results From Button Press)

Ako biste radije imali izravniju kontrolu nad izvođenjem izračuna, umjesto da se izvode automatski kada se list otvori, umjesto toga možete koristiti kontrolni gumb.

Kontrolni(Control) gumbi korisni su ako želite kontrolirati koji se izračuni koriste. Na primjer, u ovom istom slučaju kao gore, što ako želite koristiti poreznu stopu od 5% za jednu regiju i stopu od 7% za drugu?

Možete dopustiti da se isti uvozni kôd CSV -a automatski pokrene, ali ostavite kôd za obračun poreza da se pokrene kada pritisnete odgovarajući gumb.

Koristeći istu proračunsku tablicu kao gore, odaberite karticu Razvojni programer(Developer) i odaberite Umetni(Insert) iz grupe Kontrole(Controls) na vrpci. Odaberite tipku (push button) ActiveX Control s padajućeg izbornika.

Nacrtajte gumb na bilo koji dio lista dalje od mjesta gdje će ići podaci.

Desnom tipkom kliknite gumb i odaberite Svojstva(Properties) . U prozoru Svojstva(Properties) promijenite Naslov u ono što želite prikazati korisniku. U ovom slučaju to može biti Calculate 5% Tax .

Vidjet ćete da se ovaj tekst odražava na samom gumbu. Zatvorite prozor svojstava(properties) i dvaput kliknite na sam gumb. Ovo će otvoriti prozor za uređivanje koda, a vaš će kursor biti unutar funkcije koja će se pokrenuti kada korisnik pritisne tipku.

Zalijepite kod za obračun poreza iz gornjeg odjeljka u ovu funkciju, zadržavajući množitelj porezne stope na 0,05. Ne zaboravite uključiti sljedeća 2 retka kako biste definirali aktivni list.

Dim ws As Worksheet, strFile As String

Set ws = ActiveWorkbook.Sheets("Sheet1")

Sada ponovite postupak ponovno, stvarajući drugi gumb. Napravite natpis Calculate 7% Tax .

Dvaput kliknite(Double-click) na taj gumb i zalijepite isti kod, ali postavite porezni multiplikator 0,07.

Sada, ovisno koji gumb pritisnete, stupac poreza će se izračunati u skladu s tim.

Kada završite, imat ćete oba gumba na svom listu. Svaki od njih će pokrenuti drugačiji obračun poreza i upisat će različite rezultate u stupac rezultata. 

Da biste to poslali, odaberite izbornik Razvojni programer(Developer) i odaberite Način dizajna(Design Mode) iz grupe Kontrole(Controls) na vrpci da biste onemogućili način dizajna(Design Mode) . Ovo će aktivirati tipke. 

Pokušajte odabrati svaki gumb da biste vidjeli kako se mijenja stupac rezultata "porezi".

Pošaljite nekome rezultate izračuna(Email Calculation Results to Someone)

Što ako želite poslati rezultate u proračunskoj tablici nekome putem e-pošte?

Možete stvoriti još jedan gumb pod nazivom Pošaljite list šefu(Email Sheet to Boss) koristeći isti postupak iznad. Kôd za ovaj gumb uključivat će korištenje Excel CDO objekta za konfiguriranje postavki SMTP e-pošte i slanje rezultata e-poštom u formatu koji može čitati korisnik.

Da biste omogućili ovu značajku, morate odabrati Alati i reference(Tools and References) . Pomaknite se prema dolje do Microsoft CDO za Windows 2000 knjižnicu(Microsoft CDO for Windows 2000 Library) , omogućite je i odaberite U redu(OK) .

Postoje tri glavna odjeljka koda koji trebate izraditi da biste poslali e-poruku i ugradili rezultate proračunske tablice.

Prvi je postavljanje varijabli koje drže predmet, adrese primatelja i pošiljatelja(From) te tijelo e-pošte.

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."

Naravno, tijelo mora biti dinamično ovisno o tome koji su rezultati u listu, pa ćete ovdje morati dodati petlju koja prolazi kroz raspon, izdvaja podatke i upisuje redak po red u tijelo.

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

Sljedeći odjeljak uključuje postavljanje SMTP postavki tako da možete slati e-poštu putem svog SMTP poslužitelja. Ako koristite Gmail , to je obično vaša Gmail adresa e-pošte, lozinka za Gmail i Gmail SMTP(Gmail SMTP) poslužitelj (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

Zamijenite [email protected] i lozinku podacima o svom računu.

Na kraju, da biste pokrenuli slanje e-pošte, umetnite sljedeći kod.

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

Napomena(Note) : ako vidite pogrešku u prijenosu kada pokušavate pokrenuti ovaj kôd, vjerojatno je zato što vaš Google račun blokira pokretanje "manje sigurnih aplikacija". Morat ćete posjetiti stranicu postavki manje sigurnih aplikacija(less secure apps settings page) i UKLJUČITI ovu značajku.

Nakon što je to omogućeno, vaša će e-pošta biti poslana. Ovako to izgleda osobi koja primi vašu automatski generiranu e-poštu s rezultatima.

Kao što možete vidjeti postoji mnogo toga što zapravo možete automatizirati s Excel VBA . Pokušajte se poigrati s isječcima koda o kojima ste naučili u ovom članku i stvorite vlastite jedinstvene VBA automatizacije.



About the author

Ja sam računalni profesionalac s više od 10 godina iskustva. U slobodno vrijeme volim pomagati za uredskim stolom i učiti djecu kako se koristiti internetom. Moje vještine uključuju mnoge stvari, ali najvažnije je da znam kako pomoći ljudima u rješavanju problema. Ako trebate nekoga tko vam može pomoći s nečim hitnim ili samo želite neke osnovne savjete, obratite mi se!



Related posts