versie: 29/11/2010
© W. Philips, Universiteit Gent, 2000-2011
Copyright notice Didactisch materiaal bij de cursus
Kantoorautomatisering http://telin.UGent.be/~philips/kantoorautomatisering/ Academiejaar 2010-2011
Prof. dr. ir. W. Philips
[email protected]
UNIVERSITEIT GENT
This powerpoint presentation was developed as an educational aid to the renewed course “Office automation” (Kantoorautomatisering), taught at the University of Gent, Belgium as of the year 2000. This presentation may be used, modified and copied free of charge for non-commercial purposes by individuals and non-for-profit organisations and distributed free of charge by individuals and non-for-profit organisations to individuals and non-for-profit organisations, either in electronic form on a physical storage medium such as a CD-rom, provided that the following conditions are observed: 1. If you use this presentation as a whole or in part either in original or modified form, you should include the copyright notice “© W. Philips, Universiteit Gent, 2000-2002” in a font size of at least 10 point on each slide; 2. You should include this slide (with the copyright conditions) once in each document (by which is meant either a computer file or a reproduction derived from such a file); 3. If you modify the presentation, you should clearly state so in the presentation; 4. You may not charge a fee for presenting or distributing the presentation, except to cover your costs pertaining to distribution. In other words, you or your organisation should not intend to make or make a profit from the activity for which you use or distribute the presentation; 5. You may not distribute the presentations electronically through a network (e.g., an HTTP or FTP server) without express permission by the author. In case the presentation is modified these requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the presentation, and can be reasonably considered independent and separate works in themselves, then these requirements do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the presentation, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. In particular note that condition 4 also applies to the modified work (i.e., you may not charge for it). “Using and distributing the presentation” means using it for any purpose, including but not limited to viewing it, presenting it to an audience in a lecture, distributing it to students or employees for self-teaching purposes, ... Use, modification, copying and distribution for commercial purposes or by commercial organisations is not covered by this licence and is not permitted without the author’s consent. A fee may be charged for such use. Disclaimer: Note that no warrantee is offered, neither for the correctness of the contents of this presentation, nor to the safety of its use. Electronic documents such as this one are inherently unsafe because they may become infected by macro viruses. The programs used to view and modify this software are also inherently unsafe and may contain bugs that might corrupt the data or the operating system on your computer. If you use this presentation, I would appreciate being notified of this by email. I would also like to be informed of any errors or omissions that you discover. Finally, if you have developed similar presentations I would be grateful if you allow me to use these in my course lectures. Prof. dr. ir. W. Philips Department of Telecommunications and Information Processing University of Gent St.-Pietersnieuwstraat 41, B9000 Gent, Belgium
E-mail:
[email protected] Fax: 32-9-264.42.95 Tel: 32-9-264.33.85
Telecommunicatie en Informatieverwerking
11a.2
versie: 29/11/2010
© W. Philips, Universiteit Gent, 2000-2011
De VBA omgeving Automatiseren en aanpassen van de Office software
VB=Visual Basic= een objectgeoriënteerde programmeertaal zoals JAVA, C, … waarmee men “stand-alone” programma’s maakt = aparte (dure) software VBA= Visual Basic for Applications Programmeertaal
Visual Basic for Applications
gekoppeld aan de office programma’s
Compatibiliteit VBA •compatibel met VB t.e.m. VB versie 6 •niet compatibel met VB.NET •niet meer ondersteund in Mac OS X sedert 2008 •zal verdwijnen uit office 2009 •blijven bestaande toepassingen werken? 11a.4
versie: 29/11/2010
© W. Philips, Universiteit Gent, 2000-2011
De VBA omgeving
versie: 29/11/2010
© W. Philips, Universiteit Gent, 2000-2011
Waarschuwing Unless you are a skilled programmer, avoid trying to automate anything but the most routine PowerPoint tasks with VBA.
Belangrijk: in de VBA-omgeving heb je toegang tot alle interne datastructuren in b.v. een powerpoint-presentatie •voorbeelden van datastructuren: een slide, een object op een slide, een presentatie, een rekenblad, … •een menu
Compared with Word and Excel, its object model is incomplete. There’s no easy way to copy macros from one presentation to another, shortof copying and pasting code into the Visual Basic Editor.
•je kan de datastructuren manipuleren, b.v.: de kleur of de oriëntatie van een lijn veranderen, een slide toevoegen, …
The lack of a global template makes it difficult to manage macros, and there is precious little documentation asidefrom the very sparse Developer Reference available via Online Help.
11a.5
versie: 29/11/2010
11a.6
© W. Philips, Universiteit Gent, 2000-2011
Te bestuderen De VBA-programmeertaal: •syntax •controle-structuren Het VBA-objectmodel •datastructuren •en de geassocieerde methoden en functies De koppeling van VBA-procedures aan de office interface •hoe start je functies en subroutines vanuit b.v. de powerpoint interface? •hoe koppel je ze aan knopjes, menu’s of toetsen? Niet echt nuttig meer in Office 2007 Hoe trek je je plan? •macro recorder voor zover die nog werkt •on-line help
Automatiseren en aanpassen van de Office software
De VBA-interface
11a.7
versie: 29/11/2010
© W. Philips, Universiteit Gent, 2000-2011
versie: 29/11/2010
De verschillende VBA-vensters
Het projectvenster
De VBA-editor bevat verschillende vensters die al dan niet verborgen kunnen zijn op een bepaald ogenblik •de project explorer toont de momenteel beschikbare (geopende) documenten en de objecten die ze bevatten op het hoogste hiërarchisch niveau •de object browser toont de datastructuren •het code venster toont de procedures •het properties venster laat toe om allerlei eigenschappen in te stellen van modules, formulieren, … •in het immediate venster kan je commando’s uitvoeren Gebruik het view menu om van het ene naar het andere venster om te schakelen
Excel add-ins
© W. Philips, Universiteit Gent, 2000-2011
Werken met modules
Een VBA-project bevat •objecten: datastructuren van b.v. een werkblad, of zelf toegevoegde datastructuren •functies en subroutines De functies en subroutines worden gegroepeerd in modules De modules worden gegroepeerd volgens de documenten waarin ze zijn opgeslagen
Open werkblad(en) module in Book1.xls
11a.9
versie: 29/11/2010
© W. Philips, Universiteit Gent, 2000-2011
versie: 29/11/2010
11a.10
© W. Philips, Universiteit Gent, 2000-2011
Het codevenster
Een nieuwe module toevoegen •selecteer het gewenste bestand in de project explorer •gebruik insert-module Een module een nieuwe naam geven •selecteer de module •ga naar het properties venster (view menu) •verander de waarde van “naam”
11a.11
Het codevenster toont de functies en procedures die in een bepaalde VBA-module gedefinieerd zijn Je kan er nieuwe code aan toevoegen
11a.12
versie: 29/11/2010
© W. Philips, Universiteit Gent, 2000-2011
versie: 29/11/2010
© W. Philips, Universiteit Gent, 2000-2011
Het “Immediate” venster
On-line help
In dit venster kan men een VBA-uitdrukking intikken; deze wordt uitgevoerd van zodra ze volledig is •een VBA-functie uitvoeren:
Concepten: wat is een functie, … Elementaire taken, vooral i.v.m. de VBA-gebruikersinterface
Worksheets("Sheet1").Name=“zorro”
•de waarde van een variabele tonen met “?” -intikken: ? Workbooks("Book1.xls").Path -resultaat: C:\WINNT\Profiles\philips\Desktop
Waaruit bestaat een bepaalde VBA-datastructuur, wat doet een bepaalde VBA-functie …
Opmerking: niet alle statements en commando’s zijn mogelijk in het immediate venster immediate venster •Een If blok is niet toegelaten •en Dim is niet toegelaten •… 11a.13
Selecteer een bepaald woord in b.v. het codevenster en druk F1 Kies visual basic help in het menu •zoek of blader door de topics •consulteer de voorbeelden! 11a.14
versie: 29/11/2010
© W. Philips, Universiteit Gent, 2000-2011
Variabelen en datatypes Automatiseren en aanpassen van de Office software
De VBA-programmeertaal
Datatypes: o.a. Integer, Double, Date, Variant, … Een Variant kan getallen, tekst, datums, … bevatten •het “huidige datatype” wordt intern bijgehouden, het wordt automatisch geconverteerd waar nodig, en het kan veranderen tijdens de uitvoering van het programma •vraagt wel minstens 16 bytes en is trager in gebruik •kan handig zijn b.v. om onderscheid te maken tussen “0” en niet-geïnitialiseerd: niet-geïnitialiseerde Variant is Empty Een variabele wordt gedeclareerd met Dim … As Variabelen Dim tt As Date Dim qq variant
•als het type niet wordt vermeld is het een Variant •niet gedeclareerde variabelen worden ook Variant 11a.16
versie: 29/11/2010
© W. Philips, Universiteit Gent, 2000-2011
versie: 29/11/2010
Speciale waarden
Constanten
Speciale waarden van een variant: •Empty: niet-geïnitialiseerd •Null: betekent “bevat geen geldige data”; deze waarde wordt expliciet toegekend (b.v. y=Null) Volgens de documentatie heeft elke uitdrukking waarin Null voorkomt als resultaat Null, maar dat klopt niet volledig • y= Null or False ⇒ y=Null ‘klopt • y= Null or True ⇒ y=True ‘klopt niet • y= True or (Null and False) ⇒ y=True ‘klopt niet In een if-test wordt het helemaal absurd; b.v. met y=Null: • if y=Null then z=True else z=False ⇒ z=False • if y=True then z=True else z=False ⇒ z=False • if y<>True then z=True else z=False ⇒ z=False • if IsNull(y) then z=True else z=False⇒ z=True “1984”, George Orwell: Doublethink is a "vast system of mental cheating," the "power of holding two contradictory beliefs in one's mind simultaneously, and accepting both of them.“ 11a.17
versie: 29/11/2010
© W. Philips, Universiteit Gent, 2000-2011
© W. Philips, Universiteit Gent, 2000-2011
Arrays en Collections…
Constante: is een variabele die na initialisatie niet meer kan veranderd worden Sub InsertPP() ’Excel voorbeeld Const pp = "Pietje Potlood" Range("A1").FormulaR1C1 = pp End Sub
Nuttig voor parameters die op meerdere plaatsen in de code worden gebruikt •men kan alle waarden in één keer veranderen •de waarde is overal exact dezelfde (geen inconsistenties door tikfouten) •efficiënter dan een variabele: de compiler/interpreter weet dat de waarde en zijn type nooit zal veranderen
11a.18
versie: 29/11/2010
© W. Philips, Universiteit Gent, 2000-2011
… Arrays en Collections Een array is een geïndexeerde verzameling van veranderlijken •van hetzelfde type: allemaal double’s of integers of variants •geindexeerd met numerieke gehele indices uit een interval bvan waarden, b.v. 3…18
Een array-veranderlijke: •Dim A(5) As String: 5 string variabelen •Gebruik: If A(2)=“hello” … Statische vs. dynamische arrays: •Statisch: Dim A(5) As String ⇒ vast aantal elementen •Dynamisch: Dim A() As String ⇒ variabel aantal elementen De grootte van een array kan gewijzigd worden met Redim. Dit werkt echter enkel voor dynamische arrays •Redim A(7) maakt een nieuwe, lege en grotere A •Redim Preserve A(7) bewaart de bestaande waarden in A
Collection: een verzameling objecten die als een geheel worden behandeld; de objecten van een collection •hoeven niet hetzelfde datatype te hebben •kunnen met niet-numerieke waarden worden geïndexeerd •Workbooks is de verzameling van alle open rekenbladen •Workbooks(2) is het tweede rekenblad uit de verzameling •Workbooks(“hallo.xls”) is het rekenblad hallo.xls 11a.19
11a.20
versie: 29/11/2010
© W. Philips, Universiteit Gent, 2000-2011
versie: 29/11/2010
Procedures: overzicht
Functies Function tst(x As Double, y As Double) As Integer tst = x * y ’produceert x*y, geheel afgerond End Function tst … Datatypes worden aangegeven met het woord As
Een procedure is te vergelijken met een functie in b.v. Java In VBA onderscheidt men vier soorten procedures •subroutines zijn procedures die geen waarde terugleveren ⇒ ze kunnen o.a. (en soms) gebruikt worden als macro’s Sub f() … End Sub
Teruggegeven waarden •de naam van de functie kan binnen de functie ook als variabele worden gebruikt; bij het einde van de functieoproep wordt die waarde teruggegeven •Als een datatype niet wordt opgegegeven is het Variant Argumenten worden normaal doorgegeven als referenties, tenzij ze voorafgegaan worden door ByVal:
Sub g(a,b,c) … End Sub
•functies: zijn procedures die wel waarden terugleveren ⇒ ze kunnen b.v. gebruikt worden als werkbladfuncties in Excel of als hulpfuncties in subroutines Function tst(x As Double, y As Double) tst = x * y End Function
•methodes: zijn acties (speciale functies, …) die kunnen worden toegepast op een object Workbooks(“hallo.xls”).Close sluit een rekenblad •properties
versie: 29/11/2010
© W. Philips, Universiteit Gent, 2000-2011
Function y(x As Double) x=13 … End Function
Function y(ByVal x as Double) x=13 … End Function
•de code x=12: z=y(x) zal in het eerste geval de waarde van x veranderen in 13; in het tweede geval niet 11a.21
© W. Philips, Universiteit Gent, 2000-2011
Class en Type
11a.22
versie: 29/11/2010
© W. Philips, Universiteit Gent, 2000-2011
Macro’s, expressions statements Macro’s zijn procedures zonder argumenten
VBA ondersteunt net als C++ structuren en klassen Een type is te vergelijken met een C++-structuur
Sub myfirstmacro() End Sub
Type myrecord Naam As String Voornaam As String Telefoon As Long End Type Dim myrecord r: r.Naam=… r.Telefoon=…
Een klasse is een structuur waaraan methoden (=functies of subroutines in een klasse) worden toegevoegd •te vergelijken met b.v. een Java- of een C++-klasse ⇒ we gaan hier niet verder op in
11a.23
•Ze kunnen worden opgeroepen vanuit de gebruikersinterface van de Office programma’s Een statement is een commando dat VBA kan uitvoeren •b.v.: for, select, … Een expression is een uitdrukking die kan uitgerekend worden tot een enkele waarde •b.v.: x*y+z of True and False of "hello " + "world"
11a.24
versie: 29/11/2010
© W. Philips, Universiteit Gent, 2000-2011
versie: 29/11/2010
© W. Philips, Universiteit Gent, 2000-2011
Properties…
… Properties
Property: gedraagt zich als een slimme variabele, die ofwel enkel kan worden gelezen ofwel gelezen en geschreven • Workbooks(“hallo.xls”).Path is de naam van de map (directory) waarin hallo.xls zich bevindt • Sheets(1).Name=“zorro” verandert de naam van het eerste blad in zorro • Sheets("Sheet1").Name=“zorro” verandert de naam van Sheet1 in zorro Een property wordt gedefinieerd door een Let en Get functie te definiëren • b.v.: yesterday=1 roept de Let functie van yesterday op • en: tst=yesterday roept de Get functie van yesterday op
Properties zijn dus functies die op een speciale manier worden opgeroepen
properties 11a.25
versie: 29/11/2010
© W. Philips, Universiteit Gent, 2000-2011
Scope
Property Get Yesterday() As Date Yesterday=Date-1 End Property Property Let Yesterday(NewDate) As Date Date=NewDate+1 End Property
Ze gedragen zich dus als variabelen wiens gebruik neveneffecten kan hebben •men kan b.v. bepaalde waarden niet toelaten (er b.v. voor zorgen dat yesterday=-1 een foutmelding oplevert) •men kan in een aparte teller bijhouden hoe dikwijls de variabele werd gebruikt •…
11a.26
versie: 29/11/2010
© W. Philips, Universiteit Gent, 2000-2011
Functie- en procedureoproepen
Procedures, variabelen en constanten hebben een bepaalde scope, d.w.z. een context waarin ze kunnen gebruikt worden •variabelen en constanten gedeclareerd in een procedure zijn enkel lokaal binnen die procedure beschikbaar •procedures en variabelen, constanten gedeclareerd buiten een procedure kunnen gedeclareerd worden als -Private ⇒ ze zijn enkel zichtbaar in de huidige module -Public ⇒ ze zijn ook zichtbaar in andere modules Private Function tst(x, y) … End Function
VBA-functieoproepen kunnen kunnen volgens verschillende syntaxen worden opgeroepen optionele argumenten
Voorbeeld: •MsgBox(prompt [, buttons] [, title] [, helpfile, context]) •Manieren van oproepen boxes -volgens positie van de argumenten: MsgBox "Your answer is correct!",0,"Answer Box"
-volgens naam van de argumenten: MsgBox Title:="Answer Box", Prompt:="Your answer is correct!"
⇒ Dit is o.a. nuttig om b.v. hulpfuncties te verbergen in de excel “user-defined” functielijst (of hulpmacro’s in de “macro’s” lijst)
-functienotatie is vereist als resultaat functie wordt gebruikt: myVar = MsgBox(Prompt:="I enjoy my job.", _ Title:="Answer Box", Buttons:=4) myVar = MsgBox("I enjoy my job.",4,"Answer Box“) 11a.27
Voor meer details, zie de help over syntax
11a.28
versie: 29/11/2010
© W. Philips, Universiteit Gent, 2000-2011
With
versie: 29/11/2010
© W. Philips, Universiteit Gent, 2000-2011
If … Then … ElseIf … Else … EndIf
Het With statement laat toe de namen van datastructuren af te korten: AddNameToFooter Sub AddNameToFooter()’Excel voorbeeld UserName = InputBox("What is your name?", "Input Name") With ActiveSheet.PageSetup .LeftHeader = "" Afkorting voor: .RightHeader = "" ActiveSheet.PageSetup.LeftHeader .CenterHeader = "" .LeftFooter = UserName .CenterFooter = "" .RightFooter = "Page &P of &N“ End With End Sub
Function ABC(x As Integer) As String If x >= 12 Then ABC = "A" ElseIf x >= 10 Then ABC = "B" ABC Else ABC = "C" End If End Function
Opmerkingen: •<> betekent “verschillend van” •De functie IIf is soms een compacter alternatief: CheckIt = IIf(TestMe > 1000, "Large", "Small")
11a.29
versie: 29/11/2010
© W. Philips, Universiteit Gent, 2000-2011
Do Until … Loop selecteer een rechthoekig bereik van 4x1 cellen, met de “huidige” cel in de linkerbovenhoek Sub AddBorders() AddBorders ActiveCell.Range("A1:D1").Select Do Until ActiveCell.Value = "" With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous de volgende commado’s .Weight = xlThick slaan op de benedenranden .ColorIndex = xlAutomatic van de geselecteerde cellen End With ActiveCell.Offset(2, 0).Range("A1:D1").Select selecteer 4x1 cellen 2 rijen beneden Loop de momenteel geselecteerde cel End Sub
Deze macro “onderlijnt” groepen van 4 cellen op alternerende rijen, maar stopt als hij een lege cel tegenkomt 11a.31
11a.30
versie: 29/11/2010
© W. Philips, Universiteit Gent, 2000-2011
Opmerking Stel dat de huidige cell D3 is ActiveCell.Range("A1:D1") ⇒ D3:G3 ActiveCell.Range("A2:D2") ⇒ D4:G4 ActiveCell.Range(“B2:E2") ⇒ E4:H4 De Range property gedraagt zich als een soort offsetfunctie: •het eerste deel van het argument duidt een verschuiving naar beneden en rechts aan: b.v. “B2:E2” ⇒ B2; B2 is de cell op de tweede rij en de tweede kolom, d.w.z. op positie (1,1) ⇒ ga vanaf de huidige cel één rij naar beneden en één kolom naar rechts ⇒ E4 •het volledige argument geeft aan welk bereik van cellen het resultaat is: b.v. “B2:E2” ⇒ 4 naast elkaar liggende cellen met E4 in de linkerbovenhoek ⇒ E4:H4 11a.32
versie: 29/11/2010
© W. Philips, Universiteit Gent, 2000-2011
versie: 29/11/2010
Do Until … Loop
© W. Philips, Universiteit Gent, 2000-2011
For Each … In… Next
voorkom dat het scherm Sub RemoveRowsWithZero() wordt aangepast zolang Application.ScreenUpdating = False de macro loopt Do Until ActiveCell.Value = "" ⇒ sneller If ActiveCell.Value = 0 Then ActiveCell.EntireRow.Delete Else ActiveCell.Offset(1, 0).Select selecteer de cel 1 rij beneden de End If momenteel geselecteerde cel Loop End Sub RemoveRowsWithZero
11a.33
Sub ReadOrDead() For Each sli In ActivePresentation.Slides voor elk object op elke slide For Each shp In sli.Shapes With shp If .HasTextFrame = msoTrue Then If .TextFrame.HasText = msoTrue Then .TextFrame.TextRange.Font.Color.RGB = RGB(255, 0, 0) End If als het object een TextFrame heeft en effectief tekst bevat, maak de tekst dan rood End If End With Next ReadOrDead Next End Sub For each itereert over alle objecten in een collection
versie: 29/11/2010
11a.34
© W. Philips, Universiteit Gent, 2000-2011
Powerpoint: voorbeeld Automatiseren en aanpassen van de Office software
De VBA objectmodellen
Het objectmodel bepaalt welke deelobjecten een bepaald object heeft en welke methoden er kunnen op toegepast worden Objecten worden genoteerd als volgt: ActivePresentation. Slides(3).Shapes.Title.TextFrame.TextRange="zorro“
=de tekst van de titel van de 3e slide van de actieve presentatie •dikwijls vraagt het wat zoekwerk (in de on-line help of de object browser) om de juiste structuur te achterhalen •je kan ook via het opnemen van een gepaste macro één en ander leren over de onderdelen van objecten
Shape
TextFrame
TextRange
Line
Font
Fill
Length
11a.36
versie: 29/11/2010
© W. Philips, Universiteit Gent, 2000-2011
PowerPoint Automatiseren en aanpassen van de Office software
properties geassocieerd aan een “slide”object
VBA-functies en -subroutines koppelen aan de Office interface
Dit venster is de object browser subroutines geassocieerd aan een “slide”object 11a.37
versie: 29/11/2010
© W. Philips, Universiteit Gent, 2000-2011
Aanpassen menus en werkbalken
versie: 29/11/2010
© W. Philips, Universiteit Gent, 2000-2011
Office 2007 vs. Office 2003
In Office 2000/2003 kan je via customize toolbars en menu’s aanpassen •bestaande commando’s of macro’s toevoegen aan of verwijderen uit menu’s of toolbars Methode: kies tools-customize •in het blad toolbars kan je kiezen welke toolbars zichtbaar zijn en welke niet •in het blad commands kan je alle mogelijke commando’s terugvinden; je sleept vervolgens een gewenst commando naar een toolbar of een menu naar keuze; tenslotte kan je een icoon en een naam ingeven In MSWord kan je zelfs een toetsencombinatie associëren aan een bepaald commando Opmerking: toolbars kan je naar gelijk welke plaats slepen
11a.39
Macro’s werken enkel in “macro-enabled” bestandsformaten zoals deze met een “pptm” extensie Macro recorder •bestaat enkel nog in Excel en Word •werd verwijderd uit PowerPoint Toevoegen van extra menu's is niet langer gemakkelijk Items toevoegen aan "quick access" toolbar kan, maar vereist sterk visueel geheugen (geen tekst!)
11a.40
versie: 29/11/2010
© W. Philips, Universiteit Gent, 2000-2011
versie: 29/11/2010
Code koppelen aan de interface
Code uitvoeren bij openen
Macro’s worden gekoppeld aan •menu items en knoppen •action buttons •in Word en Excel: toetsencombinaties Macro’s kunnen ook worden uitgevoerd via Tools-Macro’s Functies kunnen in Excel worden opgeroepen vanuit formules in cellen •ze verschijnen onder de afdeling user defined •Ook functies uit andere bestanden kunnen worden opgeroepen, b.v.: =3*voorbeelden.xls!tst(12,13)
© W. Philips, Universiteit Gent, 2000-2011
WorkBook_Open
11a.41
Je kan een VBA-macro automatisch laten uitvoeren als bepaalde “events” optreden (openen of berekenen werkblad, …) Excel voert b.v. bij het openen van een werkblad de macro WorkBook_Open uit; deze moet wel ingevoegd worden in het ThisWorkBook object en niet in een module! Opmerking: het code-venster toont bovenaan rechts een keuzelijst waarin je alle mogelijke events kan terugvinden! 11a.42
versie: 29/11/2010
© W. Philips, Universiteit Gent, 2000-2011
Macro’s opnemen Automatiseren en aanpassen van de Office software
Programmeren in VBA
De macrorecorder vertaalt een reeks Office commando’s (b.v. operaties in powerpoint) naar VBA instructies Dergelijke macro’s zijn zelden onmiddellijk bruikbaar •ze hangen b.v. te sterk af van de context •als ze worden toegepast op een object van een ander type treden er fouten op … •bepaalde operaties (b.v. muisbewegingen) worden niet opgenomen Toch is het opnemen van macro’s nuttig •ze tonen de volledige namen van de gebruikte objecten (vormen op een slide, cellen in een rekenblad, …) •met enige aanpassing krijgt men snel een bruikbare macro opgenomen/aangepast
11a.44
versie: 29/11/2010
© W. Philips, Universiteit Gent, 2000-2011
versie: 29/11/2010
Debuggen
© W. Philips, Universiteit Gent, 2000-2011
Tips
Door links van een codelijn te klikken kan je een breakpoint invoegen Bij het uitvoeren een macro of een functie stopt VBA Je kan dan •in het “immediate” venster de waarden van variabelen bekijken •de code verder lijn per lijn uitvoeren en zien wat er gebeurt
Tik alle namen van objecten en functies in met kleine letters; VBA verandert waar nodig letters in hoofdletters •dit gaat sneller •je kan zo controleren of VBA de naam herkent aan het feit of er letters veranderen in hoofdletters of niet Bij het intikken van de namen van datastructuren toont VBA dikwijls een lijst met mogelijke aanvullingen •gebruik de muis om de juiste aanvulling te selecteren en druk vervolgens op TAB •of tik gewoon verder
11a.45
versie: 29/11/2010
© W. Philips, Universiteit Gent, 2000-2011
Enkele voorbeelden
11a.46
versie: 29/11/2010
© W. Philips, Universiteit Gent, 2000-2011
VBA-routines op het web Microsoft Office 2000/Visual Basic Programmer's Guide, http://msdn.microsoft.com/library/default.asp?URL=/library/officedev/ode opg/deovroffice2000visualbasicprogrammersguide.htm •informatie uit het hol van de leeuw Excel & VBA tips from Erlandsen Data Consulting, http://www.erlandsendata.no/english/ •voorbeelden van complexe VBA code in excel The Excel Logic Page, http://www.xl-logic.com/pages/vba.html •allerlei excel-functies en macro’s in VBA J-Walk and Associates. The spreadsheet page, http://j-walk.com/ss/ •allerlei informatie omtrent spreadsheets in het algemeen en Excel in het bijzonder (waaronder links naar VBA-pagina’s)
Excel •een real-time klok •zeeslag Powerpoint •SuperBunny
11a.47
11a.48
versie: 29/11/2010
© W. Philips, Universiteit Gent, 2000-2011
Bibliografie P. Blattner, L. Ulrich, K. Cook en T. Dyck. Que’s Special Edition using Microsoft Excel 2000. Que. 1999. ISBN 0-7897-1729-8 •Hfdst. 28-30 behandelen het automatiseren van Excel, waarbij o.a. VBA aan bod komt Que’s Special Edition using Visual Basic 6. Que. ISBN 0-7897-1542-2 •heb ik zelf nog niet gelezen… Waarschijnlijk wel de moeite R. Jacobson. Microsoft Office2000 Expert Companion. Tips, Tricks and Utilities for the Power user. Microsoft Press. 1999. ISBN 0-7356-0527-0 •Hdstk. 4 handelt over VBA, maar de andere hoofdstukken bevatten veel VBA-voorbeelden •fragmentaire behandeling en soms nogal cryptisch •zeker niet voor beginners Ed Bott en Woody Leonhard. Het complete handboek Microsoft Office 2000 Premium. Academic Service. 2000. ISBN 90 395 1108 X •Hfdstk. 53-56 geven een kort overzicht over het praktisch gebruik van VBA 11a.49