En avancerad VBA-guide för MS Excel

Om du precis har börjat med VBA , då vill du börja studera vår VBA-guide för nybörjare(VBA guide for beginners) . Men om du är en erfaren VBA- expert och letar efter mer avancerade saker du kan göra med VBA i Excel , fortsätt läsa.

Möjligheten att använda VBA- kodning i Excel öppnar upp för en hel värld av automatisering. Du kan automatisera beräkningar i Excel , tryckknappar och till och med skicka e-post. Det finns fler möjligheter att automatisera ditt dagliga arbete med VBA än du kanske inser.

Avancerad VBA-guide för Microsoft Excel(Advanced VBA Guide For Microsoft Excel)

Huvudmålet med att skriva VBA -kod i Excel är så att du kan extrahera information från ett kalkylblad, utföra en mängd olika beräkningar på det och sedan skriva tillbaka resultaten till kalkylarket

Följande är de vanligaste användningsområdena för VBA i Excel .

  • Importera(Import) data och utför beräkningar
  • Beräkna(Calculate) resultat från att en användare trycker på en knapp
  • E-posta(Email) beräkningsresultat till någon

Med dessa tre exempel bör du kunna skriva en mängd olika din egen avancerade Excel VBA -kod.

Importera data och utföra beräkningar(Importing Data and Performing Calculations)

En av de vanligaste sakerna som människor använder Excel till är att utföra beräkningar på data som finns utanför Excel . Om du inte använder VBA betyder det att du måste importera data manuellt, köra beräkningarna och mata ut dessa värden till ett annat ark eller rapport.

Med VBA kan du automatisera hela processen. Om du till exempel har en ny CSV -fil nedladdad till en katalog på din dator varje måndag(Monday) , kan du konfigurera din VBA -kod så att den körs när du öppnar ditt kalkylblad på tisdag(Tuesday) morgon.

Följande importkod körs och importerar CSV -filen till ditt Excel - kalkylblad.

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

Öppna Excel VBA- redigeringsverktyget och välj Sheet1- objektet. I listrutorna för objekt och metod väljer du Kalkylblad(Worksheet) och Aktivera(Activate) . Detta kommer att köra koden varje gång du öppnar kalkylarket.

Detta kommer att skapa en Sub Worksheet_Activate() funktion. Klistra in koden ovan i den funktionen.

Detta ställer in det aktiva kalkylbladet till Sheet1 , rensar arket, ansluter till filen med hjälp av filsökvägen du definierade med strFile- variabeln, och sedan cyklar With -loopen genom varje rad i filen och placerar data i arket med början i cell A1 .

Om du kör den här koden kommer du att se att CSV -fildata importeras till ditt tomma kalkylark, i Sheet1 .

Import är bara det första steget. Därefter vill du skapa en ny rubrik för kolumnen som kommer att innehålla dina beräkningsresultat. I det här exemplet, låt oss säga att du vill beräkna 5 % skatt som betalas vid försäljningen av varje artikel.

Åtgärdsordningen din kod ska utföra är:

  1. Skapa ny resultatkolumn som heter skatter(taxes) .
  2. Gå igenom kolumnen för sålda enheter(units sold) och beräkna momsen.
  3. Skriv beräkningsresultaten till lämplig rad i bladet.

Följande kod kommer att utföra alla dessa steg.

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

Den här koden hittar den sista raden i ditt datablad och ställer sedan in cellintervallet (kolumnen med försäljningspriserna) enligt den första och sista raden med data. Sedan går koden genom var och en av dessa celler, utför skatteberäkningen och skriver resultaten i din nya kolumn (kolumn 5).

Klistra in ovanstående VBA -kod under föregående kod och kör skriptet. Du kommer att se resultaten visas i kolumn E.

Nu, varje gång du öppnar ditt Excel -kalkylblad, kommer det automatiskt att gå ut och hämta den senaste kopian av data från CSV -filen. Sedan kommer den att utföra beräkningarna och skriva resultaten till bladet. Du behöver inte göra något manuellt längre!

Beräkna resultat från knapptryckning(Calculate Results From Button Press)

Om du hellre vill ha mer direkt kontroll över när beräkningar körs, istället för att köras automatiskt när arket öppnas, kan du använda en kontrollknapp istället.

Kontrollknappar(Control) är användbara om du vill styra vilka beräkningar som används. Till exempel, i samma fall som ovan, vad händer om du vill använda en skattesats på 5 % för en region och en skattesats på 7 % för en annan?

Du kan tillåta att samma CSV -importkod körs automatiskt, men låter skatteberäkningskoden köras när du trycker på lämplig knapp.

Använd samma kalkylblad som ovan, välj fliken Utvecklare(Developer) och välj Infoga(Insert) från gruppen Kontroller(Controls) i menyfliksområdet. Välj tryckknappen (push button) ActiveX Control från rullgardinsmenyn.

Dra tryckknappen på valfri del av arket bort från där all data kommer att gå.

Högerklicka på tryckknappen och välj Egenskaper(Properties) . I fönstret Egenskaper(Properties) ändrar du bildtexten till vad du vill visa för användaren. I det här fallet kan det vara Calculate 5% Tax .

Du kommer att se den här texten på själva tryckknappen. Stäng egenskapsfönstret(properties) och dubbelklicka på själva tryckknappen. Detta öppnar kodredigeringsfönstret och markören kommer att vara inne i funktionen som körs när användaren trycker på tryckknappen.

Klistra in skatteberäkningskoden från avsnittet ovan i den här funktionen och håll skattesatsmultiplikatorn på 0,05. Kom ihåg att inkludera följande 2 rader för att definiera det aktiva arket.

Dim ws As Worksheet, strFile As String

Set ws = ActiveWorkbook.Sheets("Sheet1")

Upprepa nu processen igen och skapa en andra tryckknapp. Gör bildtexten Calculate 7% Tax .

Dubbelklicka på(Double-click) den knappen och klistra in samma kod, men gör skattemultiplikatorn 0,07.

Nu, beroende på vilken knapp du trycker på, kommer skattekolumnen att beräknas därefter.

När du är klar har du båda tryckknapparna på ditt ark. Var och en av dem kommer att initiera en annan skatteberäkning och kommer att skriva olika resultat i resultatkolumnen. 

För att texta detta, välj menyn Utvecklare(Developer) och välj Designläge(Design Mode) från gruppen Kontroller(Controls) i menyfliksområdet för att inaktivera Designläge(Design Mode) . Detta kommer att aktivera tryckknapparna. 

Försök att välja varje tryckknapp för att se hur resultatkolumnen "skatter" ändras.

E-posta beräkningsresultat till någon(Email Calculation Results to Someone)

Vad händer om du vill skicka resultaten på kalkylarket till någon via e-post?

Du kan skapa en annan knapp som heter Email Sheet to Boss med samma procedur ovan. Koden för den här knappen kommer att innebära att Excel CDO- objektet används för att konfigurera SMTP -e-postinställningar och att resultaten skickas via e-post i ett användarläsbart format.

För att aktivera den här funktionen måste du välja Verktyg och referenser(Tools and References) . Rulla ned till Microsoft CDO för Windows 2000 Library(Microsoft CDO for Windows 2000 Library) , aktivera det och välj OK .

Det finns tre huvudavsnitt i koden du behöver skapa för att skicka ut ett e-postmeddelande och bädda in kalkylbladsresultat.

Den första är att ställa in variabler för att hålla ämnet, till och från(From) -adresser och e-postmeddelandet.

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

Självklart måste kroppen vara dynamisk beroende på vilka resultat som finns i arket, så här måste du lägga till en slinga som går igenom intervallet, extraherar data och skriver en rad åt gången till kroppen.

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

Nästa avsnitt handlar om att ställa in SMTP- inställningarna så att du kan skicka e-post via din SMTP -server. Om du använder Gmail är detta vanligtvis din Gmail- e- postadress, ditt Gmail - lösenord och Gmails SMTP(Gmail SMTP) -server (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

Ersätt [email protected] och lösenord med dina egna kontouppgifter.

Slutligen, för att starta e-postsändningen, infoga följande 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

Obs!(Note) Om du ser ett transportfel när du försöker köra den här koden, beror det troligen på att ditt Google - konto blockerar "mindre säkra appar" från att köras. Du måste besöka inställningssidan för mindre säkra appar(less secure apps settings page) och aktivera den här funktionen.

När det har aktiverats kommer din e-post att skickas. Så här ser det ut för den person som får ditt automatiskt genererade resultatmail.

Som du kan se finns det mycket du faktiskt kan automatisera med Excel VBA . Testa att leka med kodavsnitten som du har lärt dig om i den här artikeln och skapa dina egna unika VBA- automatiseringar.



About the author

"Jag är en frilansande Windows- och Office-expert. Jag har över 10 års erfarenhet av att arbeta med dessa verktyg och kan hjälpa dig att få ut det mesta av dem. Mina färdigheter inkluderar: arbeta med Microsoft Word, Excel, PowerPoint och Outlook; skapa webben sidor och applikationer; och hjälpa kunder att nå sina affärsmål."



Related posts