Excel: Macro laikrodis (timer)

Darbe paskutiniu metu darbavausi prie failų, kuriuose darbuotojai žymės savo darbo laiką. Patogesniam užduočiai sugaištamo laiko įvedimui sugalvojau įdėti makro timer’į, laikroduką ar kaip jį bepavadintumėte. Mano akimis visai patogus dalykas: pirmiausia iš droplist’ų pasirenki ką dirbsi, spaudi „Start“ mygtuką ir dirbi. Pabaigoje paspaudi „Stop“ ir renkiesi kitą funkciją. Kažkaip visai patiko žaist su laikrodžiu. Užturbinau jį kaip reikiant. Čia pateiksiu ne galutinę jo versiją, bet pilnai veikiančią.

Kaip įsidėti Developer kortelę į Excel meniu jau rašiau ankščiau. Pirmiausia, norimoje vietoje, turime įsidėti du mygtukus, juos pasirenkame iš Developer kortelės. Spaudžiame „Insert“ ir renkames po „ActiveX Controls“ užrašu kairiame dešiniame kampe esantį mygtuką.

Macro laikrodis (timer)

Galime nusipiešti iš karto du mygtukus. Ant mygtuko paspaudus dešinį pelės klavišą ir pasirinkus „Properties“ bus galima keisti mygtuko parametrus.

Macro laikrodis (timer)

Mygtuko pavadinimą galima nurodyti ties „Caption“, spalvą ties „BackColor“. Start mygtuką padariau žalios spalvos, Stop – raudoną. Na, kad neatrodytų labai niūrus failas.

Ant bet kurio mygtuko reikia paklikinti du kartus ir atsidariusiame lange įklijuoti tokį kodą:

Private Sub CommandButton1_Click()
startTimer
End Sub

Private Sub CommandButton2_Click()
stopTimer
End Sub

Atrodo taip:

Macro laikrodis (timer)

Tada neuždarius „Visual Basic“ spaudžiame „Inser“ ir renkamės „Module“. Atsidariusiame lange įklijuojam šį tekstą:

Sub startTimer()
On Error Resume Next
Application.OnTime Now + TimeValue(„00:00:01“), „Increment_count“, Schedule:=False
Application.OnTime Now + TimeValue(„00:00:01“), „Increment_count“

End Sub

Sub Increment_count()
If ActiveCell.Column = 1 Then
ActiveCell.Value = ActiveCell + 1
startTimer
Else
MsgBox „Laikrodis veikia tik pažymėjus langelį ‘Sekundės’ stulpelyje“, vbCritical, „Error“
End If
End Sub

Sub stopTimer()
On Error Resume Next
Application.OnTime Now + TimeValue(„00:00:01“), „Increment_count“, Schedule:=False
End Sub

Atrodys šitaip:

Macro laikrodis (timer)

Viso šito esmė yra tokia: Paspaudus Start pirmiausia įvykdoma eilutė kuri sustabdo laikrodį ir tada jį paleidžia. Tuomet, jeigu 1 stulpelyje yra pažymėtas langelis (celė), tame langelyje kas sekundę prie esamo skaičiaus yra pridedamas 1. Jeigu pažymėtas langelis ne 1 stulpelyje – išvedamas klaidos pranešimas. Paspaudus „Stop“ laikrodis sustabdomas.

Galutiniame laikrodžio variante įdėjau užraktą, kad darbuotojai negalėtų ranka pakeisti laikrodžio priskaičiuoto laiko, o paspaudus Stop net tik sustabdomas laikrodis, bet dar ir išsaugomas failas.

Kadangi failais su šiais laikrodukais naudosis mano buvę kolegos, spėju būsiu jų priešas Nr. 1, nes jiems nepatiko jau vien tas faktas, kad reikia kasdien nurodyti savo atliktus darbų kiekius ir jiems sugaištą laiką. Dabar kontroliuojami jie bus dar labiau, nes laikas tiksės pats, ir pakoreguoti savarankiškai negalės (galės tik žinantys slaptažodį). Būtų smagu jei jie tai priimtų, kaip mano pagalbą jiems, padedant patogiau sekti savo laiką, bet labai abejoju ar taip ir bus.

Jeigu norite laikrodžio su aukščiau nurodyta apsauga nuo koregavimo savo failui – kreipkitės į mane per šią nuorodą 🙂 Darbinis failas yra čia.