VBA

Visual Basic for Applications (VBA) er navnet på det makrosprog som findes i Microsoft Office programmerne (Word, Excel, Access etc).

Som navnet antyder minder sproget om Visual Basic. Det er blot tilpasset så det er egnet som makrosprog.

Sproget er meget simpelt. Hvis man ønsker at definere en makro er det ofte lettest, at slå makrooptageren til, udføre de ønskede handlinger en gang, stoppe makrooptageren og så se hvordan koden kom til at se ud. Selv om man ikke lige ved hvordan man skriver koden til bestemte handlinger så er det ret let at læse og forstå koden når makrooptageren har skrevet den.


VBA eksempel: timetal (Excel)

Dette eksempel viser hvorledes man skriver en brugerdefineret funktion til Excel, som kan beregne antal timer mellem 2 tidspunkter, som begge er angivet i samme celle med en / (skråstreg) imellem.

Hvis man i celle A1 i Excel skriver 08:00/14:30 for at angive fra klokken 08:00 til klokken 14:30 så kan man ikke umiddelbart beregne hvor mange timer det svarer til. For at beregne dette med Excels standardfunktioner skal start- og sluttidspunkt indtastes i hver sin celle og indeholde både dato og tidspunkt.

Vi vil derfor fremstille en brugerdefineret funktion kaldet timetal som virker således at man blot kan skrive =timetal(A1) i en celle for at få beregnet antallet af timer mellem tidspunktet før og efter skråstregen. En sådan funktion kan være nyttig hvis man eksempelvis laver vagtplaner i Excel og allerede har skrevet 2 tidspunkter i samme celle, men alligevel ønsker at beregne timetallet.

Det eksempel jeg har fremstillet virker således:

  • der skal indgå en skråstreg (ellers er der ikke 2 tider og så bliver resultatet 0)
  • timer og minutter skal adskilles med : (minutter er valgfri - dvs fra klokken 14-17:30 kan skrives som 14/17:30 eller som 14:00/17:30)
  • hvis tidspunktet efter skråstregen er tidligere end tidspunktet før skråstregen antages at man starter den ene dag og slutter den næste (eksempelvis vil 22:00/02:00 give 4 timer)

Koden til eksemplet ser således ud:

Function Timetal(tider As String) As Double
  Dim tid1 As String
  Dim tid2 As String
  Dim tid1a As String
  Dim tid1b As String
  Dim tid2a As String
  Dim Tid2b As String
  Dim tal1 As Double
  Dim tal2 As Double
  Dim tal1a As Double
  Dim tal1b As Double
  Dim tal2a As Double
  Dim tal2b As Double
  Dim tid As Double
  If InStr(tider, "/") = 0 Then
    Timetal = 0
  Else
    tid1 = Left(tider, InStr(tider, "/") - 1)
    tid2 = Mid(tider, InStr(tider, "/") + 1)
    
    If InStr(tid1, ":") > 0 Then
      tid1a = Left(tid1, InStr(tid1, ":") - 1)
      tid1b = Mid(tid1, InStr(tid1, ":") + 1)
    Else
      tid1a = tid1
      tid1b = ""
    End If
    tal1a = Val(tid1a)
    tal1b = Val(tid1b)
    tal1 = tal1a + (tal1b / 60)
       
    If InStr(tid2, ":") > 0 Then
      tid2a = Left(tid2, InStr(tid2, ":") - 1)
      Tid2b = Mid(tid2, InStr(tid2, ":") + 1)
    Else
      tid2a = tid2
      Tid2b = ""
    End If
    tal2a = Val(tid2a)
    tal2b = Val(Tid2b)
    tal2 = tal2a + (tal2b / 60)
       
    tid = tal2 - tal1
    If tid < 0 Then tid = tid + 24
       
    Timetal = tid
  End If
End Function

For at afprøve det selv, skal du sikre dig, at sikkerhedsniveauet i din Excel ikke forhindrer, at du kører makroer. Du kontrollerer det, ved at vælge Funktioner, Indstillinger, Sikkerhed i menuen. Vælg Makrosikkerhed. Hvis din Excel er indstillet til Høj så lav det om til Mellem (VIGTIGT: Hvis du i fremtiden får Excel filer fra andre personer og din PC spørger om den skal åbne med eller uden makroer bør du svare uden makroer hvis du ikke har fuld tillid til afsender).

Du kan prøve eksemplet således:

  • Kopier ovenstående kode til udklipsholder
  • Start Excel
  • Opret en ny tom projektmappe (XLS-fil)
  • Gå til celle A1 og skriv 14/17:30 og tryk Enter
  • Tryk Alt+F11 (starter VBA editor)
  • Vælg Insert, Module i menuen
  • Indsæt koden fra udklipsholderen
  • Returner til Excel (Alt+Q)
  • Gå til celle A3 og skriv =timetal(a1) og tryk Enter
  • Prøv at rette tidspunkterne i celle A1 (alt efter hvorledes din Excel er indstillet skal du måske trykke F9 for at genberegne)

Hvis du ønsker at beregne summen at timer for 2 celler skriver du eksempelvis =timetal(a1)+timetal(b1)

Du kan også kigge i eksempelfilen vba_example_excel_timetal.xls.