 |  |  | | Basiscursus Visual Basic for Applications - deel 2 |  |
Met Office is meer mogelijk dan wat de applicaties standaard bieden. Office is immers een omgeving die u naar uw hand kunt zetten met de VBA-programmeertaal.
In dit tweede deel leert u hoe gegevens, die in een zelfgebouwd dialoogvenster zijn ingevuld, via de OK-knop naar uw document worden gekopieerd. |
Gerelateerde training
|
|  |
| |  |  |  |
 |
 |  |  | Voorbereiding |  |  In deel 1 van deze cursus hebt u een sjabloon gemaakt met een dialoogvenster. U leert nu hoe de in het dialoogvenster ingevulde gegevens naar uw document worden gekopieerd. Daartoe wordt een macro gekoppeld aan de OK-knop.
In deel 1 bent u geëindigd met het opslaan van de sjabloon Offerte.dot. Open deze sjabloon weer via Bestand >> Openen (File >> Open) of download hem eerst. Krijgt u een melding dat de macro's worden uitgeschakeld, sluit het document dan, verlaag de beveiliging tot Gemiddeld via Extra >> Macro >> Beveiliging en open het document opnieuw.
Staat het document weer op uw scherm, schakel dan over naar de VBA-editor:
- Druk op sneltoets Alt+F11.
- In het dialoogvenster Projectverkenner (linksboven) dubbelklikt u op Project(Offerte).
- Klik op het plusje bij Formulieren en vervolgens op Userform1, de naam van het eerder gemaakte dialoogvenster.
- Rechts op het scherm ziet u dit dialoogvenster weer verschijnen (zie afbeelding).
Het is de bedoeling dat de gegevens die de gebruiker in de tekstvakken typt naar uw document worden gekopieerd, zodra op OK wordt geklikt. Daarna moet het dialoogvenster automatisch worden gesloten.
|
|
|  |
 |
 |  |  | Object georiënteerd programmeren |  | VBA is een object georiënteerde programmeertaal: telkens als een object wordt aangeklikt of geselecteerd, kan het programma actie ondernemen. In dit geval is de OK-knop het object, de actie het kopiëren van de inhoud van de tekstvakken naar het document en het sluiten van het dialoogvenster. De actie wordt verzorgd door een macro die aan het object gekoppeld is. Begin met het laatste: het stukje programmacode dat bij het sluiten van het dialoogvenster hoort is het tegenovergestelde van het eerder gebruikte UserForm1.Show en ziet er als volgt uit:
UserForm1.Hide
|
|
|  |
 |
 |  |  | Knoppen maken |  | Zo'n programmaregel mag nooit zomaar ergens getypt worden, maar hoort als macro bij een object, in dit geval dus bij de OK-knop. Deze knop wordt als volgt toegevoegd:
- Maak de Werkset zichtbaar via Beeld >> Werkset.
- Klik in het venster Werkset op Opdachtknop.
- Klik ergens rechtsonder in uw gemaakte dialoogvenster en sleep om zo de OK-knop te maken.
- Herhaal de twee voorgaande opdrachten om ook de Annuleren-knop te maken en zet die naast de OK-knop.
- Klik in de eerste knop en wijzig de omschrijving door in het Eigenschappenvenster bij Caption de tekst OK te typen. \
- Klik in de tweede knop en wijzig de omschrijving door in het Eigenschappenvenster bij Caption de tekst Annuleren te typen. Zie afbeelding.
|
|
|  |
 |
 |  |  | Knop krijgt betekenis |  | Bij elke knop hoort een macro, die ervoor zorgt dat de knop bruikbaar wordt. Om het begin en einde van de macro te maken hoeft u maar te dubbelklikken op het object, dus dubbelklik op de OK-knop. Prompt verplaatst de cursor zich naar een venster met programmacodes. Reeds ingevuld is Private Sub CommandButton1_Click(). Dit is het begin van een nieuwe macro, die VBA automatisch heeft aangemaakt en welke hoort bij de OK-knop. Ook het einde van de macro is al toegevoegd:
Private Sub CommandButton1_Click()
End Sub
De cursor bevindt zich tussen de begin- en eindregel van de macro. Het enige wat u moet doen is hier de gewenste actie typen, dus:
Private Sub CommandButton1_Click()
UserForm1.Hide
End Sub
Anders gezegd: als de gebruiker later op de OK-knop (CommandButton1) zal klikken, wordt het dialoogvenster (UserForm1) verborgen (Hide). De ingesprongen ruimte voor UserForm1.Hide dient alleen ter verduidelijking en mag u maken met spaties of tabs.
|
|
|  |
 |
 |  |  | Wissel van dialoogvenster naar programmacode |  | In feite moet de knop Annuleren precies hetzelfde doen: het dialoogvenster sluiten. U moet de macro dus nog een keer herhalen, maar nu gekoppeld aan het object CommandButton2. Wilt u dat op dezelfde manier doen, dus met een dubbelklik op het object, dan moet het object wel zichtbaar zijn. U moet dus weer het dialoogvenster zichtbaar maken. Dat kan met een dubbelklik op UserForm1 in de Projectverkenner. Maar het kan ook anders: direct boven de Projectverkenner ziet u twee iconen. De rechter brengt u bij het dialoogvenster, de linker bij de programmacode en vice versa. Wissel naar het dialoogvenster en dubbelklik op de knop Annuleren. Prompt staat de cursor weer in de programmacode. Maak de macro af volgens:
Private Sub CommandButton2_Click()
UserForm1.Hide
End Sub
Het object is nu CommandButton2, want onder die naam is de knop Annuleren bekend in VBA.
|
|
|  |
 |
 |  |  | Typen of truccen |  | U had de drie laatste regels ook met de hand mogen typen. Immers, na het aanmaken van Private Sub CommandButton1() stond de cursor toch al in de programmacode, dus had u de drie regels voor Private Sub CommandButton2() er gemakkelijk aan toe kunnen voegen. Waar deze drie regels precies komen te staan in het venster met de programmacode maakt niet zoveel uit: de drie nieuwe regels mogen boven de programmacode van Private Sub CommandButton1() staan of eronder.
Wat dat betreft gunt VBA u veel vrijheid. Zo had u de drie regels van Private Sub CommandButton1() ook kunnen selecteren en kopiëren (met Ctrl+C) en de kopie vervolgens eronder kunnen plakken (met Ctrl+V). U had dan tweemaal dezelfde macro gehad, maar door bij een van de twee het cijfer 1 in CommandButton1 te wijzigen in 2 wordt de tweede macro van naam gewijzigd en daardoor gekoppeld aan een ander object, te weten CommandButton2. Dit is een zeer snelle en door programmeurs veel gebruikte truc.
|
|
|  |
 |
 |  |  | Selection.TypeText |  | De programmacode van de OK-knop is nog niet volledig. Immers, er ontbreken nog regels die ervoor zorgen dat de inhoud van de tekstvakken naar het document wordt gekopieerd. Daartoe moet de routine Private Sub CommandButton1_Click() verder uitgebreid moet worden. Onderzoek eerst hoe de tekstvakken met de ingevulde gegevens heten. Anders gezegd: welke naam hanteert VBA voor het tekstvak met de datum? En hoe heet het tekstvak met het offertenummer?
Zorg ervoor dat het dialoogvenster weer op het scherm staat en klik in het witte tekstvak achter Datum. Hiermee selecteert u het tekstvak. Net als een knop is een tekstvak ook een object. Van elk object laat het venster Eigenschappen (linksonder) alle eigenschappen zien die betrekking hebben op dat object. Klik bijvoorbeeld op de Annuleren-knop en merk op dat het dialoogvenster Eigenschappen nu alle eigenschappen laat zien van die knop: achter (Name) leest u CommandButton2 en bij Caption leest u Annuleren.
Klikt u in het tekstvak waar de datum ingevuld moet worden, dan leest u achter (Name) de naam van het vak: TextBox1. Het andere tekstvak heet TextBox2. Onthoud de namen en dubbelklik weer op de OK-knop. Daarmee verplaatst u de cursor naar het venster met de programmacodes. Sterker nog: de cursor staat automatisch in de macro, die bij het aangeklikte object hoort, dus in dit geval onder Private Sub CommandButton1_Click(). Om de inhoud van TextBox1 naar uw document te kopiëren voegt u direct onder de macrotitel de volgende regel toe:
Selection.TypeText TextBox1.Text
Word probeert u daarbij te helpen, want zodra u de punt achter Selection hebt getypt verschijnt een lijst met alles wat achter Selection. kan volgen. In die lijst staat ook TypeText. U kunt kiezen of u TypeText gewoon typt of aanklikt in de lijst. Of u kiest voor een mix van beide: zodra u TypeT hebt getypt, wordt in de nog steeds op het scherm staande lijst TypeText geselecteerd. Op dat moment volstaat het om de spatiebalk aan te slaan om de volledige functie te plaatsen en de keuzelijst te sluiten. Op dezelfde wijze kunt u na het typen van .Te achter TextBox1 op de spatiebalk slaan om de opdracht TextBox1.Text af te maken.
|
|
|  |
 |
 |  |  | Tekst uit dialoogvenster naar document |  | Typ dezelfde regel nog een keer, maar dan voor TextBox2. De complete macro die bij de OK-knop hoort ziet er nu zo uit:
Private Sub CommandButton1_Click()
Selection.TypeText TextBox1.Text
Selection.TypeText TextBox2.Text
UserForm1.Hide
End Sub
Zie afbeelding. Controleer of dit werkt:
- Bewaar uw werk met Bestand >> Opslaan als en geef de gewijzigde sjabloon de naam Offerte2.dot.
- Schakel over naar de tekstverwerker, bijvoorbeeld met Alt+F11.
- Start de macro met Alt+F8.
- Selecteer OpenVenster >> Uitvoeren. Prompt verschijnt het dialoogvenster in beeld.
- Vul een datum en een offertenummer in.
- Klik op OK.
Als het goed is sluit het dialoogvenster zich en staan de ingevulde teksten in uw document. Echter, niet op de plaats die u in gedachten had: de datum en het offertenummer staan op één plek tegen elkaar aan.
- Sluit het document via Bestand >> Sluiten.
- Bij de vraag of het document opgeslagen moet worden kiest u Nee!
|
|
|  |
 |
 |  |  | Bladwijzers |  | De teksten uit het dialoogvenster zijn zojuist wel in het document terecht gekomen, maar niet op de juiste plek. Telkens voordat een tekst in het document wordt geplaatst met Selection.TypeText is het nodig de cursor naar de juiste plaats te dirigeren. Dat is mogelijk met behulp van bladwijzers (bookmarks). Met bladwijzers zijn in een document plaatsen te markeren, waar u vlot naartoe kunt springen met Ctrl+G. Tijdens het uitvoeren van een macro kan de cursor op dezelfde wijze naar bladwijzers in uw document worden verplaatst. De bladwijzers moeten daartoe wel van te voren in de sjabloon zijn vastgelegd. In het voorbeeld zijn dat er twee.
- De sjabloon moet eerst opnieuw worden geopend via Bestand >> Openen of via Bestand (File) en een klik op de bestandsnaam onderin het menu.
Op het scherm staat nu weer de sjabloon. Zet de cursor achter de tekst Datum en voeg de eerste bladwijzer toe met Invoegen >> Bladwijzer (Insert >> Bookmark).
- Hiermee opent u het gelijknamige dialoogvenster.
- Hierin typt u de bladwijzernaam Datum en klikt op Toevoegen.
- Prompt wordt het dialoogvenster weer gesloten. De toegevoegde bladwijzer ziet eruit als een Romeinse hoofdletter I. Is de bladwijzer bij u onzichtbaar, kies dan Extra >> Opties (Tools >> Options), open het tabblad Weergave (View), vink het aankruisvakje bij Bladwijzers (Bookmarks) aan en sluit het dialoogvenster.
- Voeg daaronder nog een bladwijzer toe en noem deze Offertenummer. Zie afbeelding.
|
|
|  |
 |
 |  |  | Goto What? |  | Nu de juiste plaatsen in de sjabloon zijn gemarkeerd, moet de macro nog de weg worden gewezen naar de bladwijzers. Dat doet u met de volgende functie, die thuishoort onder de OK-knop:
Selection.GoTo What:=wdGoToBookmark, Name:="Datum"
In dit voorbeeld wordt gesprongen naar de bladwijzer met de naam Datum. U ziet dat de naam van de bladwijzer tussen aanhalingstekens staat. In een soortgelijke opdracht wordt ook de naam van de andere bladwijzer tussen aanhalingstekens opgenomen. Het geheel moet er als volgt uitzien:
Private Sub CommandButton1_Click()
Selection.GoTo What:=wdGoToBookmark, Name:="Datum"
Selection.TypeText TextBox1.Text
Selection.GoTo What:=wdGoToBookmark, Name:="Offertenummer"
Selection.TypeText TextBox2.Text
UserForm1.Hide
End Sub
Typ deze regels over.
|
|
|  |
 |
 |  |  | Invullen |  | Bewaar het nieuwe resultaat, verlaat de VBA-editor en voer opnieuw een test uit:
- Bewaar het nieuwe resultaat via Ctrl+S.
- Verlaat de VBA-editor via Alt+F11.
- Terwijl de sjabloon op het scherm staat, opent u het dialoogvenster via Alt+F8 >> OpenVenster >> Uitvoeren (Run).
- Voorzie de tekstvakken van inhoud en klik op OK.
Als het goed is wordt de inhoud van de tekstvakken naar de juiste plaatsen (gemarkeerd door de bladwijzers) in het document gekopieerd!
Het resultaat kunt u afdrukken maar NIET BEWAREN, althans niet onder de originele naam Offerte2.dot! Immers, de bedoeling van een sjabloon is dat het een leeg standaarddocument is en telkens hergebruikt kan worden. De ingevulde gegevens horen hier niet in thuis. Een tweede punt, waar rekening mee gehouden moet worden, is dat het voor de gebruiker gemakkelijker is als het dialoogvenster automatisch verschijnt, zodra de sjabloon wordt geopend.
|
|
|  |
 |
 |  |  | Sjabloon versus document |  | U moet de sjabloon Offerte2.dot afsluiten zonder te bewaren en terugkeren naar de versie die u eerder (vlak voor de laatste test) bewaard had. Deze sjabloon Offerte2.dot moet telkens opnieuw gebruikt kunnen worden: telkens wanneer u een offerte wilt maken, moet een kopie worden getrokken van het origineel. In Word is dat mogelijk door het bestand (in dit geval Offerte2.dot) te openen via Bestand >> Nieuw (File >> New).
Nu laat de website van Microsoft niet toe dat hier sjablonen (.dot) opgeslagen worden, wel documenten (.doc). Als u dus Offerte.doc of Offerte2.doc hebt gedownload, dan moet u deze hernoemen in .dot-bestanden en in de sjablonenmap plaatsen, teneinde ze te kunnen gebruiken:
- De naam van deze map vindt u via Extra >> Opties >> Bestandslocaties.
- Onthoud de naam van de map die ingevuld staat achter Gebruikerssjablonen of vul daar via Wijzigen de naam van een geschikte map in.
- Sluit het dialoogvenster Opties en zorg er nu voor dat Offerte2.doc als Offerte2.dot in deze map komt te staan.
- Dat kunt u doen via de Windows Verkenner, maar u kunt de sjabloon ook openen in Word en vervolgens weer bewaren, maar dan in de juiste map, dus open de sjabloon Offerte2.dot via Bestand >> Openen (File >> Open).
- Bewaar deze weer via Bestand >> Opslaan als (File >> Save as).
- Kies bij Opslaan als voor Gebruikerssjablonen en kies Opslaan.
- Sluit Offerte2.dot via Bestand >> Sluiten of met Ctrl+F4.
|
|
|  |
 |
 |  |  | Kopie-document |  | Stel nu, dat u op basis van de sjabloon Offerte2.dot een offerte moet maken. Dat betekent dus dat u wilt beschikken over Offerte2.dot, althans over een kopie-exemplaar daarvan:
- Kies Bestand >> Nieuw.
- Daarmee opent u het dialoogvenster Nieuw.
- Selecteer Offerte2.dot en kies OK. Prompt verschijnt de offerte weer in beeld, maar dit document is naamloos (zie in de titelbalk).
- Open het zelfgemaakte dialoogvenster met Alt+F8 >> OpenVenster >> Uitvoeren (Run).
- Vul de gegevens in en klik op OK.
Het begin van de offerte is nu klaar. Het is nu nog een kwestie van typen, afdrukken en opslaan. Wat dat laatste betreft: omdat het document nog naamloos is, wordt gevraagd om een bestandsnaam zodra u Bestand >> Opslaan kiest of op Ctrl+S drukt. De kans dat Offerte2.dot wordt overschreven door een kant-en-klare versie van een offerte is daardoor gering.
|
|
|  |
|
 | |