VBA programmering og videregående EDB

Friday, September 23, 2005

Øvelser til kap. 3 opg. 7 - Brug af Timer funktionen

Sub TaelStort()
Dim Start, Finish, TotalTime
Dim cell As Range, NLarge As Long

Start = Timer    ' Set start time.

For Each cell In Range("Sales")
If cell.Value > 100 Then NLarge = NLarge + 1
Next
MsgBox NLarge & " celler i ranget har en værdi større end 100.", vbInformation

Finish = Timer    ' Set end time.
TotalTime = Finish - Start    ' Calculate total time.
MsgBox "Programmet tog " & TotalTime & " sekunder at gennemføre."

' Se desuden i VBA hjælpen om Timer funktionen.
End Sub

Øvelser til kap. 3 opg. 6 - Brug af With

Sub Formater()
ActiveWorkbook.Worksheets("Sheet1").Range("A1").Font.Bold = True
ActiveWorkbook.Worksheets("Sheet1").Range("A1").Font.Size = 13
ActiveWorkbook.Worksheets("Sheet1").Range("A1").HorizontalAlignment = xlLeft
ActiveWorkbook.Worksheets("Sheet1").Range("A2:A15").Font.Bold = True
ActiveWorkbook.Worksheets("Sheet1").Range("A2:A15").Font.Italic = True
ActiveWorkbook.Worksheets("Sheet1").Range("A2:A15").Font.ColorIndex = 5
ActiveWorkbook.Worksheets("Sheet1").Range("A2:A15").InsertIndent 1
ActiveWorkbook.Worksheets("Sheet1").Range("B4:B11").Font.Bold = True
ActiveWorkbook.Worksheets("Sheet1").Range("B4:B11").Font.Italic = True
ActiveWorkbook.Worksheets("Sheet1").Range("B4:B11").Font.ColorIndex = 4
ActiveWorkbook.Worksheets("Sheet1").Range("B4:B11").HorizontalAlignment = xlRight
ActiveWorkbook.Worksheets("Sheet1").Range("c4:d4").Font.ColorIndex = 2
ActiveWorkbook.Worksheets("Sheet1").Range("c4:d4").NumberFormat = "#.##0"
End Sub

Sub Formater2()
' Denne Sub laver det samme som den ovenfor, blot ved brug af mindre kode.
With ActiveWorkbook.Worksheets("Sheet1").Range("A1")
    With .Font
        .Bold = True
        .Size = 13
    End With
    
    .HorizontalAlignment = xlLeft
    ' Laver venstre justering
End With

With ActiveWorkbook.Worksheets("Sheet1").Range("A2:A15")
    With .Font
        .Bold = True
        .Italic = True
        .ColorIndex = 5
    End With
    
    .InsertIndent 1
    ' Ser ud til at InsertIndent laver en indrykning (altså lidt ligesom tabulator).
End With

With ActiveWorkbook.Worksheets("Sheet1").Range("B4:B11")
    With .Font
        .Bold = True
        .Italic = True
        .ColorIndex = 4
    End With
    
    .HorizontalAlignment = xlRight
    ' Laver højre justering
End With

With ActiveWorkbook.Worksheets("Sheet1").Range("c4:d4")
    .Font.ColorIndex = 2
    .NumberFormat = "#.##0"
    ' Formaterer tal
End With
End Sub

Sub farver()
'
' farver Macro
' Macro recorded 23-09-2005 by none
'

'
Selection.Font.ColorIndex = 3 'Rød
Selection.Font.ColorIndex = 10 'Grøn
Selection.Font.ColorIndex = 5 'Blå
Selection.Font.ColorIndex = 6 'Gul
Selection.Font.ColorIndex = 13 'Lilla
Selection.Font.ColorIndex = 7 'Lyserød
Selection.Font.ColorIndex = 1 'Sort

' Det er altså muligt at finde frem til de forskellige farvekoder ved at optage en makro hvor man formaterer med forskellige farver. Efterfølgende kan man så se farvekoderne i VBA koden som ovenfor.

End Sub

Tip til VBA

Tip til VBA

Hvis man er i tvivl om hvilken VBA kode man skal bruge til forskellige ting, f.eks. formattering af celler, så kan man bruge Makrooptageren. Denne genererer så VBA koden, og efterfølgende kan man så studere koden, og lære hvordan man gør.

Øvelser til kap. 4 opg. 1 - makrooptageren indsætter overflødig kode

Sub FormaterCeller()
'
' FormaterCeller Macro
' Macro recorded 23-09-2005 by none
'

'
    Range("A1:A4").Select
    With Selection.Interior
        .ColorIndex = 6
        .Pattern = xlSolid
    End With
    With Selection.Font
        .Name = "Arial"
        .Size = 14
        .Underline = xlUnderlineStyleSingle
        .ColorIndex = 5
    End With
    
    ' Makrooptageren indsatte altså en masse overflødig kode, som uden problemer kunne fjernes uden at det fik betydning for programmet.
    
End Sub

Knyt en knap på værktøjslinien til en makro

Sub TalUdenDecimaler()
'
' TalUdenDecimaler Macro
' Macro recorded 23-09-2005 by none
'
    Selection.NumberFormat = "#,##0"
    
' Denne makro formaterer de valgte celler således at tal vises uden decimaler.
' For at knytte makroen til en knap på værktøjslinien gøres følgende:
' Højreklik på en eksisterende værktøjslinie.
' Vælg Customize.
' Vælg fanebladet Commands.
' Vælg "Macro" i det første rullegardin vindue.
' I det andet rullegardin vindue trækkes en knap ud på værktøjslinien.
' Tryk på Close.
' Klik på den nye knap på værktøjslinien.
' Vælg den makro der skal tilknyttes.
' Sådan
End Sub

Wednesday, September 14, 2005

Øvelser til kapitel 3 opgave 2

Public Sub UdregnRevenue2()
Dim Pnavn As String
Dim EnhedPris As Currency
Dim AntalStk As Integer
Dim Revenue As Currency
Dim EnhedPrisTekst As String

Pnavn = InputBox("Indtast produktets navn")

EnhedPrisTekst = "Indtast enhedsprisen for " & Pnavn

EnhedPris = InputBox(EnhedPrisTekst)

AntalStk = InputBox("Indtast antal solgte stk.")

Revenue = EnhedPris * AntalStk

MsgBox "For " & Pnavn & " er enhedsprisen kr. " & EnhedPris & ", antallet solgt er " & AntalStk & " og revenuet er derfor kr. " & Revenue

End Sub

Øvelser til kapitel 3 opgave 1

Public Sub UdregnRevenue()
Dim EnhedPris As Currency
Dim AntalStk As Integer
Dim Revenue As Currency


EnhedPris = InputBox("Indtast produktets enhedspris")
AntalStk = InputBox("Indtast antal solgte stk.")

Revenue = EnhedPris * AntalStk
MsgBox "Revenuet for dette produkt er " & Revenue & " kr."

End Sub

Øvelser til kapitel 3 opgave 3

Option Explicit

Sub UdregnUdgifter()
Dim KundeNavn As String
Dim Nkoeb As Integer
Dim Totalkoeb As Integer
Dim i As Integer
Dim Mngd As Currency

KundeNavn = InputBox("Indtast kundenavn")
Nkoeb = InputBox("Indtast antal stk " & KundeNavn & " har købt i denne måned")
Totalkoeb = 0
For i = 1 To Nkoeb
Mngd = InputBox("Indtast beløb brugt af " & KundeNavn & " ved køb " & i)
Totalkoeb = Totalkoeb + Mngd
Next
MsgBox KundeNavn & " har brugt ialt kr. " & Format(Totalkoeb, "0.00") & _
" i denne måned.", vbInformation
End Sub

' Pointen i denne opgave er altså at hvis der står Option Explicit i toppen, så skal man dimensionere variablene for at kunne køre programmet.

Monday, September 12, 2005

Forelæsningerne i Videregående EDB om torsdagen foregår i følgende lokaler:

uge 37: U45
uge 38: U110
uge 39-43: U45

Opgaver til Kapitel 2

Spørgsmål 1:
Når jeg laver en kopi af et modul fra en workbook til en anden (ved at trække modulet i Project Explorer vinduet), kan det tilsyneladende få nogle anførselstegn til at flytte sig. Vær opmærksom på dette.

Spørgsmål 2:
I immidiate vinduet skriver den straks kodens output, når man trykker efter sætningen.
Det hedder altså immidiate vinduet fordi man får resultatet "immidiately".

Spørgsmål 3:
Man kan altså bruge funktionen "wait" til at lave forsinkelse på noget output.

Monday, September 05, 2005

For hold I, II og IV starter øvelserne i uge 36. For hold V i uge 37 (erstatningstimer afholdes senere).

Friday, September 02, 2005

Erstatningstimer for aflyst forelæsning

Erstatningstimer for den aflyste forelæsning (1. september) afholdes mandag den 5. september 2005 kl. 08-10 i lokale U45.

Velkommen til noter til VBA programmering

Her vil der løbende blive lagt noter til faget videregående EDB på HA uddannelsens 3. semester ud.