Nivå: Avancerad
Kommentar: Detta tips är för dig som är avancerade användare och behärskar programmering i Visual Basic 6 . Du bör ha kännedom om Data Access Object (DAO) version 3.6 för att hänga med!:)
Inledning
Microsft Word kan inte bara traditionell ordbehandling, utan det är ett mycket kraftfullt verktyg för att använda som en rapportgenerator, t.ex hämta data från databaser som läggs i ett dokument. Tänk dig följande scenario:
Din chef vill ha den veckovisa rapporten över lagertillgångar i företaget som ett färdigt Worddokument, så att han/hon enkelt kan lägga dokumentet som en bilaga till nästa möteshandlingar. Tänk dig om du kunde göra följande: tillverka ett program som automatiskt skriver ett Word-dokument, innehållandes de senaste datauppgifterna från företagets lagerdatabas, utan att du behöver knappa in en endaste rad med text manuellt. Vi antar nu att chefen dessutom är en stressad person, som inte kan lika mycket PC och Word som du, så det måste vara enkelt. Chefen vill helst inte knappa på tangentbordet, utan endast göra några få musklick, sedan skall rapporten vara färdig. Den goda nyheten är att vi kan tillverka ett sådant program! Ett sätt är att programmera Word! Nedan visas ett exempel på hur man tillverkar ett kraftfullt program i Word. När man finlirat färdigt och fått applikationen att göra det man vill, kan man enkelt konvertera applikationen som en Wordmall (*.dot), som du kommer åt när du ska skapa ett nytt dokument.
Projektet
Vi startar Word på vanligt sätt och går in Visual Basic Editor (Alt+F11). Vi lägger ut ett formulär från verktygslådan i VBE. Formuläret ska nu innehålla följande kontroller:
- Commondialog,
- ListBox,
- två stycken Kommandoknappar
- två stycken Label
I detta exempel används DAO (Data Access Object). Därför måste referensen sättas i Visual Basic Editor till Microsoft DAO 3.6 Object, annars kommer det inte att fungera.
Händelseförlopp
Än så länge har vi inte lagt in någon programkod och inget händer om vi skulle starta vår applikation. Vi ser endast vårt formulär. Nu vill vi att följande skall hända i vårt program:
- När användaren startar applikationen skall formuläret synas. Det första användaren skall göra är att välja en databas. Valet görs av att användaren får upp en dialogruta (kontrollen Commondialog).
- När användaren valt databas, skall databasens samtliga frågor visas i Listboxen på formuläret.
- Användaren väljer sedan en Fråga som finns i Listboxen. Applikationen läser alla tillgängliga frågor i Access, som användaren pekar på. Valet görs genom att användaren klickar på frågan som ska köras. Ett kontrollmeddelande skickas till användaren om frågan verkligen skall köras och om han vill fortsätta.
- Användaren klickar t.ex Frågan sp_pris. Data hämtas från databasen och data returneras och skrivs direkt till Worddokumentet.
- Klart! Vi har en nu databasrapport som är skriven automatiskt och formaterad i ett Worddokument, utan att vi rört tangentbordet och skrivet ett enda tecken från tangentbordet!
Kommentar
Genom att bygga en generell rapportgenerator i Word, som kan anropa Frågor i databaser som t.ex ACCESS, SQL etc. kan man fokusera sig mer på att tillverka frågor som beskriver de data man vill visa för användaren. Användaren kan därefter få data tillgängligt till Word i snygga rapporter som blir “rätt” varje gång de körs.
Resurser
- Hämta programkoden till artikeln som pdf-dokument. Klicka här WordVBA
- Jag har lagt upp ett Youtube klipp där du kan se en presentation hur applikationen fungerar (för Youtube-klippet, klicka här)
- Referens DAO Language Reference, DAO 3.6, från Microsoft. Se Microsofts hemsida.
Fotnot: Applikationen fungerar med Word 2003, 2007 och Access 2003, 2007. Har ej testat med ”högre” programversioner.