Matte med Word

I ordbehandlingsprogrammet Microsoft Word, kan man drabbas av virus. Detta program, samt Microsoft Outlook är de två vanligaste källorna till virussmitta som finns idag. Anledningen är att båda programmen kan programmeras, i dessa fall med Visual BASIC. BASIC, vilket står för Beginners Allpurpose Intruction Code är ett av mikrodatorhistoriens tidigaste programmeringsspråk. Idag är det så populärt inte därför att språket till skillnad från Pascal, C eller JavScript är bättre för nybörjare, utan snarare för att det är ett språk som företaget Microsoft historiskt är nära sammanlänkat med. Det var ju själva Bill Gates som var med om att utveckla den första BASIC-versionen för IBM PC i datorernas barndom.
Samtidigt som det kan anändas som ett fristående programmeringsspråk, så har Microsoft även byggt det som komplement i de flesta av sina datorprogram. Detta är på både gott och ont. Ett komplett programmeringsspråk gör det ganska enkelt att skapa virus, vilka sedan sprids på samma gång som dokument sprids.
Ett av de första programmen som drabbades av virus var just Word. Det är nämligen mycket enkelt att skapa ett dokument, som samtidigt innehåller ett litet virus och när någon läser dokumentet, så passar viruset på att smitta alla andra dokument i datorn, eller liknande elakheter.
Men programmeringsmöjligheterna i Word är inte bara av ondo. Jag tycker alltid det är intressant att kika på ett program "under skalet" och Word har genomgått stora förändringar när det gäller just makroprogrammeringsmöjligheterna. I början innebar makros endast en enkel möjlighet att få datorn att minnas tangenttryckningar och sedan enkelt spela upp dessa. Därefter kan man välja från en dialogruta vilket makro man vill spela upp och på det sättet rationalisera sitt arbete.
Men med ett programmeringsspråk kan man göra så mycket mer. För skolundervisning kan man enkelt använda Word för att skapa övningar. Låt oss säga att barnen i klassen behöver träna på multiplikationstabellen. Föräldern hemma kan självklart skriva ihop övningen, men det är naturligtvis bekvämare att låta datorn göra detta automagiskt.
Man kan börja med att spela in ett makro, och därefter förändra detta med Visual Basic Editor. En annan metod är att i Word direkt välja Verktyg->Makron->Visual Basic Editor och därefter välja "Insert->Module" för att kunna börja programmera.
Följande enkla program skapar 30 uppgifter för att träna multiplikationstabellen, vilka skrivs in i aktuellt, öppet dokument.

Sub multiplikation()
For i = 1 To 30
a = Str(Round(Rnd() * 10))
b = Str(Round(Rnd() * 10))
Selection.TypeText Str(i) + ". "
Selection.TypeText a + " * " + b + " = ______"
Selection.TypeParagraph
Next i
End Sub

Hela programmet utnyttjar bara något tiotal funktioner. Sub är egentligen förkortning för "subrutin" och innebär bara att man därefter ger makrot ett namn ("multiplikation"). Därmed kan man kalla på makrot från makrodialogrutan (Verktyg->Makro->Makron...).
Paranteserna "()" innebär att inga parametrar, alltså inga speciella inställningar behövs när man ska använda makrot. Det är ju tomt mellan paranteserna.
Raden "For i=1 To 30" innebär att den delen som står mellan "For" och "Next" ska upprepas. Det är en lagringsplats, variabel som döpts till "i" som kommer att styra detta och den ska börja upprepa när den är ett och sluta när den är 30. Alltså kommer 30 uppgifter att skapas.
Raden med "a=str(Round(Rand()*10)) innebär helt enkelt att ett funktion för att skapa sluptal, Rnd() utnyttjas och skapar slumptal mellan 0 och 1. Rnd är en förkortning från engelskans Randomize, vilket betyder just slumpa. Då inga parametrar (information mellan efterföljande paranteser används) skapas olika värden varje gång och värdena är mellan 0 och 1. Eftersom detta decimalvärde är för knepigt för eleverna, så multiplicerar vi det med 10 (genom att skriva "*10" efteråt). Med funktionen "Round(" avrundar vi innehållet inom efterföljande paranteser till närmaste heltal. Programmeringsspråket BASIC är lite petigt, när det gäller skillnaden mellan text och värden, så för att kunna använda heltalet måste det omvandlas till en textsträng. Det är just vad funktionen "Str(" gör med hela resultatet av slumptalet, multiplicerandet och avrundandet).
Därefter lagras hela innehållet i något vi kallar a (den ena faktorerna). Likamedtecknet i BASIC betyder vanligen "tilldela". Alltså tilldelas "a" resultatet av beräkningen, som text. På precis samma sätt tilldelar vi "b" ett tal.
Sedan kommer den raden som skriver allt till det öppna dokumentet. Det är en rad som är speciell för just Word. I traditionell BASIC används funktionen "Print", men i Word BASIC kan man mer exakt ange vart innehållet i förhållande till det öppna dokumentet ska hamna. Alltså ersätter "Selection.TypeText" eventuellt vald text med först numret på uppgiften och sedan en punkt (för att göra resultatet lite snyggt). Raden därefter skriver ut de två framslumpade talen, med en tjusig stjärna emellan och avslutar raden med ett streck. Understrykningsteckent är ett av de mest användbara tecknen på en dator. Istället för att rita linjer eller hämta krängliga bilder, så kan man i alla program utnyttja "Shift-Minus" på ett svenskt tangentbort för att få ett obrutet streck i nederkant av bokstäver. Och i detta fall passar det ju utmärkt, eftersom slutresultatet ska skrivas ut och delas ut till eleverna eller kanske till sonen som behöver träna extra hemma.
Raden "Selection.TypeParagraph" ser bara till att varje rad avslutas med en vagnretur. De övriga raderna i programmet är avslutningsfraser. Raden som börjar med "For", ska alltid ska ha en "Next"-motsvarighet. På samma sätt är det med "Sub". Genom att köra programmet, så kan man alltså snabbt skapa en automatisk multiplikationsövning, som framförallt är olika varje gång.
Andra funktioner som finns i BASIC och kan vara användbara är att visa upp alla dokument som man har i en mapp. Genom att utnyttja följande lilla program kan man snabbt få en lista över alla dokument som finns i en aktuell mapp, för att sedan kanske sortera och skriva ut denna på vanligt sätt.
Sub bibliotek()
MyName = Dir("*.doc", 31)
Do While MyName <> "" ' Start the loop.
Selection.TypeText MyName
Selection.TypeParagraph
MyName = Dir
Loop
End Sub
Det finns en mängd andra möjligheter att använda Word Basic. En skojig variant är exempelvis ett litet program som automatiskt skapar klassiska labyrinter. Roligt att använda om man har barn hemma. Hämta det gärna från min lilla webplats www.prifre.com.

Med ett leende
2002-01-24/Peter Freund