Üdvözletem 2019 utolsó posztjában.
Tegyük fel, hogy van egy fájlunk, amit többen is szerkesztenek (nem valós időben, hanem egyszerre csak egy ember tudja szerkesztésre megnyitni és módosítani, mint pl. egy SharePoint-os oldalon lévő munkafüzetnél).
Ha elfelejtjük, hogy ez a fájl már jó ideje nyitva van, szeretnénk ha az Excel automatikusan elmentené és bezárná nekünk X idő után.
Erre nyújt megoldást a lenti makró, mely az eseménykezelésen alapul. A kapcsolódó bejegyzésem itt olvasható. Részlet:
“Az eseménykezelés segítségével monitorozhatjuk a felhasználói tevékenységet, illetve lefuttathatunk makró(ka)t attól függően, mit csinálunk Excelben.
Ilyen esemény például a munkafüzet megnyitása, mentése vagy épp a munkalap celláinak változása. Az ezekre írt VBA kódok (makrók) automatikusan lefutnak az esemény bekövetkezésekor.”
Az alapelv az, hogy a munkafüzet megnyitásakor lefut egy kód, mely az általunk megadott óra/perc/másodperc letelte után automatikusan elmenti és bezárja a kódot tartalmazó munkafüzetet, inaktivitás esetén. A többi nyitott munkafüzetet és magát az Excel-t nem bántja.
Ha valamilyen eseményt hajtunk végre a fájlban (munkalap aktiválása, cella kijelölése, munkafüzet aktiválása), akkor a számláló újraindul. Vagyis ha 5 percre állítom be az automatikus mentést/bezárást de az idő letelte előtt dolgozok a fájlban: akkor az 5 perc újraindul és csak ennyi inaktív idő után csukódik be.
A kód:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
Option Explicit 'Készítette: XLMotyo (https://xlmotyo.hu) 'Inspiráció: _ https://www.mrexcel.com/board/threads/close-an-unused-workbook-automaticcly-after-a-specific-time.257877/ 'ezeket a konstansokat kell változtatni, hogy mennyi idõ múlva záródjon be automatikusan a kódot tartalmazó munkafüzet Private Const Ora As Integer = 0 Private Const Perc As Integer = 10 Private Const Masodperc As Integer = 30 Private Mikor '************************************************************************************************** Private Sub Workbook_Open() MsgBox "A(z)," & vbNewLine & vbNewLine & "'" & ThisWorkbook.Name & "'" & vbNewLine & vbNewLine & _ "inaktivitás esetén automatikusan mentésre kerül és bezáródik " & Ora & " óra, " _ & Perc & " perc és " & Masodperc & " másodperc múlva.", 48, "Figyelmeztetés" Call IdoLetelt(True) End Sub Private Sub Workbook_SheetActivate(ByVal Sh As Object) Call Ujrakezd End Sub Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) Call Ujrakezd End Sub Private Sub Workbook_Activate() Call Ujrakezd End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) MsgBox "A(z)," & vbNewLine & vbNewLine & "'" & ThisWorkbook.Name & "'" & vbNewLine & vbNewLine & _ "bezárásra kerül.", vbExclamation, "Figyelmeztetés" Call BezarasTorolve End Sub '************************************************************************************************** Sub Ujrakezd() Call BezarasTorolve Call IdoLetelt(True) End Sub Sub IdoLetelt(Optional Jelzo As Boolean) If Jelzo Then Mikor = Now + TimeSerial(Ora, Perc, Masodperc) Application.OnTime Mikor, "ThisWorkbook.IdoLetelt" Exit Sub End If Call BezarasTorolve ThisWorkbook.Close True End Sub Private Sub BezarasTorolve() On Error Resume Next Application.OnTime EarliestTime:=Mikor, Procedure:="ThisWorkbook.IdoLetelt", schedule:=False On Error GoTo 0 End Sub |
Makró hozzáadása
-
-
- Nyissunk meg egy munkafüzetet és ALT+F11-gyel lépjünk be a VBA szerkesztőjébe.
- Másoljuk ki a fenti kódot (CTRL + C)
- A munkafüzet nevéhez tartozó “ThisWorkbook”-on kattintsunk duplán
- a jobb oldalon illesszük be a kódot (CTRL + V)
- Vagyis:
-
Végezetül a makrót tartalmazó munkafüzet mentése, bezárása, újranyitása.
A kódban megjegyzésként hozzáadtam a megértést segítő magyarázatokat de az alábbiakat külön kiemelném:
- azt, hogy mennyi idő után záródjon be a fájl automatikusan (óra/perc/másodperc) az elején tudjuk módosítani:
- a makrót tartalmazó munkafüzet megnyitásakor egy üzenetablak fogad, mely tartalmazza a bezárásig eltelt időt:
- az idő letelte után tehát a fájl automatikusan mentése kerül és bezáródik egy szemvillanás alatt. Hogy kapjunk valamiféle visszajelzést a bezárásról, beletettem a kódba egy üzenetablakot, mely tájékoztat minket és egyúttal megállítja a bezárást az “OK” gomb megnyomásáig:
Remélem hasznos volt a poszt.
Kérdésed, észrevételed van? Hívj vagy dobj egy emailt az xlmotyo@gmail.com-ra.