1 / 40

VBA Office

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.

gryta
Download Presentation

VBA Office

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. VBA Office Sessie E5 Floris M. Kleijne

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

  3. Case: Telemarketing-actie

  4. Onderwerpen sessie E5

  5. Vragen van u?

  6. Bedankt voor uw aandacht! • Floris Kleijne • www.i-teach.nl • www.nationaleofficedag.nl/info_e5.htm

  7. Lijst doorlopen en gebruiken

  8. Lijst doorlopen en gebruiken • Begin bij de eerste cel • Handel die regel helemaal af • Ga naar de volgende cel • Herhaal tot lege cel

  9. Lijst doorlopen en gebruiken 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)

  10. Rapportage maken

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

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

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

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

  15. Rapportage maken • Document opslaan • Call doc.SaveAs("Naam.doc") • Wordt zonder waarschuwing overschreven!

  16. Targets naar Outlook schrijven

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

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

  19. Uit: EntryID = "" ja bestaat afspraak al? target = 0? maak nieuwe afspraak vul gegevens in In: EntryID nee nee Uit: EntryID ja nee target = 0? vind bestaande afspraak verwijder afspraak Uit: EntryID = "" ja Targets naar Outlook schrijven • Gegevens naar Outlook

  20. 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…

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

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

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

  24. Automatisch werkbalk maken

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

  26. macro 'MaakBalken' 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

  27. 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.FindControlApplication.CommandBars.FindControls

  28. Class modules

  29. Class Modules • Wat? • Class module: definitie van object • "Object-geörienteerd programmeren in VBA" • Waarom? • Makkelijk herbruikbare code (bouwstenen) • Encapsulation / black-box

  30. Class Modules • Ontwerpen • Interface • Functionaliteit • Programmeren • Class module • Gebruiken • Bestaande code veel eenvoudiger

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

  32. Class Modules • OfficeApplicaties class • Method StartApplicatie(met parameters Zichtbaar, NieuweInstantie) • Method StopApplicatie • Properties voor elke applicatie

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

  34. Class Modules • OutlookAgenda class • Methods:MaakAfspraak, VerwijderAfspraak, VindAfspraak, WijzigAfspraak • Properties OutlookApplicatie en Selectieveld

  35. Bladwijzers behouden

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

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

  38. Rapport automatisch e-mailen

  39. Rapport automatisch e-mailen • Geen methode voor binnen Word • Outlook aanspreken • E-mail aanmakenSet eml = olk.CreateItem(olMailItem) • Attachment bijvoegeneml.Attachments.Add Rapport.FullName

More Related