Otázka čitateľky: Potrebovala by som poradiť, ako donútiť kalendár Outlooku k tomu, aby mi spočítal čas rozlične farebne označených úloh v rámci jednotlivých dní. Outlook používame v práci a zamestnávateľ momentálne pracuje na zlepšení prerozdelenia pracovných úloh, pričom od nás žiada časovú snímku mesiaca a roka, z ktorej by bolo jasné, koľko času venujeme napríklad na administratívnu činnosť, koľko na odbornú a podobne. Tieto záznamy tam mám farebne označené, ale nedarí sa mi nijak ich čas automaticky spočítať. Skúšala som hľadať odpoveď cez pomocníka Outlooku a takisto vyhľadávaním na internete, ale neúspešne. Je niečo také možné?

Žiaľ, vyžadujete od daného programu funkciu, pre ktorú nie je v základe určený. Na kalendár Outlooku treba nazerať ako na záznam budúcich udalostí a upomienkovač.

Ak ho chcete používať na tracking vlastných činností a stráveného času na jednotlivých úlohách, je nutné niečo také doslova naprogramovať.

Outlook to umožňuje pomocou makier. Postup je pomerne komplexnejší, avšak je možné aj „slepo“ nasledovať návod a použiť makro, ktoré už niekto naprogramoval za vás. Využiť môžete šikovný kód, ktorý naprogramoval Robert Sparnaaij. Proces vytvorenia alebo aplikácie nového makra v rámci balíku Office je nasledovný:

Otvorte program Outlook a stlačte klávesu skratku ALT+F11. Otvorí sa okno programu Visual Basic pre aplikácie, v rámci ktorého kliknite na Insert/Module. Do otvoreného okna skopírujte nasledujúci kód, pričom v prípade záujmu povoľte položku ShowMilage, pokiaľ chcete okrem času spočítavať aj vzdialenosti.

'Autorom tohto skriptu je: Robert Sparnaaij aka Roady (www.howto-outlook.com)
'Slovenská vezia TOUCHIT (for english version, use www.howto-outlook.com/howto/timespent.htm)
'Obmedzenie; Nasledovný kód nebude fungovať pre pravidelne opakujúce sa udalosti.
'Dôvodom je, že sa v kalendári vyskytujú iba jeden krát.
'Ak požadujete počítanie aj tohto času, použite pokročilejší reportovací add-on,
'ktorý nájdete na adrese: http://www.howto-outlook.com/tag/reporting

Public Sub TimeSpentReport()
    Dim objOL As Outlook.Application
    Dim objSelection As Outlook.Selection
    Dim objItem As Object
    Dim Duration As Long
    Dim TotalWork As Long
    Dim Mileage As Long
    Dim Result As Integer
    Dim ShowMileage As Boolean
    
    'Položku ShowMilage zmeňte z False na True v prípade, že chcete spočítať
    'okrem času aj najazdené kilometre.
    ShowMileage = False
    
    Duration = 0
    TotalWork = 0
    Mileage = 0
    
    On Error Resume Next

    Set objOL = CreateObject("Outlook.Application")
    Set objSelection = objOL.ActiveExplorer.Selection

    For Each objItem In objSelection
        If objItem.Class = olAppointment Then
            Duration = Duration + objItem.Duration
            Mileage = Mileage + objItem.Mileage
        ElseIf objItem.Class = olTask Then
            Duration = Duration + objItem.ActualWork
            TotalWork = TotalWork + objItem.TotalWork
            Mileage = Mileage + objItem.Mileage
        ElseIf objItem.Class = Outlook.olJournal Then
            Duration = Duration + objItem.Duration
            Mileage = Mileage + objItem.Mileage
        Else
            Result = MsgBox("Nebola vybratá žiadna položka kalendáru, úlohy alebo žurnálu.", vbCritical, "Strávený čas")
            Exit Sub
        End If
    Next
    
    'Reportovacie správy
    Dim MsgBoxText As String
    MsgBoxText = "Celkový čas strávený na vybratej položke; " & vbNewLine & Duration & " minút"
    
    If Duration > 60 Then
        MsgBoxText = MsgBoxText & HoursMinsMsg(Duration)
    End If
    
    If TotalWork > 0 Then
        MsgBoxText = MsgBoxText & vbNewLine & vbNewLine & "Celkový čas práce na vybratej úlohe; " & vbNewLine & TotalWork & " minút"
        
        If TotalWork > 60 Then
            MsgBoxText = MsgBoxText & HoursMinsMsg(TotalWork)
        End If
    End If
    
    If ShowMileage = True Then
        MsgBoxText = MsgBoxText & vbNewLine & vbNewLine & "Celková vzdialenosť; " & Mileage
    End If

    Result = MsgBox(MsgBoxText, vbInformation, "Strávený čas")

ExitSub:
    Set objItem = Nothing
    Set objSelection = Nothing
    Set objOL = Nothing
End Sub

Public Function HoursMinsMsg(TotalMinutes As Long) As String
        Dim Hours As Long
        Dim Minutes As Long
        Hours = TotalMinutes  60
        Minutes = TotalMinutes Mod 60
        HoursMinsMsg = " (" & Hours & " hodín a " & Minutes & " minút)"
End Function

Alternatívne môžete namiesto kopírovania textu využiť formu importu. Celý tento kód si môžete stiahnuť ako súbor a ten následne v okne Visual Basicu importovať kliknutím na menu File/Import File.  Nech už kód vložíte akokoľvek, následne okno zavrite a vráťte sa do hlavného okna Outlooku.

Následne sa k novej funkcii makra potrebujete dostať. Kliknite teda pravým tlačidlom myši na horný pás kariet s tlačidlami a z kontextového menu vyberte možnosť Prispôsobiť pás s nástrojmi. V pravej časti otvoreného okna zaškrtnite políčko Vývojár a kliknite na OK.

Na páse kariet si následne všimnite, že pribudla nová kategória s týmto názvom, takže sa kliknutím na ňu prepnite a v ľavom hornom rohu kliknite na tlačidlo Makrá, kde budete môcť spustiť funkciu TimeSpentReport.

Značky: