Pagpapatakbo ng macro sa oras

Isang napakakaraniwang kaso sa pagsasanay: kailangan mong patakbuhin ang isa o higit pa sa iyong mga macro sa isang partikular na oras o sa isang tiyak na dalas. Halimbawa, mayroon kang malaki at mabigat na ulat na nag-a-update ng kalahating oras at gusto mong patakbuhin ang pag-update kalahating oras bago ka dumating sa trabaho sa umaga. O mayroon kang isang macro na dapat awtomatikong magpadala ng mga email sa mga empleyado sa isang tinukoy na dalas. O, kapag nagtatrabaho sa isang PivotTable, gusto mo itong mag-update sa mabilisang bawat 10 segundo, at iba pa.

Tingnan natin kung ano ang kakayahan ng Excel at Windows na ipatupad ito.

Pagpapatakbo ng macro sa isang ibinigay na dalas

Ang pinakamadaling paraan upang gawin ito ay ang paggamit ng built-in na paraan ng VBA Application.OnTimeIsang nagpapatakbo ng tinukoy na macro sa tinukoy na oras. Unawain natin ito gamit ang isang praktikal na halimbawa.

Buksan ang Visual Basic editor gamit ang button ng parehong pangalan sa tab developer (Developer) o keyboard shortcut Alt+F11, magpasok ng bagong module sa pamamagitan ng menu Ipasok – Module at kopyahin ang sumusunod na code doon:

Dim TimeToRun 'global variable kung saan ang susunod na run time ay naka-imbak 'ito ang pangunahing macro Sub MyMacro() Application.Calculate 'recalculate the book Range("A1").Interior.ColorIndex = Int(Rnd() * 56) 'fill cell A1 na may random na kulay :) Tawagan ang NextRun 'patakbuhin ang NextRun macro upang itakda ang susunod na oras ng pagtakbo End Sub 'ang macro na ito ay nagtatakda ng oras para sa susunod na pagtakbo ng pangunahing macro Sub NextRun() TimeToRun = Now + TimeValue("00: 00:03") 'magdagdag ng 3 segundo sa kasalukuyang oras na Application.OnTime TimeToRun, "MyMacro" 'iiskedyul ang susunod na run End Sub 'macro para simulan ang repeat sequence Sub Start() Call NextRun End Sub 'macro para ihinto ang repeat sequence Sub Finish() Application.OnTime TimeToRun, "MyMacro", , False End Sub  

Alamin natin kung ano ang narito.

Una, kailangan namin ng variable na mag-iimbak ng oras ng susunod na pagtakbo ng aming macro - tinawag ko ito TimeToRun. Pakitandaan na ang mga nilalaman ng variable na ito ay dapat na magagamit sa lahat ng aming kasunod na mga macro, kaya kailangan namin itong gawin global, ibig sabihin, ideklara sa pinakasimula ng modyul bago ang una sub.

Susunod ay ang aming pangunahing macro MyMacro, na gagawa ng pangunahing gawain - upang muling kalkulahin ang aklat gamit ang pamamaraan Paglalapat.Kalkulahin. Upang gawing mas malinaw, idinagdag ko ang formula =TDATE() sa sheet sa cell A1, na nagpapakita ng petsa at oras – kapag muling kinalkula, ang mga nilalaman nito ay maa-update sa harap mismo ng ating mga mata (i-on lang ang display ng mga segundo sa cell format). Para sa karagdagang kasiyahan, idinagdag ko rin sa macro ang utos na punan ang cell A1 ng random na napiling kulay (ang color code ay isang integer sa hanay na 0..56, na nabuo ng function Rnd at ini-round up sa isang integer function Int).

Macro NextRun nagdaragdag sa dating halaga TimeToRun 3 higit pang mga segundo at pagkatapos ay iiskedyul ang susunod na pagtakbo ng pangunahing macro MyMacro para sa bagong panahon na ito. Siyempre, sa pagsasanay, maaari mong gamitin ang anumang iba pang mga agwat ng oras na kailangan mo sa pamamagitan ng pagtatakda ng mga argumento ng function TimeValue sa format na hh:mm:ss.

At sa wakas, para lamang sa kaginhawahan, mas maraming sequence launch macro ang naidagdag. Tahanan at ang pagkumpleto nito Tapusin. Ang huli ay gumagamit ng ikaapat na paraan ng argumento upang masira ang pagkakasunod-sunod. Nasa oras kapantay Huwad.

Kabuuan kung patakbuhin mo ang macro Tahanan, pagkatapos ay iikot ang buong carousel na ito, at makikita natin ang sumusunod na larawan sa sheet:

Maaari mong ihinto ang sequence sa pamamagitan ng pagpapatakbo, ayon sa pagkakabanggit, ang macro Tapusin. Para sa kaginhawahan, maaari kang magtalaga ng mga keyboard shortcut sa parehong mga macro gamit ang command Mga Macro - Mga Pagpipilian tab developer (Developer — Macros — Opsyon).

Pagpapatakbo ng macro sa isang iskedyul

Siyempre, lahat ng inilarawan sa itaas ay posible lamang kung mayroon kang Microsoft Excel na tumatakbo at ang aming file ay nakabukas dito. Ngayon tingnan natin ang isang mas kumplikadong kaso: kailangan mong patakbuhin ang Excel ayon sa isang naibigay na iskedyul, halimbawa, araw-araw sa 5:00, buksan ang isang malaki at kumplikadong ulat dito at i-update ang lahat ng koneksyon at mga query dito upang ito ay maging handa sa oras na makarating tayo sa trabaho 🙂

Sa ganitong sitwasyon, mas mainam na gamitin Windows Scheduler – isang program na espesyal na binuo sa anumang bersyon ng Windows na maaaring magsagawa ng mga tinukoy na aksyon sa isang iskedyul. Sa katunayan, ginagamit mo na ito nang hindi nalalaman, dahil ang iyong PC ay regular na nagsusuri ng mga update, nagda-download ng mga bagong database ng anti-virus, nagsi-synchronize ng mga folder ng ulap, atbp. Ito ay lahat ng gawain ng Scheduler. Kaya ang aming gawain ay magdagdag sa mga kasalukuyang gawain ng isa pang maglulunsad ng Excel at buksan ang tinukoy na file dito. At isabit namin ang aming macro sa kaganapan Workbook_Buksan ang file na ito - at ang problema ay nalutas.

Gusto kong balaan ka kaagad na ang pagtatrabaho sa Scheduler ay maaaring mangailangan ng mga advanced na karapatan ng user, kaya kung hindi mo mahanap ang mga command at function na inilalarawan sa ibaba sa iyong computer sa trabaho sa opisina, makipag-ugnayan sa iyong mga IT specialist para sa tulong.

Paglulunsad ng Scheduler

Kaya simulan natin ang Scheduler. Upang gawin ito, maaari mong:

  • Mag-right click sa button simula at pumili Computer Management (Pamamahala ng kompyuter)
  • Piliin sa Control Panel: Pangangasiwa – Task Scheduler (Control Panel — Administrative Tools — Task Scheduler)
  • Pumili mula sa pangunahing menu Start – Mga Accessory – System Tools – Task Scheduler
  • Pindutin ang shortcut sa keyboard Manalo+R, pasok taskschd.msc at pindutin ang Magpasok

The following window should appear on the screen (I have an English version, but you can also have a version):

Pagpapatakbo ng macro sa oras

Lumikha ng isang gawain

Upang lumikha ng bagong gawain gamit ang isang simpleng step-by-step na wizard, mag-click sa link Gumawa ng isang simpleng gawain (Gumawa ng Pangunahing Gawain) sa kanang panel.

Sa unang hakbang ng wizard, ilagay ang pangalan at paglalarawan ng gawaing gagawin:

Pagpapatakbo ng macro sa oras

Mag-click sa pindutan susunod (Susunod) at sa susunod na hakbang ay pipili kami ng trigger – ang dalas ng paglulunsad o isang kaganapan na maglulunsad ng aming gawain (halimbawa, pag-on sa computer):

Pagpapatakbo ng macro sa oras

Kung pinili mo Araw-araw (Araw-araw), pagkatapos ay sa susunod na hakbang kakailanganin mong pumili ng isang partikular na oras, petsa ng pagsisimula ng pagkakasunud-sunod at hakbang (bawat ika-2 araw, ika-5 araw, atbp.):

Pagpapatakbo ng macro sa oras

Ang susunod na hakbang ay ang pumili ng isang aksyon - Patakbuhin ang programa (Magsimula ng programa):

Pagpapatakbo ng macro sa oras

At sa wakas, ang pinaka-kagiliw-giliw na bagay ay kung ano ang eksaktong kailangang buksan:

Pagpapatakbo ng macro sa oras

Sa Programa o script (Programa/script) kailangan mong ipasok ang landas sa Microsoft Excel bilang isang programa, ibig sabihin, direkta sa Excel executable. Sa iba't ibang computer na may iba't ibang bersyon ng Windows at Office, maaaring nasa iba't ibang folder ang file na ito, kaya narito ang ilang paraan para malaman mo ang lokasyon nito:

  • Mag-right-click sa icon (shortcut) upang ilunsad ang Excel sa desktop o sa taskbar at piliin ang command kagamitan (Ari-arian), at pagkatapos ay sa window na bubukas, kopyahin ang path mula sa linya Target:

    Pagpapatakbo ng macro sa oras                      Pagpapatakbo ng macro sa oras

  • Buksan ang anumang Excel workbook, pagkatapos ay buksan Task Manager (Task manager) patulak Ctrl+Alt+mula sa at sa pamamagitan ng pag-right click sa linya Microsoft Excel, pumili ng utos kagamitan (Ari-arian). Sa window na bubukas, maaari mong kopyahin ang landas, hindi nakakalimutang magdagdag ng backslash dito at EXCEL.EXE sa dulo:

    Pagpapatakbo ng macro sa oras              Pagpapatakbo ng macro sa oras

  • Buksan ang Excel, buksan ang Visual Basic editor gamit ang keyboard shortcut Alt+F11, bukas na panel Kagyat isang kombinasyon ng Ctrl+G, ipasok ang utos dito:

    ? Application.Path

    … at mag-click sa Magpasok

    Pagpapatakbo ng macro sa oras

    Kopyahin ang nagresultang landas, hindi nakakalimutang magdagdag ng backslash dito at EXCEL.EXE sa dulo.

Sa Magdagdag ng mga argumento (opsyonal) (Magdagdag ng mga argumento (opsyonal)) kailangan mong ipasok ang buong path sa aklat na may macro na gusto naming buksan.

Kapag naipasok na ang lahat, pagkatapos ay i-click susunod at pagkatapos ay Tapusin (Tapos na). Ang gawain ay dapat idagdag sa pangkalahatang listahan:

Pagpapatakbo ng macro sa oras

Ito ay maginhawa upang pamahalaan ang nilikha na gawain gamit ang mga pindutan sa kanan. Dito maaari mong subukan ang gawain sa pamamagitan ng pagpapatakbo nito kaagad (tumakbo)nang hindi naghihintay sa tinukoy na oras. Maaari mong pansamantalang i-deactivate ang isang gawain (Huwag paganahin)upang huminto ito sa pagtakbo sa loob ng ilang panahon, gaya ng iyong bakasyon. Well, maaari mong palaging baguhin ang mga parameter (mga petsa, oras, pangalan ng file) sa pamamagitan ng pindutan kagamitan (Ari-arian).

Magdagdag ng macro para magbukas ng file

Ngayon ay nananatili sa aming aklat ang paglulunsad ng macro na kailangan namin sa file open event. Upang gawin ito, buksan ang aklat at pumunta sa editor ng Visual Basic gamit ang keyboard shortcut Alt+F11 o mga pindutan Visual Basic tab developer (Developer). Sa window na bubukas sa kaliwang sulok sa itaas, kailangan mong hanapin ang aming file sa puno at i-double click upang buksan ang module Itong libro (This Workbook).

Kung hindi mo nakikita ang window na ito sa Visual Basic editor, maaari mo itong buksan sa pamamagitan ng menu Tingnan — Project Explorer.

Sa module window na bubukas, magdagdag ng book open event handler sa pamamagitan ng pagpili dito mula sa mga drop-down list sa itaas Workbook и Pagbubukas, ayon sa pagkakabanggit:

Pagpapatakbo ng macro sa oras

Dapat lumitaw ang isang template ng pamamaraan sa screen. Workbook_Buksan, kung saan sa pagitan ng mga linya Pribadong Sub и End Sub at kailangan mong ipasok ang mga VBA na utos na dapat ay awtomatikong maisakatuparan kapag binuksan ang Excel workbook na ito, kapag binuksan ito ng Scheduler ayon sa iskedyul. Narito ang ilang kapaki-pakinabang na opsyon para sa overclocking:

  • ThisWorkbook.RefreshAll – Nire-refresh ang lahat ng external na query sa data, Power Query query, at PivotTables. Ang pinaka maraming nalalaman na opsyon. Basta huwag kalimutang payagan ang mga koneksyon sa panlabas na data bilang default at i-update ang mga link sa pamamagitan ng File – Opsyon – Trust Center – Trust Center Opsyon – Panlabas na Nilalaman, kung hindi, kapag binuksan mo ang libro, isang karaniwang babala ang lalabas at ang Excel, nang walang pag-update ng anuman, ay maghihintay para sa iyong pagpapala sa anyo ng pag-click sa pindutan Paganahin ang nilalaman (Paganahin ang nilalaman):

    Pagpapatakbo ng macro sa oras

  • ActiveWorkbook.Connections("Connection_Name").I-refresh — pag-update ng data sa koneksyon ng Connection_Name.
  • Mga Sheet("Sheet5").PivotTables("PivotTable1«).PivotCache.I-refresh – pag-update ng isang pivot table na pinangalanan PivotTable1 sa sheet Sheet5.
  • Paglalapat.Kalkulahin – muling pagkalkula ng lahat ng bukas na workbook ng Excel.
  • Application.CalculateFullRebuild – sapilitang muling pagkalkula ng lahat ng mga formula at muling pagtatayo ng lahat ng mga dependency sa pagitan ng mga cell sa lahat ng bukas na workbook (katumbas ng muling pagpasok ng lahat ng mga formula).
  • Worksheet("Ulat").PrintOut – print sheet pics.
  • Tawagan ang MyMacro – magpatakbo ng isang macro na pinangalanan MyMacro.
  • ThisWorkbook.I-save – i-save ang kasalukuyang aklat
  • ThisWorkbooks.SaveAs “D:ArchiveReport” at Palitan(Ngayon, “:”, “-“) at “.xlsx” – i-save ang aklat sa isang folder D:I-archive sa ilalim ng pangalan pics na may petsa at oras na nakadugtong sa pangalan.

Kung gusto mong maisakatuparan lamang ang macro kapag ang file ay binuksan ng Scheduler sa 5:00 am, at hindi sa tuwing bubuksan ng user ang workbook sa araw ng trabaho, makatuwirang magdagdag ng time check, halimbawa:

If Format(Now, "hh:mm") = "05:00" Then ThisWorkbook.RefreshAll  

Iyon lang. Huwag kalimutang i-save ang iyong workbook sa isang macro-enabled na format (xlsm o xlsb) at maaari mong ligtas na isara ang Excel at umuwi, na iniiwan ang iyong computer. Sa isang naibigay na sandali (kahit na naka-lock ang PC), ilulunsad ng Scheduler ang Excel at bubuksan ang tinukoy na file dito, at gagawin ng aming macro ang mga naka-program na aksyon. At ikaw ay magpapakasarap sa kama habang ang iyong mabigat na ulat ay awtomatikong muling kinalkula - kagandahan! 🙂

  • Ano ang mga macro, kung paano gamitin ang mga ito, kung saan ilalagay ang Visual Basic code sa Excel
  • Paano gumawa ng sarili mong macro add-in para sa Excel
  • Paano gamitin ang Personal Macro Workbook bilang isang library para sa iyong mga macro sa Excel

Mag-iwan ng Sagot