Bra Utbildning AB

 

<-- Back
VBA & Objektmodeller
Arbeta med text
Bokmärken
Range
Fält
Formulärfält
Autotext
Doc var & Doc Prop
Words kommandon
Words dialogrutor
Automation
Externa Databaser

Visual Basic for Applications (VBA) och objektmodeller


Den här informationen riktar sig till Dig som tidigare inte arbetat med programmering i Microsoft Office1) (Excel, Word, Outlook, Access och PowerPoint). 

Visual Basic for Application (VBA)
VBA är det gemensamma programspråket i alla Officprogram. VBA är inte VB (Visual Basic) som är en separat programvara för programutveckling. Det finns stora likheter.

Exempel på VBA 
IF xxxxx THEN xxxxx ELSE xxxxx END IF
DO xxxxxxx LOOP
SELECT CASE xxxx   CASE 1 xxxx CASE 2 xxx CASE ELSE xxx END SELECT
Format(Date,  "yyyy-MM-dd")

Inget av kommandona ovan har någon direkt koppling till Excel, Word eller annan applikation i Office-paketet. Du använder kommandona tillsammans med kommandon från respektive applikation - dvs från vald applikations objektmodell. 

Så här skulle det kunna se ut om man använder sig av en Select Case sats för att hitta namnet på huvudstäder baserat på ett tal (LandskodTelefon) som användaren fått ange. Det är också möjligt att kontrollera t.ex. operativsystemets landsinställningar eller Word/Excels språkversion på liknande sätt.

Objektmodeller i Office från Microsoft
Varje applikation/programvara inom Office består av olika objekt. Word har dokument, Excel har arbetsböcker och blad medan Access har tabeller etc. 

Programmering i Office innebär att du kombinerar VBA-kommandon med den objektmodell (Applikationen) du vill arbeta med. Olika utvecklare är olika "duktiga" på olika objektmodeller. Ofta behärskar man 1-2 modeller mycket bra och övriga hyfsat. Vi är bäst på Word och Excel.

Exempel kod från Excels objektmodell:
ActiveWorkbook.Sheets("Januari").Range("C7").Value = 19

Exempel från Words objektmodell (paragraph betyder stycke):
ActiveDocument.Paragraphs(1).Range.Text = "Första styckets text."

Exempel från Outlooks objektmodell:
Dim StandardKontaktmapp As MAPIFolder
StandardKontaktmapp = _
         GetNamespace("mapi").GetDefaultFolder(olFolderContacts)

Exempel från Access objektmodell:
Set db = DBEngine.Workspaces(0).OpenDatabase("Fakturering.mdb")

Exempel på kombination av VBA och Excels objektmodell
ActiveWorkbook.Sheets("Januari").Range("C7").Value = 
         Format(Date,  "yyyy-MM-dd")

Exempel på kombination av VBA och Words objektmodell
ActiveDocument.Bookmarks("DagensDatum").Range.Text = _
         Format(Date,  "yyyy-MM-dd")

Slutsats
För att utveckla bra rutiner fordras grundläggande kunskaper om den applikation (den programvara) du ska arbeta med. Dessutom fordras kunskap om de grundläggande VBA kommandona som är lika för alla programvaror.

Inget mer?
I din dator finns också operativsystem som t.ex. Windows från Microsoft. Dessa system är öppna och tillåter åtkomst via s.k. API kommandon. Du kan med VBA göra API anrop för att t.ex. kunna kontrollera sådant som inte finns i VBA eller i objektmodellen för vald applikation. Exempel: Verifiera om disk W: är tillgänglig och om enheten är en inbyggd enhet eller placerad i en server. DLL-filer, COM-objekt och OCX komponenter används som stöd och kan anropas från Office-produkterna.

Automation
En applikation som exponerar sin objektmodell och stöder automation kan anropas och startas  från andra applikationer. En Excel-lösning kan dra igång Word eller Access och utföra kommandon utan användarens medverkan (samt avsluta och städa efter sig) och vice versa. En programvara (som t.ex. ett fakturaprogram utvecklad i exempelvis "ren" VB) kan använda sig av den programvara som är bäst lämpad för att producera proffsiga utskrifter, t.ex. Word. Därigenom slipper utvecklaren ägna tid åt att skapa anpassade utskriftsrutiner- dvs sådant som ingår i Word från start.

Se också avsnittet Automation.

--------------------------------------
Microsoft®, Word®, Excel®, PowerPoint®, Outlook®, Access® & FrontPage® är varumärken som registrerats av Microsoft® koncernen.