IT Fjernundervisning

Hændelser

Beskrivelse

Hændelser

Ud over at være objektorienteret er VBA også hændelsesbaseret. Det betyder, at man kan skrive kode, der knytter sig til forskellige hændelser omkring regnearket. Lad os se på et lille eksempel. Dobbelt klik på ThisWorkbook. De to rullepaneler i toppen af arbejdsområdet giver mulighed for at vælge at skrive kode til forskellige hændelser omkring regnearket. Koden her knytter sig til den hændelse, at regnearket åbnes. Sådan en kode kalder man også en hændelsesprocedure.

Excel VBA kursus - VBE hændelser - fjernundervisning

Dobbeltklikker man på Ark1 til Ark3 kan man skrive hændelsesprocedurer til hændelser omkring de enkelte arkfaner. Vi kommer til at arbejde mere med hændelser når vi skal kigge på userforms.

 


 

Headers og Footeres på print

En typisk udfordring er, at man ønsker at få sat Header og Footer på sit print. Denne lille hændelsesprocedure hjælper med det:

Private Sub Workbook_BeforePrint(Cancel As Boolean)   Dim wks As Worksheet   Dim sFilnavn As String   Dim sFirmanavn As String   sFirmanavn = Worksheets("Profit").Range("A1").Value   sFilnavn = ThisWorkbook.FullName   For Each wks In ThisWorkbook.Worksheets     With wks.PageSetup       .LeftFooter = sFirmanavn       .CenterFooter = ""       .RightFooter = sFilnavn     End With   Next End Sub

 


Øvelse

Lav et regneark, der hedder "Hændelser.xlsm". Sørg for at regnearket har følgende funktionaliteter:

  1. Når regnearket åbnes skal en messagebox byde velkommen til regnearket
  2. Når man forsøger at lukke regnearket skal der komme en messagebox, der spørger om man har husket at gemme. Hvis man svarer nej skal arket ikke lukkes. (Den variabel, der hedder Cancel i hændelsesproceduren kan bruges til at angive om proceduren skal afbrydes (ved at sætte Cancel = True)
  3. Når man vælger Ark 3 skal der komme en hilsen der siger "Velkommen til Ark 3"

 

Ekstraopgave:

  1. Kan du finde ud af at lave en hændelsesprocedure, der, når brugeren forsøger at indsætte en ny arkfane, kommer ud og spørger om et navn til arkfanen, og sørger for at oprette arket med det indtastede navn?

 

Send regnearket til mig.


Løsning

Se mit løsningsforslag her.


Min kode ser sådan her ud - først på ThisWorkbook siden:

Private Sub Workbook_BeforeClose(Cancel As Boolean)     svar = MsgBox("Har du husket at gemme?", vbYesNo)     If svar = vbNo Then         Cancel = True     End If End Sub
Private Sub Workbook_NewSheet(ByVal Sh As Object)     arknavn = InputBox("Hvad skal arket hedde?")     Sh.Name = arknavn End Sub
Private Sub Workbook_Open()     MsgBox "Velkommen til regnearket :-)" End Sub

Og dernæst på Sheet3 siden:

Private Sub Worksheet_Activate()    MsgBox "Velkommen til ark 3" End Sub

Bemærk, at Workbook_NewSheet hændelsesproceduren får overført en Sh parameter, der peger på det nye ark der er ved at blive oprettet og det er derfor meget let at give det nye ark et navn.

Man kan i øvrigt også spørge regnearket selv om det er blevet gemt og gemme automatisk for brugeren - det gøres gennem ActiveWorkbook objektet. En implementering af det kan se sådan her ud:

Private Sub Workbook_BeforeClose(Cancel As Boolean)     If Not ActiveWorkbook.Saved Then         svar = MsgBox("Skal du ikke gemme?", vbYesNo)         If svar = vbYes Then             ActiveWorkbook.Save         Else             ActiveWorkbook.Saved = True         End If     End If End Sub

Brug for hjælp til VBA, VSTO eller SQL?

Scient Data tilbyder professionel IT-konsulentbistand

Kontakt Scient Data →