Code plakken op forums

Inleiding

In dit artikel bekijken we een aantal meer geavanceerde (Excel) VBA-technieken:

  1. het uitlezen van VBA-code uit een Module in de VBE
  2. het automatisch toevoegen van inhoud aan het Windows Klembord of Clipboard
  3. het activeren van Windows applicaties naast Excel, zoals Firefox. Hierbij gebruiken we 3 Windows API calls.
  4. het toevoegen van VBE referenties aan een Excel bestand

Ik giet dit alles in een handige code die mij nogal wat tijd bespaart, wanneer ik antwoorden post op Excel VBA-forums. Wanneer ik code post (en dat is vaak) maak ik gebruik van de onderstaande code. Ik plaatste die in de PERSONAL.XLSB, waardoor de macro dus steeds beschikbaar is. Ook wees ik de sneltoets Control + Q toe aan de macro zodat het nóg eenvoudiger is.

De VBE aansturen met code

Laten we beginnen met het uitlezen van VBA-code uit een Module. Een Excel bestand heeft een VBProject, bestaande uit een aantal componenten: Modules, class modules, ThisWorkbook of modules van werkbladen. Elk van die componenten kan je uitvragen en zodoende kijken of er code staat. Via:

ActiveWorkbook.VBProject.VBComponents("Module1").CodeModule

hebben we toegang tot de code die zich bevindt in Module1 van het actieve bestand. We hebben daaruit alle code nodig, dus nemen we de Lines 1 tot en met het einde. Het aantal regels in die code vraag je op met de eigenschap CountOfLines. Echter, om rechtstreeks VBA-code in andere bestanden te kunnen aanspreken, moet je in VBE een referentie leggen naar "Microsoft Visual Basic For Applications Extensibility 5.3". Dit kan je doen bij Extra > Referenties (Tools > References) en dan scrollen in de lijst tot bij het juiste vinkje. Eens dat gedaan is, zou je middels onderstaande code alle code uit Module1 in het Immediate Window in VBE kunnen tonen (druk Control + G om dat Window te tonen):

With ActiveWorkbook.VBProject.VBComponents("Module1").CodeModule
     Debug.Print .Lines(1, .CountOfLines)
End With

Naar het klembord

Deze hele tekst hebben we nu ook graag in het Windows Clipboard, het Klembord waarin gekopieerde en geknipte gegevens (tekst, afbeeldingen,…) worden bijgehouden totdat je ze elders plakt. De bedoeling is om de code uit de module in het Klembord te bewaren, om ze nadien te kunnen plakken op een forum. We automatiseren m.a.w. het selecteren van alle code en het kiezen van Bewerken > Kopiëren (Edit > Copy) of Control + C. Alweer moet je (eenmalig) een extra referentie leggen, dit keer naar "Microsoft Forms 2.0 Object Library".

Het plaatsen van tekst in het Klembord gaat als volgt. Neem een object dat je declareert als een DataObject:

Dim DataObj As New MSForms.DataObject

Initialiseer de te zetten tekst via:

DataObj.SetText "Hello world"

Bovenstaande tekst is in de praktijk uiteraard vaak moeilijker dan dit. Tot slot, gebruik de PutInClipboard methode van het data object DataObj.

DataObj.PutInClipboard

Naast het plaatsen van de hele code in het Klembord kan je nog verder gaan. Zo kan je de tekst die je kopieert makkelijk uitbreiden met een aanspreking en je naam:

DataObj.SetText "Hi there," & vbCr & vbCr & "Try:" & vbCr & _
     "[code]" & .Lines(1, .CountOfLines) & "[/code]" & vbCr & vbCr & "Wigi"

Je ziet dat ik begin met "Hi there" (voor een Engelstalig forum), gevolgd door 2 Enter‘s, dan het woord "Try:", dan een Enter, dan de code tag [code], vervolgens de code uit de module, dan opnieuw 2 Enter‘s, en tot slot mijn forum nickname Wigi.

Wordt vervolgd…

Op pagina 2 staat de code voor en de uitleg over hoe je Firefox kan activeren.




Over Wim

Wim Gielis is Business Intelligence consultant en Excel expert

Andere links