Sessie E5 Floris M. Kleijne VBA Office Sessie E5 Floris M. Kleijne
Case: Telemarketing-actie Eén maand, 1.500 telefoontjes Werkdagen en dagelijkse targets in Excel Na elke werkdag: Resultaat bijhouden in Excel Dagrapportage naar projectmanager (Gewijzigde) Targets naar Outlook schrijven
Case: Telemarketing-actie
Onderwerpen sessie E5 Excel: Gegevenslijst doorlopen en gebruiken Word: Rapportage maken vanuit Excel Outlook: Afspraken in Agenda maken en bijhouden Office: Automatisch werkbalk maken VBA: Class module ontwerpen en gebruiken Bladwijzers behouden bij het invullen Document automatisch e-mailen Vragen van u…?
Vragen van u?
Bedankt voor uw aandacht! Floris Kleijne www.i-teach.nl www.nationaleofficedag.nl/info_e5.htm
Lijst doorlopen en gebruiken
Lijst doorlopen en gebruiken Begin bij de eerste cel Handel die regel helemaal af Ga naar de volgende cel Herhaal tot lege cel
Lijst doorlopen en gebruiken Set Cel = Range("A2") Datum = Cel.Value Tijd = Cel.Offset(0,2).Value Call Verwerk(Datum,Tijd) Set Cel = Cel.Offset(1,0) Do Loop Until Cel.Formula = ""
Rapportage maken
Rapportage maken Voorbereiding: rapportagesjabloon Word opstarten Nieuwe rapportage maken Gegevens in rapportage invullen Rapportage opslaan
Rapportage maken Rapportagesjabloon Tekst en layout van tevoren vastgelegd Opslaan als *.dot Bij voorkeur in één v/d Sjabloon-mappen Lokaties in sjabloon voor gegevens Excel Markeren met Bladwijzers Formuliervelden kan ook
Rapportage maken Word opstarten Zichtbaar of niet? Word al opgestart GetObject Word nog niet opgestart New (runtime error op GetObject!) Geldt niet voor Outlook, PowerPoint Zichtbaar of niet? Zien wat er gebeurt .Visible = True Performance .Visible = False Aparte procedure maken!
Rapportage maken Nieuwe rapportage maken Gegevens invullen Set doc = wrd.Documents.Add("<sjabloon>") Indien in Sjabloon-map pad niet nodig! Gegevens invullen Variabelen invullen in Bladwijzers doc.Bookmarks("Tijd").Range.Text = Tijd Bladwijzer gaat verloren!
Rapportage maken Document opslaan Call doc.SaveAs("Naam.doc") Wordt zonder waarschuwing overschreven!
Targets naar Outlook schrijven
Targets naar Outlook schrijven Outlook starten Gegevens naar Outlook Datum, begintijd, eindtijd, onderwerp Afspraak maken / aanpassen Bestaat er al een target-afspraak in Outlook? Zo ja, bestaande aanpassen Zo nee, nieuwe aanmaken EntryID bijhouden in Excel!
Targets naar Outlook schrijven Start Outlook Altijd maar één instantie van Outlook (al zijn meerdere vensters wel mogelijk) Daarom geen GetObject nodig Set olk = New Outlook.Application Set nsp = olk.GetNamespace("MAPI") Set fld = nsp.GetDefaultFolder(…) Gegevens naar Outlook NieuwID = SchrijfTargetNaarOutlook(…)
Targets naar Outlook schrijven Gegevens naar Outlook Uit: EntryID = "" ja bestaat afspraak al? In: EntryID target = 0? nee maak nieuwe afspraak nee vul gegevens in Uit: EntryID nee vind bestaande afspraak ja target = 0? verwijder afspraak ja Uit: EntryID = ""
Targets naar Outlook schrijven Afspraak maken/aanpassen Als afspraak nog niet bestaat maken Als afspraak bestaat aanpassen Hoe vind ik een afspraak in Outlook?? Unieke EntryID per item! .Find of .Restrict op de Items in een Folder Set itm = fld.Items.Find(filter) Set itms = fld.Items.Restrict(filter) Maar ja, dat filter…
Targets naar Outlook schrijven Filter bij Find / Restrict [Veldnaam] = "Waarde" Maar… geen wildcards en geen EntryID!! Bestaand veld misbruiken? AppointmentItem 95 velden Design-time beschikbaar 68 Bruikbaar in Restrict 48 Datatype String 8 Niet Read-only 5 (Body, Subject etc.)
Targets naar Outlook schrijven Filter bij Find / Restrict [Veldnaam] = "Waarde" Werkt wel met UserProperties! Dus hoe vind ik een AppointmentItem? UserProperty aanmaken op mapniveau UserProperty toevoegen aan AppointmentItems filter = "[UserProp] = ""waarde""" Set Afspraak = .Items.Find(filter) UserProperty: MyEntryID!!!
Targets naar Outlook schrijven Function VindAfspraak(EntryID) As AppointmentItem Dim Afspraak As AppointmentItem filter = "[MyEntryID] = """ & EntryID & """" Set Afspraak = fld.Items.Find(filter) Set VindAfspraak = Afspraak End Function
Automatisch werkbalk maken
Automatisch werkbalk maken Werkbalken in Office: CommandBars Set cmb = Application.CommandBars.Add(…) Belangrijke eigenschappen Hoe ziet de balk eruit? Position, Visible Is het de menubalk? Menubar (bij Add) Tijdelijk Temporary (bij Add)
Automatisch werkbalk maken Knoppen in Office: CommandBarControls Set btn = cmb.Controls.Add(…) Button, Popup, Combo Belangrijke eigenschappen: Hoe ziet knop eruit Caption, FaceID, Style Wat doet de knop OnAction Hoe vind ik hem terug? Tag macro 'MaakBalken'
Automatisch werkbalk maken Aanmaken bij openen document Private Sub Workbook_Open() Verwijderen (!) bij sluiten document Private Sub Workbook_BeforeClose(Cancel As Boolean) Bij verwijderen ook alle knoppen verwijderen Kunnen zijn verplaatst door gebruiker Vandaar de Tag! Application.CommandBars.FindControl Application.CommandBars.FindControls
Class modules
Class Modules Wat? Waarom? Class module: definitie van object "Object-geörienteerd programmeren in VBA" Waarom? Makkelijk herbruikbare code (bouwstenen) Encapsulation / black-box
Class Modules Ontwerpen Programmeren Gebruiken Interface Functionaliteit Programmeren Class module Gebruiken Bestaande code veel eenvoudiger
Class Modules OfficeApplicaties class Eenvoudig applicaties starten Access, Excel, Outlook, PowerPoint, Word Client-code vereenvoudigd: Dim wrd As Word.Application Dim oap As OfficeApplicaties Set oap = New OfficeApplicaties Call StartApplicatie(AppWord) Set wrd = oap.WordApplicatie
Class Modules OfficeApplicaties class Method StartApplicatie (met parameters Zichtbaar, NieuweInstantie) Method StopApplicatie Properties voor elke applicatie
Class Modules OutlookAgenda class Eenvoudig afspraken beheren vanuit VBA Zoeken, maken, wijzigen, verwijderen Gebruik makend van UserProperty Client-code vereenvoudigd: Dim age As OutlookAgenda Set age = New OutlookAgenda Call age.WijzigAfspraak(EntryID, …) Call age.VerwijderAfspraak(EntryID, …)
Class Modules OutlookAgenda class Methods: MaakAfspraak, VerwijderAfspraak, VindAfspraak, WijzigAfspraak Properties OutlookApplicatie en Selectieveld
Bladwijzers behouden
Bladwijzers behouden Bladwijzers in sjabloon voor invoegen gegevens Bladwijzers gaan verloren na invullen gegevens Soms wenselijk om bladwijzers te behouden Bijv. als meermalen gegevens ingevoegd
Bladwijzers behouden Eenmalige actie: Rpt.Bookmarks("Datum").Range.Text = "6-3-08" Bladwijzer behouden: Set bmk = Rpt.Bookmarks("Datum") Set rng = bmk.Range rng.Text = "6-3-08" Rpt.Bookmarks.Add "Datum", rng
Rapport automatisch e-mailen
Rapport automatisch e-mailen Geen methode voor binnen Word Outlook aanspreken E-mail aanmaken Set eml = olk.CreateItem(olMailItem) Attachment bijvoegen eml.Attachments.Add Rapport.FullName