VBA: Hvordan opprette en egendefinert datatype

Submitted by lroedal on Sun, 12/10/2017 - 23:50

Egendefinerte datatyper kan være svært nyttig når du koder VBA i Microsoft Access. Du kan se på en egendefinert datatype som en "beholder" for de datatypene du er vant til å bruke fra før. Det å opprette en er faktisk svært enkelt, du må bare passe på at du oppretter den øverst i koden, over alle funksjoner og sub-rutiner. I tillegg til dette, må du unnlate å skrive dim foran "variablene" du definerer inne i datatypen din, da de ikke er som variabler å regne. Et eksempel på hvordan du kan skrive dette kan sees i kode-vinduet under. Der er det også noen korte eksempler på hvordan du kan bruke en egendefinert datatype

  1. 'Deklarerer en egendefinert datatype
  2. Private Type by
  3. innbyggertall as Double
  4. navn as string
  5. land as string
  6. End type
  7.  
  8. 'Vi antar at vi har en knapp som vi kan trykke på :)
  9. Private Sub btnTest_Click()
  10.  
  11. 'Deklarerer et objekt av den egendefinerte datatypen
  12. Dim enBy as by
  13.  
  14. 'Legger til data i den nye variabelen
  15. enBy.navn = "Molde"
  16. enBy.innbyggertall = 30000
  17. enBy.land = "Norge"
  18.  
  19. 'Skriver ut data fra en egendefinerte typen
  20. Msgbox("Jeg bor i " & enBy.navn & ". Vi har omtrent " & enBy.innbyggertall & " innbyggere, og byen vår ligger i " & enBy.land & ".")
  21.  
  22. 'Deklarerer et array (en samling) av den egendefinerte datatypen
  23. Dim byer(1 to 3) as by
  24.  
  25. 'Legger til testdata
  26. byer(1).navn = "Molde"
  27. byer(2).navn = "Kristiansund"
  28. byer(3).navn = "Ålesund"
  29.  
  30. byer(1).innbyggertall = 30000
  31. byer(2).innbyggertall = 20000
  32. byer(3).innbyggertall = 50000
  33.  
  34. 'Legger til land via en loop, siden det er samme land for alle tre byer
  35. Dim i as integer
  36. for i = LBound(byer) to UBound(byer) 'fra laveste til høyeste punkt i arrayet
  37. byer(i).land = "Norge"
  38. Next i
  39.  
  40. 'Lager output
  41. Dim strResultat as String 'Vi konkatenerer resultatet inn i denne stringen, for enklere printing
  42. for i = LBound(byer) to UBound(byer)
  43. strResultat = strResultat & "By: " & byer(i).navn & " --- Innbyggertall: " & CStr(byer(i).innbyggertall) & " --- Land: " & byer(i).land & VbCrLf 'VbCrLF gir oss en ny linje, CStr konverterer innbyggertallet om til en string
  44. Next i
  45.  
  46. 'Printer resultatet
  47. Msgbox(strResultat)
  48.  
  49. End Sub