Een geavanceerde VBA-gids voor MS Excel

Als je net begint met VBA , dan wil je misschien beginnen met het bestuderen van onze VBA-gids voor beginners(VBA guide for beginners) . Maar als u een doorgewinterde VBA- expert bent en op zoek bent naar meer geavanceerde dingen die u met VBA in Excel kunt doen , lees dan verder.

De mogelijkheid om VBA - codering in Excel te gebruiken, opent een hele wereld van automatisering. U kunt berekeningen automatiseren in Excel , drukknoppen en zelfs e-mail verzenden. Er zijn meer mogelijkheden om je dagelijkse werk met VBA te automatiseren dan je misschien denkt.

Geavanceerde VBA-gids voor Microsoft Excel(Advanced VBA Guide For Microsoft Excel)

Het belangrijkste doel van het schrijven van VBA -code in Excel is dat u informatie uit een spreadsheet kunt extraheren, er verschillende berekeningen op kunt uitvoeren en de resultaten vervolgens terug naar de spreadsheet kunt schrijven.

Hieronder volgen de meest voorkomende toepassingen van VBA in Excel .

  • Gegevens importeren(Import) en berekeningen uitvoeren
  • Bereken(Calculate) resultaten van een gebruiker die op een knop drukt
  • (Email)Rekenresultaten naar iemand e- mailen

Met deze drie voorbeelden zou u in staat moeten zijn om verschillende van uw eigen geavanceerde Excel VBA -code te schrijven.

Gegevens importeren en berekeningen uitvoeren(Importing Data and Performing Calculations)

Een van de meest voorkomende dingen waarvoor mensen Excel gebruiken , is het uitvoeren van berekeningen op gegevens die buiten Excel bestaan . Als u geen VBA gebruikt , betekent dit dat u de gegevens handmatig moet importeren, de berekeningen moet uitvoeren en die waarden naar een ander blad of rapport moet uitvoeren.

Met VBA kunt u het hele proces automatiseren. Als u bijvoorbeeld elke maandag een nieuw (Monday)CSV -bestand in een map op uw computer hebt gedownload , kunt u uw VBA -code zo configureren dat deze wordt uitgevoerd wanneer u uw spreadsheet op dinsdagochtend(Tuesday) voor het eerst opent .

De volgende importcode wordt uitgevoerd en importeert het CSV -bestand in uw Excel - spreadsheet.

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

Open de Excel VBA -bewerkingstool en selecteer het object Blad1 . (Sheet1)Kies in de vervolgkeuzelijsten voor objecten en methoden de optie Werkblad(Worksheet) en Activeer(Activate) . Hierdoor wordt de code elke keer uitgevoerd wanneer u de spreadsheet opent.

Hiermee wordt een functie Sub Worksheet_Activate() gemaakt. Plak de bovenstaande code in die functie.

Dit stelt het actieve werkblad in op Blad1(Sheet1) , wist het blad, maakt verbinding met het bestand met behulp van het bestandspad dat u hebt gedefinieerd met de variabele strFile , en vervolgens doorloopt de With -lus elke regel in het bestand en plaatst de gegevens in het blad vanaf cel A1 .

Als u deze code uitvoert, ziet u dat de CSV -bestandsgegevens worden geïmporteerd in uw lege spreadsheet, in Blad1(Sheet1) .

Importeren is slechts de eerste stap. Vervolgens wilt u een nieuwe koptekst maken voor de kolom die uw berekeningsresultaten zal bevatten. Laten we in dit voorbeeld zeggen dat u de 5% belasting wilt berekenen die is betaald over de verkoop van elk artikel.

De volgorde van acties die uw code moet nemen is:

  1. Maak een nieuwe resultatenkolom met de naam belastingen(taxes) .
  2. Loop door de kolom verkochte eenheden(units sold) en bereken de omzetbelasting.
  3. Schrijf de berekeningsresultaten naar de juiste rij in het blad.

Met de volgende code worden al deze stappen uitgevoerd.

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

Deze code zoekt de laatste rij in uw gegevensblad en stelt vervolgens het cellenbereik (de kolom met de verkoopprijzen) in op basis van de eerste en laatste gegevensrij. Vervolgens loopt de code door elk van die cellen, voert de belastingberekening uit en schrijft de resultaten in uw nieuwe kolom (kolom 5).

Plak de bovenstaande VBA -code onder de vorige code en voer het script uit. U ziet de resultaten verschijnen in kolom E.

Elke keer dat u uw Excel -werkblad opent, gaat het automatisch uit en krijgt u de nieuwste kopie van de gegevens uit het CSV -bestand. Vervolgens voert het de berekeningen uit en schrijft het de resultaten naar het blad. U hoeft niets meer handmatig te doen!

Bereken resultaten van druk op de knop(Calculate Results From Button Press)

Als u liever meer directe controle heeft over wanneer berekeningen worden uitgevoerd, in plaats van automatisch wanneer het werkblad wordt geopend, kunt u in plaats daarvan een bedieningsknop gebruiken.

Bedieningsknoppen(Control) zijn handig als u wilt bepalen welke berekeningen worden gebruikt. Bijvoorbeeld, in hetzelfde geval als hierboven, wat als u een belastingtarief van 5% wilt gebruiken voor de ene regio en een belastingtarief van 7% voor een andere?

U kunt dezelfde CSV -importcode automatisch laten uitvoeren, maar de belastingberekeningscode laten lopen wanneer u op de juiste knop drukt.

Gebruik dezelfde spreadsheet als hierboven, selecteer het tabblad Ontwikkelaar(Developer) en selecteer Invoegen(Insert) in de groep Besturingselementen(Controls) op het lint. Selecteer de drukknop (push button) ActiveX-besturing(ActiveX Control) in het vervolgkeuzemenu.

Teken de drukknop op een willekeurig deel van het blad, weg van de plaats waar de gegevens naartoe gaan.

Klik met de rechtermuisknop op de drukknop en selecteer Eigenschappen(Properties) . Wijzig in het venster Eigenschappen(Properties) het bijschrift in wat u aan de gebruiker wilt laten zien. In dit geval is het misschien Calculate 5% Tax .

Je ziet deze tekst weerspiegeld op de drukknop zelf. Sluit het eigenschappenvenster(properties) en dubbelklik op de drukknop zelf. Dit opent het code-editorvenster en uw cursor bevindt zich in de functie die wordt uitgevoerd wanneer de gebruiker op de drukknop drukt.

Plak de belastingberekeningscode uit het bovenstaande gedeelte in deze functie, waarbij u de multiplier van het belastingtarief op 0,05 houdt. Vergeet niet om de volgende 2 regels op te nemen om het actieve blad te definiëren.

Dim ws As Worksheet, strFile As String

Set ws = ActiveWorkbook.Sheets("Sheet1")

Herhaal het proces nu opnieuw en maak een tweede drukknop. Maak het bijschrift Calculate 7% Tax .

Dubbelklik op(Double-click) die knop en plak dezelfde code, maar maak de belastingvermenigvuldiger 0,07.

Nu, afhankelijk van op welke knop u drukt, wordt de kolom belastingen dienovereenkomstig berekend.

Als je klaar bent, heb je beide drukknoppen op je blad. Elk van hen start een andere belastingberekening en schrijft verschillende resultaten in de resultatenkolom. 

Om dit te sms'en, selecteert u het menu Ontwikkelaars(Developer) en selecteert u Ontwerpmodus(Design Mode) uit de groep Besturingselementen(Controls) in het lint om Ontwerpmodus(Design Mode) uit te schakelen . Hierdoor worden de drukknoppen geactiveerd. 

Probeer elke drukknop te selecteren om te zien hoe de resultaatkolom "belastingen" verandert.

Berekeningsresultaten naar iemand e-mailen(Email Calculation Results to Someone)

Wat als u de resultaten op de spreadsheet per e-mail naar iemand wilt verzenden?

U kunt met dezelfde procedure hierboven een andere knop maken met de naam E-mailblad naar baas . (Email Sheet to Boss)De code voor deze knop omvat het gebruik van het Excel CDO -object om SMTP -e-mailinstellingen te configureren en de resultaten te e-mailen in een door de gebruiker leesbaar formaat.

Om deze functie in te schakelen, moet u Tools and References selecteren . Scroll naar beneden naar Microsoft CDO voor Windows 2000 Library(Microsoft CDO for Windows 2000 Library) , schakel het in en selecteer OK .

Er zijn drie hoofdsecties voor de code die u moet maken om een ​​e-mail te verzenden en spreadsheetresultaten in te sluiten.

De eerste is het instellen van variabelen voor het onderwerp, de aan- en van(From) -adressen en de hoofdtekst van de e-mail.

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

Natuurlijk moet de body dynamisch zijn, afhankelijk van de resultaten in het blad, dus hier moet je een lus toevoegen die door het bereik gaat, de gegevens extraheert en regel voor regel naar de body schrijft.

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

Het volgende gedeelte betreft het instellen van de SMTP -instellingen, zodat u e-mail kunt verzenden via uw SMTP -server. Als u Gmail gebruikt , is dit meestal uw Gmail -e-mailadres, uw Gmail - wachtwoord en de 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

Vervang [email protected] en wachtwoord door uw eigen accountgegevens.

Ten slotte, om het verzenden van de e-mail te starten, voert u de volgende code in.

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

Opmerking(Note) : als u een transportfout ziet wanneer u deze code probeert uit te voeren, komt dit waarschijnlijk omdat uw Google - account de uitvoering van "minder veilige apps" blokkeert. U moet naar de instellingenpagina voor minder veilige apps(less secure apps settings page) gaan en deze functie AAN zetten.

Nadat dat is ingeschakeld, wordt uw e-mail verzonden. Dit is hoe het eruit ziet voor de persoon die uw automatisch gegenereerde e-mail met resultaten ontvangt.

Zoals u kunt zien, kunt u veel automatiseren met Excel VBA . Probeer te spelen met de codefragmenten waarover u in dit artikel hebt geleerd en maak uw eigen unieke VBA - automatiseringen.



About the author

Ik ben een computerprofessional met meer dan 10 jaar ervaring. In mijn vrije tijd help ik graag aan een bureau en leer ik kinderen internetten. Mijn vaardigheden omvatten veel dingen, maar het belangrijkste is dat ik weet hoe ik mensen kan helpen bij het oplossen van problemen. Als je iemand nodig hebt die je kan helpen met iets dringends of gewoon wat basistips wilt, neem dan contact met me op!



Related posts