A makró időben történő futtatása

Nagyon gyakori eset a gyakorlatban: egy vagy több makrót kell futtatnia egy adott időpontban vagy bizonyos gyakorisággal. Például van egy nagy és nehéz jelentés, amely fél órával frissül, és szeretné futtatni a frissítést fél órával azelőtt, hogy reggel megérkezne a munkahelyére. Vagy van egy makrója, amelynek meghatározott gyakorisággal automatikusan e-maileket kell küldenie az alkalmazottaknak. Vagy ha kimutatástáblával dolgozik, azt szeretné, hogy az menet közben 10 másodpercenként frissüljön, és így tovább.

Nézzük meg, hogy az Excel és a Windows mire képes ezt megvalósítani.

Makró futtatása adott gyakorisággal

Ennek legegyszerűbb módja a beépített VBA módszer használata Application.OnTimeOlyan, amely a megadott időpontban futtatja a megadott makrót. Értsük meg ezt egy gyakorlati példával.

Nyissa meg a Visual Basic szerkesztőt a lap azonos nevű gombjával fejlesztő (Fejlesztő) vagy billentyűparancsot más+F11, helyezzen be egy új modult a menün keresztül Beszúrás – Modul és másold oda a következő kódot:

Dim TimeToRun 'globális változó, ahol a következő futási idő kerül tárolásra 'ez a fő makró Sub MyMacro() Application.Calculate 'számítja újra a könyvet Range("A1").Interior.ColorIndex = Int(Rnd() * 56) 'fill A1 cella véletlenszerű színnel :) Hívja a NextRun-t 'futtassa a NextRun makrót a következő futási idő beállításához End Sub 'ez a makró beállítja a fő makró következő futtatásának idejét Sub NextRun() TimeToRun = Now + TimeValue("00: 00:03") 'adjon hozzá 3 másodpercet az aktuális időhöz Application.OnTime TimeToRun, "MyMacro" 'ütemezze be a következő futtatást End Sub 'makró az ismétlési szekvencia elindításához Sub Start() Hívja a NextRun End Sub 'makrót az ismétlési szekvencia leállításához Sub Finish() Application.OnTime TimeToRun, "MyMacro", , False End Sub  

Találjuk ki, mi van itt.

Először is szükségünk van egy változóra, amely eltárolja a makrónk következő futtatásának idejét – neveztem el TimeToRun. Kérjük, vegye figyelembe, hogy ennek a változónak a tartalmának elérhetőnek kell lennie az összes későbbi makró számára, ezért el kell készítenünk globális, azaz deklarálja a modul legelején az első előtt alatt.

Következik a fő makrónk MyMacro, amely elvégzi a fő feladatot – a könyv újraszámítását a módszerrel Alkalmazás.Számítás. Az érthetőség kedvéért az A1 cellában lévő laphoz hozzáadtam a =TDATE() képletet, amely a dátumot és az időt jeleníti meg – újraszámításkor a tartalma a szemünk láttára frissül (csak kapcsold be a másodpercek megjelenítését a cellában formátum). Az extra szórakozás kedvéért a makróhoz azt a parancsot is hozzáadtam, hogy az A1 cellát véletlenszerűen kiválasztott színnel töltsem ki (a színkód egy 0...56 tartományba eső egész szám, amelyet a függvény generál Rnd és egész függvényre kerekít Int).

Macro NextRun hozzáad az előző értékhez TimeToRun Még 3 másodpercig, majd ütemezi a fő makró következő futtatását MyMacro erre az új időre. Természetesen a gyakorlatban bármilyen más szükséges időintervallumot használhatunk a függvény argumentumainak beállításával TimeValue óó:pp:pp formátumban.

És végül, csak a kényelem kedvéért, több sorozatindító makrót is hozzáadtunk. Kezdőlap és annak befejezése befejez. Az utolsó a negyedik metódus argumentumot használja a sorozat megszakításához. Időben egyenlő Hamis.

Összesen, ha futtatja a makrót Kezdőlap, akkor ez az egész körhinta forog, és a következő képet fogjuk látni a lapon:

A sorozatot a makró futtatásával állíthatja le befejez. A kényelem érdekében a paranccsal mindkét makróhoz billentyűparancsokat rendelhet Makrók – Opciók lap fejlesztő (Fejlesztő – Makrók – Opciók).

Makró futtatása ütemezetten

Természetesen a fent leírtak csak akkor lehetségesek, ha fut a Microsoft Excel, és meg van nyitva benne a fájlunk. Most nézzünk egy bonyolultabb esetet: adott ütemezés szerint kell futtatni az Excelt, például minden nap 5:00-kor, megnyitni benne egy nagy és összetett jelentést, és frissíteni kell az összes kapcsolatot és lekérdezést, hogy az álljunk készen, mire munkába érünk 🙂

Ilyen helyzetben jobb használni Windows ütemező – egy speciálisan a Windows bármely verziójába beépített program, amely meghatározott műveleteket ütemezetten végrehajthat. Valójában már anélkül használja, hogy tudná, mert számítógépe rendszeresen ellenőrzi a frissítéseket, letölti az új víruskereső adatbázisokat, szinkronizálja a felhő mappákat stb. Mindez az ütemező munkája. Tehát az a feladatunk, hogy a meglévő feladatokhoz adjunk még egyet, ami elindítja az Excelt és megnyitja benne a megadott fájlt. A makrónkat pedig felakasztjuk az eseményre Munkafüzet_Megnyitás ezt a fájlt – és a probléma megoldódott.

Azonnal figyelmeztetem, hogy az Ütemezővel való munkavégzés magasabb szintű felhasználói jogosultságot igényelhet, ezért ha nem találja az alábbiakban ismertetett parancsokat és funkciókat a munkahelyi számítógépén az irodában, kérjen segítséget informatikusaitól.

Az ütemező indítása

Tehát indítsuk el az ütemezőt. Ehhez a következőket teheti:

  • Kattintson a jobb gombbal a gombra Rajt És válasszon számítógép kezelése (Számítógép menedzsment)
  • Válassza ki a Vezérlőpulton: Adminisztráció – Feladatütemező (Vezérlőpult — Felügyeleti eszközök — Feladatütemező)
  • Válassza ki a főmenüből Start – Tartozékok – Rendszereszközök – Feladatütemező
  • Nyomja meg a billentyűparancsot győzelem+R, belép taskschd.msc és nyomja meg az belép

A következő ablaknak kell megjelennie a képernyőn (van angol verzióm, de neked is van verzió):

A makró időben történő futtatása

Hozzon létre egy feladatot

Új feladat létrehozásához egy egyszerű, lépésenkénti varázsló segítségével kattintson a hivatkozásra Hozzon létre egy egyszerű feladatot (Alapfeladat létrehozása) a jobb oldali panelen.

A varázsló első lépésében adja meg a létrehozandó feladat nevét és leírását:

A makró időben történő futtatása

Kattintson a gombra Következő (Következő) és a következő lépésben kiválasztunk egy triggert – az indítási gyakoriságot vagy egy eseményt, amely elindítja a feladatunkat (például a számítógép bekapcsolása):

A makró időben történő futtatása

Ha úgy döntött Napi (Napi), akkor a következő lépésben ki kell választania egy adott időpontot, a sorozat kezdő dátumát és a lépést (minden 2. napon, 5. napon stb.):

A makró időben történő futtatása

A következő lépés a művelet kiválasztása – Futtassa a programot (Program indítása):

A makró időben történő futtatása

És végül a legérdekesebb dolog az, hogy pontosan mit kell megnyitni:

A makró időben történő futtatása

A Program vagy script (Program/forgatókönyv) meg kell adnia a Microsoft Excel elérési útját programként, azaz közvetlenül az Excel végrehajtható fájljához. Különböző Windows- és Office-verziójú számítógépeken ez a fájl különböző mappákban lehet, ezért itt van néhány módszer a helyének megállapítására:

  • Kattintson jobb gombbal az ikonra (parancsikonra) az Excel elindításához az asztalon vagy a tálcán, és válassza ki a parancsot Anyagok (Tulajdonságok), majd a megnyíló ablakban másolja ki az elérési utat a sorból cél:

    A makró időben történő futtatása                      A makró időben történő futtatása

  • Nyissa meg bármelyik Excel-munkafüzetet, majd nyissa meg Task Manager (Feladatkezelő) toló Ctrl+más+Tól től és jobb gombbal a sorra Microsoft Excel, válasszon parancsot Anyagok (Tulajdonságok). A megnyíló ablakban átmásolhatja az elérési utat, ne felejtsd el hozzá tenni a fordított perjelet és a végére az EXCEL.EXE-t:

    A makró időben történő futtatása              A makró időben történő futtatása

  • Nyissa meg az Excelt, nyissa meg a Visual Basic szerkesztőt a billentyűparancsokkal más+F11, nyitott panel azonnali kombinációja Ctrl+G, írja be a parancsot:

    ? Application.Path

    … és kattintson rá belép

    A makró időben történő futtatása

    Másolja a kapott útvonalat, ne felejtsd el hozzá tenni a fordított perjelet és a végére az EXCEL.EXE-t.

A Argumentumok hozzáadása (opcionális) (Argumentumok hozzáadása (opcionális)) be kell szúrnia a könyv teljes elérési útját a megnyitni kívánt makróval.

Ha mindent beírt, kattintson Következő és azután befejez (Befejez). A feladatot hozzá kell adni az általános listához:

A makró időben történő futtatása

A létrehozott feladatot kényelmesen kezelheti a jobb oldali gombokkal. Itt azonnali futtatással tesztelheti a feladatot (fuss)anélkül, hogy megvárná a megadott időt. Ideiglenesen deaktiválhat egy feladatot (Letiltás)így egy időre, például a nyaralásra, leáll. Nos, a paramétereket (dátum, idő, fájlnév) a gombbal mindig módosíthatja Anyagok (Tulajdonságok).

Adjon hozzá makrót a fájl megnyitásához

Most már csak be kell akasztanunk könyvünkbe a fájlmegnyitási eseményhez szükséges makró elindítását. Ehhez nyissa meg a könyvet, és nyissa meg a Visual Basic szerkesztőt a billentyűparancs segítségével más+F11 vagy gombokat Visual Basic lap fejlesztő (Fejlesztő). A bal felső sarokban megnyíló ablakban meg kell találni a fájlunkat a fán, és duplán kattintani kell a modul megnyitásához Ezt a könyvet (Ez a munkafüzet).

Ha nem látja ezt az ablakot a Visual Basic szerkesztőben, akkor a menüből nyithatja meg Nézet — Project Explorer.

A megnyíló modulablakban adjon hozzá egy könyvnyitási eseménykezelőt úgy, hogy kiválasztja azt a tetején lévő legördülő listákból Munkafüzet и Nyisd ki, illetve:

A makró időben történő futtatása

Egy eljárássablonnak kell megjelennie a képernyőn. Munkafüzet_Megnyitás, ahol a sorok között Privát részleg и End Sub és be kell illeszteni azokat a VBA-parancsokat, amelyeknek az Excel-munkafüzet megnyitásakor automatikusan végrehajtásra kell kerülniük, amikor az ütemező ütemezés szerint megnyitja. Íme néhány hasznos opció a túlhajtáshoz:

  • ThisWorkbook.RefreshAll – Frissíti az összes külső adatlekérdezést, Power Query lekérdezést és kimutatást. A legsokoldalúbb lehetőség. Csak ne felejtse el alapértelmezés szerint engedélyezni a külső adatokhoz való csatlakozást, és frissítse a hivatkozásokat ezen keresztül Fájl – Beállítások – Bizalmi központ – Bizalmi központ beállításai – Külső tartalom, ellenkező esetben a könyv megnyitásakor egy szabványos figyelmeztetés jelenik meg, és az Excel anélkül, hogy bármit is frissítene, várja áldását a gombra kattintás formájában Engedélyezze a tartalmat (Tartalom engedélyezése):

    A makró időben történő futtatása

  • ActiveWorkbook.Connections(“Connection_Name”).Frissítés — a Connection_Name kapcsolat adatainak frissítése.
  • Lapok ("Sheet5").PivotTables("PivotTable1«).PivotCache.Frissítés – egyetlen nevű pivot tábla frissítése PivotTable1 a lapon Sheet5.
  • Alkalmazás.Számítás – az összes megnyitott Excel munkafüzet újraszámítása.
  • Application.CalculateFullRebuild – az összes képlet kényszerített újraszámítása és az összes nyitott munkafüzet cellái közötti összes függőség újraépítése (az összes képlet újbóli megadásával egyenértékű).
  • Munkalapok („Jelentés”). Nyomtatás – nyomdalap képek.
  • Hívja a MyMacro-t – futtasson egy nevű makrót MyMacro.
  • ThisWorkbook.Save – mentse az aktuális könyvet
  • ThisWorkbooks.Save As "D:ArchiveReport" & Replace(Now, ":", "-") & ".xlsx" – mentse a könyvet egy mappába D: Archívum néven képek dátummal és időponttal a névhez.

Ha azt szeretné, hogy a makró csak akkor kerüljön végrehajtásra, amikor a fájlt az ütemező hajnali 5:00-kor nyitja meg, és ne minden alkalommal, amikor a felhasználó munkanap közben megnyitja a munkafüzetet, akkor érdemes időellenőrzést hozzáadni, például:

Ha Format(Now, "óó:pp") = "05:00", akkor ThisWorkbook.RefreshAll  

Ez minden. Ne felejtse el menteni a munkafüzetet makróképes formátumban (xlsm vagy xlsb), és biztonságosan bezárhatja az Excelt, és hazamehet, bekapcsolva hagyva a számítógépet. Egy adott pillanatban (akkor is, ha a PC le van zárva) az Ütemező elindítja az Excelt és megnyitja benne a megadott fájlt, a makrónk pedig elvégzi a programozott műveleteket. És az ágyban dőzsölni fog, miközben a súlyos jelentést automatikusan újraszámolják – szépség! 🙂

  • Mik azok a makrók, hogyan kell használni őket, hova kell beszúrni a Visual Basic kódot az Excelben
  • Saját makróbővítmény létrehozása az Excelhez
  • A Személyes makró munkafüzet használata makrók könyvtáraként az Excelben

Hagy egy Válaszol