Symptomen

  • Een programma verricht een aantal handelingen, en het is de bedoeling dat na afloop van de verwerking de Backstage van Office 2010 wordt getoond. VBA kent echter geen opdrachten om dit te bewerkstelligen.
  • In een geautomatiseerd het proces verschijnt een dialoogvenster. Een gebruikers wil dat er automatisch op een knop gedrukt wordt, maar dit is niet de standaardknop. De eigenschap DisplayAlerts kan dus niet worden gebruik. Wat is het alternatief?

Remedie 1

  1. Gebruik de methode SendKeys. Neem in uw programma het volgende statement op:

Voert u dit programma vanuit een werkblad in een Excel-werkmap uit, dan wordt het getal in de actieve cel “getypt”. De toevoeging {Enter} zorgt ervoor dat de invoer wordt afgesloten met een Enter.

Onder het kopje Verdieping1 vindt u de codes voor de andere bijzondere toetsen.

Verdieping 1

  • Gebruikt u de methode SendKeys, dan kunt u de te typen cijfers en letters tussen dubbele aanhalingstekens zetten: ”TEST”.
  • Bijzondere toetsen, zoals Enter, moeten ook binnen die dubbele aanhalingstekens komen, maar u moet er bovendien accolades omheen plaatsen: ”TEST{Enter}”.
  • De codes voor de andere bijzondere toetsen zijn:

  • Ook voor de schakeltoetsen moet u bijzondere codes gebruiken:

Tip 1

  • Het gebruik van de methode SendKeys is mooi, maar risicovol. Als er tijdens het “typen” van de toetsen iets onverwachts gebeurt, kan het helemaal mis gaan. Stel, u laat een programma inloggen op een website. Het programma gebruikt SendKeys om het wachtwoord in te vullen. Op dat moment komt er een e-mail binnen. Rechtsonder in het scherm wordt een venstertje actief dat u op deze mail attendeert. SendKeys stuurt de toetsaanslagen nu niet naar de website, maar naar het actief geworden venstertje. Afhankelijk van de aard van het venster worden de toetsaanslagen al dan niet zichtbaar. En het inloggen op de website is mislukt.
  • Gebruikt u de methode SendKeys, dan kunt u de te typen cijfers en letters tussen dubbele aanhalingstekens zetten: ”WEKA”.
  • Gebruikt u in uw programma twee of meer SendKey-opdrachten, dan kan het gebeuren dat de NumLock-toets van status verandert: was de NumLock-toets ingeschakeld, dan schakelt het programma de toets mogelijk uit. Hetzelfde geldt voor de toetsen CapsLock en ScrollLock.

Remedie 2

Veiliger dan de methode SendKeys is het gebruik van de methode DDEExecute. Deze methode ‘garandeert’ dat de toetsaanslagen bij het juiste programma terechtkomen door een ‘kanaal’ te maken tussen de macro en het programma waarvoor de toetsaanslagen bestemd zijn

Verdieping

  • Zet alle in te drukken toetsen tussen accolades: {K}.
  • Moet een toetsaanslag herhaald worden, geef dan eerst de toets op, zet daarachter een spatie en geef tot slot op hoe vaak u de toets wilt laten herhalen. Een voorbeeld: {1 5}. levert 11111.

 Tip 2

  • DDEExecute accepteert ook constanten die u naar hartenlust in uw programma kunt gebruiken. We noemen de belangrijkste:
vbKeyLButton Linkermuisknop
vbKeyRButton Rechtermuisknop
vbKeyMButton Middelste muisknop
vbKeySpace Spatiebalk
vbKeyBack Backspace
vbKeyEscape Esc
vbKeyMenu Menu
vbKeyTab Tab
vbKeyReturn Enter
vbKeyEnd End
vbKeyHome Home
vbKeyLeft Pijltje naar links
vbKeyRight Pijltje naar rechts
vbKeyUp Pijl omhoog
vbKeyDown Pijl omlaag
vbKeyShift Shift
vbKeyControl Ctrl
vbKeyNumlock NumLock
vbKeyCapital CapsLock
vbKeyPageUp PgUp
vbKeyPageDown PgDn
vbKeyPrint PrintScreen
vbKeyInsert Insert
vbKeyDelete Delete

De toetsen A tot en met Z hebben een constante lopend van vbKeyA tot en met vbKeyZ. En voor de cijfertoetsen 1 tot en met 9 zijn er constanten lopend van vbKey0 tot en met vbKey9, of, als u het numerieke toetsenbord wilt gebruiken: vbKeyNumpad0 tot en met vbKeyNumpad9. De constanten voor de andere toetsen op het numerieke blok zijn:

vbKeyMultiply Vermenigvuldigen
vbKeyAdd 0x6B +
vbKeySubtract
vbKeyDecimal decimaalteken (,)
vbKeyDivide /

Met DDEEcexute kunt u ook functietoetsaanslagen versturen door de constanten vbKeyF1 tot en met vbKeyF16 te gebruiken.

Zie ook

Automatisch reageren op dialoogvensters

De NumLock-toets is plotseling uitgeschakeld!