Skapa händelsehanterare på programnivå i Excel
Anteckning
Office 365 ProPlus byter namn till Microsoft 365-appar för företag. Mer information om den här ändringen finns i det här blogginlägget.
Sammanfattning
Om du vill att en viss händelsehanterare ska köras när en viss händelse utlöses kan du skriva en händelsehanterare för Application-objektet. Händelsehanterare för Application-objektet är globala, vilket innebär att så länge Microsoft Excel är öppet körs händelsehanteraren när händelsen inträffar, oavsett vilken arbetsbok som är aktiv när händelsen inträffar.
I den här artikeln beskrivs hur du skapar en händelsehanterare på programnivå och innehåller ett exempel.
Mer information
Om du vill skapa en händelsehanterare på programnivå måste du använda följande grundläggande steg:
- Deklarera en variabel för Application-objektet med nyckelordet WithEvents. Nyckelordet WithEvents kan användas för att skapa en objektvariabel som svarar på händelser som utlöses av ett ActiveX-objekt (till exempel Application-objektet). Obs! WithEvents är endast giltigt i en klassmodul.
- Skapa proceduren för den specifika Programhändelsen. Du kan till exempel skapa en procedur för händelsen WindowResize, WorkbookOpen eller SheetActivate för det objekt som du deklarerade med WithEvents.
- Skapa och kör en procedur som startar händelsehanteraren.
I följande exempel används de här stegen för att konfigurera en global händelsehanterare som visar en meddelanderuta när du ändrar storlek på ett arbetsboksfönster (händelsen som skjuter i händelsehanteraren).
Skapa och initiera händelsehanteraren
Öppna en ny arbetsbok.
På menyn Verktyg pekar du på Makro och klickar sedan på Visual Basic Editor.
Anteckning
I Microsoft Office Excel 2007 klickar Visual Basic i gruppen Kod på fliken Utvecklare.
Klicka på Klassmodul på Infoga-menyn. En modul med namnet " <book name> - Klass1 (kod)" infogas i projektet.
Ange följande rad med kod i modulen Klass1 (kod):
Public WithEvents appevent As ApplicationNyckelordet WithEvents gör appevent-variabeln tillgänglig i listrutan Objekt i modulfönstret Klass1 (kod).
I modulfönstret Klass1 (kod) klickar du på listrutan Objekt och sedan på appevent i listan.
I modulfönstret Klass1 (kod) klickar du på listrutan Procedur och sedan på WindowResize i listan. Då lägger du till följande i klass1-modulbladet (kod):
Private Sub appevent_WindowResize(ByVal Wb As Excel.Workbook, _ ByVal Wn As Excel.Window) End SubLägg till kod i klass1-modulbladet (kod) så att den visas så här:
Public WithEvents appevent As Application Private Sub appevent_WindowResize(ByVal Wb As Excel.Workbook, _ ByVal Wn As Excel.Window) MsgBox "you resized a window" End SubDärefter måste du skapa en instans av klassen och sedan ange appevent-objektet för instansen av Klass1 till Program. Det här inträffar eftersom när du deklarerar en variabel, WithEvents, vid designtiden finns det inget objekt kopplat till den. En WithEvents-variabel är precis som alla andra objektvariabler – du måste skapa ett objekt och tilldela en referens till objektet till WithEvents-variabeln.
Klicka på Modul på Infoga-menyn för att infoga ett allmänt modulblad av allmän typ i projektet.
Ange följande kod på det här modulbladet:
Dim myobject As New Class1 Sub Test() Set myobject.appevent = Application End SubKör testmakroet.
Du har just ställt in att händelsehanteraren ska köras varje gång du ändrar storlek på ett arbetsboksfönster i Microsoft Excel.
På Arkiv-menyn klickar du på Stäng och återgå till Microsoft Excel.
Ändra storlek på ett arbetsboksfönster. En meddelanderuta med "du har ändrat storlek på ett fönster" visas.
Så här inaktiverar du Händelsehanterare
Om du stänger arbetsboken som innehåller ovanstående projekt inaktiveras händelsehanteraren på programnivå. Om du vill inaktivera händelsehanteraren programmässigt gör du följande:
Starta Visual Basic Editor.
I den makrokod du angav i steg 9 ändrar du makrot till:
Sub test() Set myobject.appevent = Nothing End SubKör testmakroet igen.
På Arkiv-menyn klickar du på Stäng och återgå till Microsoft Excel.
Ändra storlek på ett arbetsboksfönster.
Meddelanderutan visas inte.