Låt Access automatiskt skapa din dokumentation som ett Word-dokument

Nivå: Avancerad

Inledning

Något som är nog så viktigt, men ack så tråkigt, är att skriva dokumentation för de projekt du arbetar med. Jobbar du med projekt, så är dokumentation en viktig sak att lägga ner tid på. Anledningen är enkel: man glömmer ganska fort vad man gjort! Att ha färdiga rutiner för hur man skall dokumentera viktiga delar i projektet är helt avgörande, om dokumentationen skall bli av eller inte. Man kan dokumentera på flera olika sätt. En metod jag själv använder och trivs med är att låta Word vara min rapportgenerator. Word är som de flesta Office-programmen oerhört kraftfulla och man kan få dem att göra nästan vad som hels.  För att göra det enkelt: jag låter Access skriva min tekniska dokumentation automatiskt som ett Word-dokument!  I den här artikeln ska jag beskriva principen för hur detta går till. I slutet av artikeln kan du se ett videoklipp, för hur applikationen fungerar.

Antag följande. vi har en Access-databas med dagsnoteringar över börspriser för råolja. Vi har lagrat alla våra data i en Access-tabell som heter Crude2013. Tabellen innehåller fältnamn, antal poster, värden etc. Vad vi vill göra är att dokumentera följande:

  • Datum och klockslag när vi gjorde dokumentationen.
  • Databasens namn och sökvägen dit
  • Tabellens namn och när den skapades
  • Antal poster i tabellen
  • Antal fält
  • Fältens namn

Programkoden i Access

När du startat Access går du in i kodeditorn genom att trycka tangenten ALT+F11. Det första som måste göras är sätta referenserna. Dessa är Microsoft DAO 3.6 Object Library och en referens måste sättas till Word, leta upp Microsoft Word 11 Object Library  i listan(i detta fall Word 2003).

Nu är de dags att titta på koden.
+++++++++++ kodstart+++++++++++

On Error GoTo PROC_ERR
If MsgBox(”Make sure that Word is closed before proceeding. ” & _
”” & vbCrLf & _
vbCrLf & ”Do you really want to continue?”, _
vbYesNo + vbExclamation + vbDefaultButton2, ”Current status; ” & Now) = vbYes Then

+++++++++++ kodslut+++++++++++

Kommentar: Det första som händer är användaren ges en möjlighet att ångra sig, genom att klicka JA eller NEJ. Klickar användaren NEJ skall ingen dokumentation skrivas och inget dokument skapas. Det som skapar detta är IF-satsen i början av kodblocket och Then i slutet av kodblocket.

+++++++++++ kodstart+++++++++++

Define objects for DAO…
Dim dbs As Database, tdf As TableDef
Dim fld As Field

   ’Set references to the current database…
Set dbs = CurrentDb

   ’Table to be examined in the databse…
Set tdf = dbs.TableDefs!Crude2013

+++++++++++ kodslut+++++++++++

Kommentar: I detta kodavsnitt så är det definitioner av objektvariabler. Vad gäller DAO 3.6, så används klasserna Database, TableDef och Field.Notera att när vi skapar instansen för TableDef, [objektvariabeln tdf], så definierar vi vilken tabell i databasen vi vill undersöka. Tabellen vi ville undersöka i databasen heter som bekant Crude2013.

+++++++++++ kodstart+++++++++++

’Define an object variable and start Word application…
Dim MyWordobj As Word.Application
Set MyWordobj = New Word.Application
MyWordobj.Documents.Add

+++++++++++ kodslut+++++++++++

Kommentar: …och i detta avsnitt definieras objekt och objektvariabler  för Word.

+++++++++++ kodstart+++++++++++
’In this section we define what data to be written to the document

MyWordobj.Selection.TypeText (”DOCUMENTATION FOR THE TABLE.”)
MyWordobj.Selection.TypeParagraph
MyWordobj.Selection.TypeText (”Date: ” & Now())
MyWordobj.Selection.TypeParagraph
MyWordobj.Selection.TypeText (”Description: This documentation is automatically generated by Access. It presents important information about the table.”)
MyWordobj.Selection.TypeParagraph
MyWordobj.Selection.TypeParagraph
MyWordobj.Selection.TypeText (”Data base: ” & dbs.Name)
MyWordobj.Selection.TypeParagraph
MyWordobj.Selection.TypeText (”Dataset: ” & tdf.Name)
MyWordobj.Selection.TypeParagraph
MyWordobj.Selection.TypeText (”Dataset created: ” & tdf.DateCreated)
MyWordobj.Selection.TypeParagraph
MyWordobj.Selection.TypeText (”Number of records: ” & tdf.RecordCount)
MyWordobj.Selection.TypeParagraph
MyWordobj.Selection.TypeText (”Number of fields: ” & tdf.Fields.Count)
MyWordobj.Selection.TypeParagraph
MyWordobj.Selection.TypeText (”Fieldnames:”)
MyWordobj.Selection.TypeParagraph

+++++++++++ kodslut+++++++++++

Kommentar: I detta avsnitt skapar vi själva mallen, lägger ut variabler och skapar formatering av det kommande Word-dokumentet, som ska skrivas.

+++++++++++ kodstart+++++++++++

’Time to print out all variable names with data…
For Each fld In tdf.Fields
MyWordobj.Selection.TypeText (” ” & fld.Name & vbCrLf & ” ”)
Next fld
MyWordobj.Selection.TypeParagraph

’Save the document
MyWordobj.ActiveDocument.SaveAs FileName:=”c:\rapporter\crudeprize2013.doc”
’Close the document
MyWordobj.ActiveDocument.Close

+++++++++++ kodslut+++++++++++

Kommentar: Här skrivs alla data ut, varefter Worddokumentet sparas på hårddisken, för att därefter stängas.

+++++++++++ kodstart+++++++++++

’Prompt the user…

Dim lngRetval As Long

lngRetval = MsgBox( _
”Your documentation could be created as a Word Document!” & vbCrLf & ””, _
vbOKOnly + vbInformation + vbDefaultButton1, _
”Current status; ” & Now)

’Delete the instance of Word and DAO objects…
Set MyWordobj = Nothing
Set dbs = Nothing

Else
Call MsgBox( _
”No documentation could be created.” & vbCrLf & ”” & vbCrLf & ”” & vbCrLf & ””, _
vbOKOnly + vbInformation + vbDefaultButton2, _
”Current status: SPCD”)

End If

+++++++++++ kodslut+++++++++++

Kommentar: I detta avsnitt meddelas användaren om vi har varit framgångsrika med att skapa dokumentet eller inte, vidare raderas instanserna av objektvariablerna.  Notera att vi också hanterar och meddelar användaren om användarenvalde att inte skapa dokumentationen. ELSE och End If hanterar detta i programkoden.

+++++++++++ kodstart+++++++++++
PROC_EXIT:
Exit Sub

PROC_ERR:
MsgBox ”Error: ” & Err.Number & ”.” & vbCrLf & ” ” & Err.Description, , _
”StartWord”
Resume PROC_EXIT
End Sub
+++++++++++ kodslut+++++++++++

Kommentar: Sista delen är sedvanlig felhantering.

Slutasats

Både Access och Word är mycket kraftfulla program som fungerar utmärkt tillsammans.  En bra metod när man skall dokumentera sin projekt är försöka göra detta så automatiskt som möjligt.

Referenser på nätet

VBA Language Reference

 

Se hur den fungerar i en live-demonstration!

Avslutningsvis visas hur VB-koden implementerad fungerar i en Access databas.

Share