Si esteu intentant entendre bé l'Excel VBA , probablement us podríeu beneficiar d'alguns exemples per desenvolupar aquesta habilitat visual bàsica. Aquí trobareu alguns exemples d'Excel VBA perquè pugueu dominar aquest negoci de gestió d'esdeveniments.
Exemple d'Excel VBA: l'esdeveniment Obre per a un llibre de treball
Un dels esdeveniments d'Excel VBA més utilitzats és l' esdeveniment Workbook Open. Suposem que tens un quadern de treball que fas servir cada dia. El procediment Workbook_Open d'aquest exemple s'executa cada vegada que s'obre el llibre de treball. El procediment comprova el dia de la setmana; si és divendres, el codi us mostrarà un missatge de recordatori.
Per crear el procediment d'Excel VBA que s'executa sempre que es produeix l'esdeveniment d'obertura del llibre de treball, seguiu aquests passos:
Obriu el llibre de treball d'Excel.
Qualsevol llibre de treball d'Excel servirà.
Premeu Alt+F11 per activar el VBE.
Localitzeu el llibre de treball a la finestra del projecte.
Feu doble clic al nom del projecte per mostrar-ne els elements, si cal.
Feu doble clic a l'element ThisWorkbook.
El VBE mostra una finestra de codi buida per a l'objecte ThisWorkbook.
A la finestra Codi, seleccioneu Llibre de treball a la llista desplegable Objecte (esquerra).
El VBE introdueix les declaracions inicial i final d'un procediment Workbook_Open.
Introduïu les declaracions següents, de manera que el procediment complet de l'esdeveniment tingui aquest aspecte:
Llibre de treball secundari privat_Obre()
Atenuar el missatge com a cadena
Si el dia feiner(Ara) = 6 Aleshores
Msg = "Avui és divendres. No us oblideu de "
Msg = Msg & "envia l'informe TPS!"
MsgBox Msg
Acaba si
End Sub
La finestra del codi hauria de tenir aquest aspecte.

Aquest procediment de gestor d'esdeveniments s'executa quan s'obre el llibre de treball.
Workbook_Open s'executa automàticament sempre que s'obre el llibre de treball. Utilitza la funció WeekDay de VBA per determinar el dia de la setmana. Si és divendres (dia 6), un missatge recorda a l'usuari que enviï un informe. Si no és divendres, no passa res.
Si avui no és divendres, potser us costarà provar aquest procediment. Només podeu canviar el 6 perquè correspongui al número real del dia d'avui.
I, per descomptat, podeu modificar aquest procediment de la manera que vulgueu. Per exemple, la versió següent mostra un missatge cada vegada que s'obre el llibre de treball. Això es torna molest després d'un temps.
Un procediment Workbook_Open pot fer gairebé qualsevol cosa. Aquests gestors d'esdeveniments s'utilitzen sovint per al següent:
- Mostrar missatges de benvinguda (com ara al llibre de treball genial de Frank)
- Obrint altres llibres de treball
- Activació d'un full de treball concret al llibre de treball
- Configuració de menús de drecera personalitzats
Aquí teniu un exemple final d'Excel VBA d'un procediment Workbook_Open que utilitza les funcions GetSetting i SaveSetting per fer un seguiment de quantes vegades s'ha obert el llibre de treball. La funció SaveSetting escriu un valor al registre de Windows i la funció GetSetting recupera aquest valor (vegeu el sistema d'ajuda per a més informació). L'exemple següent d'Excel VBA recupera el recompte del registre, l'incrementa i després el desa de nou al registre. També indica a l'usuari el valor de Cnt que correspon al nombre de vegades que s'ha obert el llibre de treball.
Llibre de treball secundari privat_Obre()
Dim Cnt As Long
Cnt = GetSetting ("La meva aplicació", "Configuració", "Obre", 0)
Cnt = Cnt + 1
SaveSetting "La meva aplicació", "Configuració", "Obre", Cnt
MsgBox "Aquest llibre de treball s'ha obert " & Cnt & " vegades."
End Sub
![Exemples d'Excel VBA: exemples d'esdeveniments introductoris]()
Utilitzar un gestor d'esdeveniments Workbook_Open per fer un seguiment de quantes vegades s'ha obert un llibre de treball.
Exemple d'Excel VBA: l'esdeveniment BeforeClose per a un llibre de treball
Aquí teniu un exemple del procediment del gestor d'esdeveniments d'Excel VBA Workbook_BeforeClose, que s'executa automàticament immediatament abans que es tanqui el llibre de treball. Aquest procediment es troba a la finestra Codi d'un objecte ThisWorkbook:
Private Sub Workbook_BeforeClose (Cancel·la com a booleà)
Atenuar el missatge com a cadena
Dim Ans As Long
Dim FName com a cadena
Msg = "Vols fer una còpia de seguretat d'aquest fitxer?"
Resposta = MsgBox(Msg, vbYesNo)
Si Res = vbSí Aleshores
FName = "F:\BACKUP\" & ThisWorkbook.Name
ThisWorkbook.SaveCopyAs FName
Acaba si
End Sub
Aquesta rutina utilitza un quadre de missatge per preguntar a l'usuari si vol fer una còpia de seguretat del llibre de treball. Si la resposta és afirmativa, el codi utilitza el mètode SaveCopyAs per desar una còpia de seguretat del fitxer a la unitat F. Si adapteu aquest procediment per al vostre propi ús, haureu de canviar la unitat i el camí.
Els programadors d'Excel sovint utilitzen un procediment Workbook_BeforeClose per netejar-se. Per exemple, si utilitzeu un procediment Workbook_Open per canviar alguns paràmetres quan obriu un llibre de treball (amagant la barra d'estat, per exemple), només és apropiat que torneu la configuració al seu estat original quan tanqueu el llibre de treball. Podeu realitzar aquesta neteja electrònica amb un procediment Workbook_BeforeClose.
Quan utilitzeu l'esdeveniment Workbook_BeforeClose, tingueu en compte això: si tanqueu l'Excel i s'ha canviat algun fitxer obert des de l'últim desat, Excel mostra el quadre de missatge habitual "Voleu desar els vostres canvis". Si feu clic al botó Cancel·la, es cancel·la tot el procés de tancament. Però l'esdeveniment Workbook_BeforeClose s'haurà executat de totes maneres.
Exemple d'Excel VBA: l'esdeveniment BeforeSave per a un llibre de treball
L'esdeveniment BeforeSave, com el seu nom indica, s'activa abans que es desi un llibre de treball. Aquest esdeveniment es produeix quan trieu Fitxer → Desa o Fitxer → Desa com.
El procediment següent, que es col·loca a la finestra Codi d'un objecte ThisWorkbook, mostra l'esdeveniment BeforeSave. La rutina actualitza el valor d'una cel·la (cel·la A1 al Full1) cada vegada que es desa el llibre de treball. En altres paraules, la cel·la A1 serveix com a comptador per fer un seguiment del nombre de vegades que s'ha desat el fitxer.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI _
Com a booleà, cancel·la com a booleà)
Atenuació del comptador com a rang
Establir comptador = Fulls ("Full1"). Interval ("A1")
Counter.Value = Counter.Value + 1
End Sub
Tingueu en compte que el procediment Workbook_BeforeSave té dos arguments: SaveAsUI i Cancel. Per demostrar com funcionen aquests arguments, examineu la macro següent, que s'executa abans de desar el llibre de treball. Aquest procediment intenta evitar que l'usuari desi el llibre de treball amb un nom diferent. Si l'usuari tria Fitxer → Desa com, l'argument SaveAsUI és True.
Quan el codi s'executa, comprova el valor SaveAsUI. Si aquesta variable és True, el procediment mostra un missatge i estableix Cancel·la en True, que cancel·la l'operació Desa.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI _
Com a booleà, cancel·la com a booleà)
Si SaveAsUI Aleshores
MsgBox "No podeu desar una còpia d'aquest llibre de treball!"
Cancel·la = Veritable
Acaba si
End Sub
Tingueu en compte que aquest procediment no impedirà realment que ningú desi una còpia amb un nom diferent. Si algú realment vol fer-ho, només pot obrir el llibre de treball amb les macros desactivades. Quan les macros estan inhabilitades, els procediments del gestor d'esdeveniments també estan desactivats, la qual cosa té sentit perquè són, després de tot, macros.