Post on 13-May-2015
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 E5Excel:
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
Word:
Bladwijzers behouden bij het invullen
Word:
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
Do
Loop Until Cel.Formula = ""
Set Cel = Range("A2")
Datum = Cel.Value
Tijd = Cel.Offset(0,2).Value
Call Verwerk(Datum,Tijd)
Set Cel = Cel.Offset(1,0)
Lijst doorlopen en gebruiken
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 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 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.ApplicationSet nsp = olk.GetNamespace("MAPI")Set fld = nsp.GetDefaultFolder(…)
Gegevens naar Outlook NieuwID = SchrijfTargetNaarOutlook(…)
Targets naar Outlook schrijven
Gegevens naar Outlook
target = 0?
vulgegevens
in
bestaatafspraak
al?
In: EntryID
vindbestaandeafspraak
ja
verwijderafspraak
ja
Uit: EntryIDtarget = 0?nee
maaknieuwe
afspraaknee
nee
Uit: EntryID = ""
Uit: EntryID = ""ja
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 = AfspraakEnd Function
Automatisch werkbalk maken
Automatisch werkbalk maken
Werkbalken in Office: CommandBarsSet 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: CommandBarControlsSet 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 documentPrivate Sub Workbook_Open()
Verwijderen (!) bij sluiten documentPrivate Sub Workbook_BeforeClose(Cancel As Boolean)
Bij verwijderen ook alle knoppen verwijderen Kunnen zijn verplaatst door gebruiker Vandaar de Tag! Application.CommandBars.FindControlApplication.CommandBars.FindControls
Class modules
Class Modules
Wat? Class module: definitie van object "Object-geörienteerd programmeren in VBA"
Waarom? Makkelijk herbruikbare code (bouwstenen) Encapsulation / black-box
Class Modules
Ontwerpen 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.ApplicationDim oap As OfficeApplicatiesSet oap = New OfficeApplicatiesCall 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 OutlookAgendaSet age = New OutlookAgendaCall 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.Rangerng.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 aanmakenSet eml = olk.CreateItem(olMailItem)
Attachment bijvoegeneml.Attachments.Add Rapport.FullName