VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie Eén maand, 1.500 telefoontjes ...

40
VBA Office Sessie E5 Floris M. Kleijne

Transcript of VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie Eén maand, 1.500 telefoontjes ...

Page 1: VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie  Eén maand, 1.500 telefoontjes  Werkdagen en dagelijkse targets in Excel  Na elke.

VBA Office

Sessie E5

Floris M. Kleijne

Page 2: VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie  Eén maand, 1.500 telefoontjes  Werkdagen en dagelijkse targets in Excel  Na elke.

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

Page 3: VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie  Eén maand, 1.500 telefoontjes  Werkdagen en dagelijkse targets in Excel  Na elke.

Case: Telemarketing-actie

Page 4: VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie  Eén maand, 1.500 telefoontjes  Werkdagen en dagelijkse targets in Excel  Na elke.

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…?

Page 5: VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie  Eén maand, 1.500 telefoontjes  Werkdagen en dagelijkse targets in Excel  Na elke.

Vragen van u?

Page 6: VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie  Eén maand, 1.500 telefoontjes  Werkdagen en dagelijkse targets in Excel  Na elke.

Bedankt voor uw aandacht!

Floris Kleijne www.i-teach.nl www.nationaleofficedag.nl/info_e5.htm

Page 7: VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie  Eén maand, 1.500 telefoontjes  Werkdagen en dagelijkse targets in Excel  Na elke.
Page 8: VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie  Eén maand, 1.500 telefoontjes  Werkdagen en dagelijkse targets in Excel  Na elke.

Lijst doorlopen en gebruiken

Page 9: VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie  Eén maand, 1.500 telefoontjes  Werkdagen en dagelijkse targets in Excel  Na elke.

Lijst doorlopen en gebruiken

Begin bij de eerste cel Handel die regel helemaal af Ga naar de volgende cel Herhaal tot lege cel

Page 10: VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie  Eén maand, 1.500 telefoontjes  Werkdagen en dagelijkse targets in Excel  Na elke.

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

Page 11: VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie  Eén maand, 1.500 telefoontjes  Werkdagen en dagelijkse targets in Excel  Na elke.

Rapportage maken

Page 12: VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie  Eén maand, 1.500 telefoontjes  Werkdagen en dagelijkse targets in Excel  Na elke.

Rapportage maken

Voorbereiding: rapportagesjabloon Word opstarten Nieuwe rapportage maken Gegevens in rapportage invullen Rapportage opslaan

Page 13: VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie  Eén maand, 1.500 telefoontjes  Werkdagen en dagelijkse targets in Excel  Na elke.

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

Page 14: VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie  Eén maand, 1.500 telefoontjes  Werkdagen en dagelijkse targets in Excel  Na elke.

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!

Page 15: VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie  Eén maand, 1.500 telefoontjes  Werkdagen en dagelijkse targets in Excel  Na elke.

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!

Page 16: VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie  Eén maand, 1.500 telefoontjes  Werkdagen en dagelijkse targets in Excel  Na elke.

Rapportage maken

Document opslaan Call doc.SaveAs("Naam.doc") Wordt zonder waarschuwing overschreven!

Page 17: VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie  Eén maand, 1.500 telefoontjes  Werkdagen en dagelijkse targets in Excel  Na elke.

Targets naar Outlook schrijven

Page 18: VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie  Eén maand, 1.500 telefoontjes  Werkdagen en dagelijkse targets in Excel  Na elke.

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!

Page 19: VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie  Eén maand, 1.500 telefoontjes  Werkdagen en dagelijkse targets in Excel  Na elke.

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(…)

Page 20: VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie  Eén maand, 1.500 telefoontjes  Werkdagen en dagelijkse targets in Excel  Na elke.

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

Page 21: VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie  Eén maand, 1.500 telefoontjes  Werkdagen en dagelijkse targets in Excel  Na elke.

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…

Page 22: VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie  Eén maand, 1.500 telefoontjes  Werkdagen en dagelijkse targets in Excel  Na elke.

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

Page 23: VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie  Eén maand, 1.500 telefoontjes  Werkdagen en dagelijkse targets in Excel  Na elke.

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!!!

Page 24: VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie  Eén maand, 1.500 telefoontjes  Werkdagen en dagelijkse targets in Excel  Na elke.

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

Page 25: VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie  Eén maand, 1.500 telefoontjes  Werkdagen en dagelijkse targets in Excel  Na elke.

Automatisch werkbalk maken

Page 26: VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie  Eén maand, 1.500 telefoontjes  Werkdagen en dagelijkse targets in Excel  Na elke.

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)

Page 27: VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie  Eén maand, 1.500 telefoontjes  Werkdagen en dagelijkse targets in Excel  Na elke.

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'

Page 28: VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie  Eén maand, 1.500 telefoontjes  Werkdagen en dagelijkse targets in Excel  Na elke.

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

Page 29: VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie  Eén maand, 1.500 telefoontjes  Werkdagen en dagelijkse targets in Excel  Na elke.

Class modules

Page 30: VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie  Eén maand, 1.500 telefoontjes  Werkdagen en dagelijkse targets in Excel  Na elke.

Class Modules

Wat? Class module: definitie van object "Object-geörienteerd programmeren in VBA"

Waarom? Makkelijk herbruikbare code (bouwstenen) Encapsulation / black-box

Page 31: VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie  Eén maand, 1.500 telefoontjes  Werkdagen en dagelijkse targets in Excel  Na elke.

Class Modules

Ontwerpen Interface Functionaliteit

Programmeren Class module

Gebruiken Bestaande code veel eenvoudiger

Page 32: VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie  Eén maand, 1.500 telefoontjes  Werkdagen en dagelijkse targets in Excel  Na elke.

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

Page 33: VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie  Eén maand, 1.500 telefoontjes  Werkdagen en dagelijkse targets in Excel  Na elke.

Class Modules

OfficeApplicaties class Method StartApplicatie

(met parameters Zichtbaar, NieuweInstantie) Method StopApplicatie Properties voor elke applicatie

Page 34: VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie  Eén maand, 1.500 telefoontjes  Werkdagen en dagelijkse targets in Excel  Na elke.

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, …)

Page 35: VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie  Eén maand, 1.500 telefoontjes  Werkdagen en dagelijkse targets in Excel  Na elke.

Class Modules

OutlookAgenda class Methods:

MaakAfspraak, VerwijderAfspraak, VindAfspraak, WijzigAfspraak

Properties OutlookApplicatie en Selectieveld

Page 36: VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie  Eén maand, 1.500 telefoontjes  Werkdagen en dagelijkse targets in Excel  Na elke.

Bladwijzers behouden

Page 37: VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie  Eén maand, 1.500 telefoontjes  Werkdagen en dagelijkse targets in Excel  Na elke.

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

Page 38: VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie  Eén maand, 1.500 telefoontjes  Werkdagen en dagelijkse targets in Excel  Na elke.

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

Page 39: VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie  Eén maand, 1.500 telefoontjes  Werkdagen en dagelijkse targets in Excel  Na elke.

Rapport automatisch e-mailen

Page 40: VBA Office Sessie E5 Floris M. Kleijne. Case: Telemarketing-actie  Eén maand, 1.500 telefoontjes  Werkdagen en dagelijkse targets in Excel  Na elke.

Rapport automatisch e-mailen

Geen methode voor binnen Word Outlook aanspreken

E-mail aanmakenSet eml = olk.CreateItem(olMailItem)

Attachment bijvoegeneml.Attachments.Add Rapport.FullName