Banner

nedeľa 24. marca 2013

Ako importovať obsah konkrétneho emailu z Outlook-u

 

Dnešný článok bude tak trocha náročnejší, avšak na mnohých Excel-fórach často diskutovaný. Mnohí z Vás, ktorí ste pracovali alebo pracujete mi dáte za pravdu, že maznať sa s email-ami je často viac než otravné.

Nehovorím o emailoch, ktorých obsah by sa skôr hodil na SharePoint alebo Dropbox. No Bohužiaľ nie každá firma má premyslenú stratégiu pre manipuláciu s dátami.

Ja ako analytik som niekedy každý deň potreboval uložiť a manipulovať s výnosovými krivkami, ktoré sa aktualizujú každý deň ako správy v Outlook-u.

imagePreto si dnes ukážeme ako sa manipuluje s Outlook-om v rámci MS Excel. Dôležité upozornenie!!! Aktivujte si knižnicu MS Outlook 14.0 Object Library !!!  Kliknite v prostredí VBA na možnosť Tools

image

References… V nich nájdite požadovanú knižnicu, ktorú zaškrtnite a kliknite na Ok.

Potom môžete začať písať svoje makro s Outlook objektmi. Vráťme sa však k úlohe a ukážeme si cieľové makro:

Sub EmailBody()
'
' EmailBody Macro
'
' Keyboard Shortcut: Ctrl+q
'
    Shell ("outlook") 'otvorí MS Outlook
   
    Dim Aplikacia As Outlook.Application
    Dim myNamespace As Outlook.Namespace
    Dim Folder As Outlook.MAPIFolder
    Dim Items As Outlook.Items
    Dim eMail As Variant
    Dim i As Long
   
    Set Aplikacia = CreateObject("Outlook.Application")
    Set myNamespace = Aplikacia.GetNamespace("MAPI") 'typ
priestoru je MAPI    Set Aplikacia.ActiveExplorer.CurrentFolder = myNamespace.GetDefaultFolder _(olFolderInbox)
    Set Folder = myNamespace.GetDefaultFolder(olFolderInbox)
    Set Items = Folder.Items
       
    i = 1
    
    For Each eMail In Items
        If InStr(eMail.Subject, "Excel pre každého") > 0 Then
'názov mailu

                   ThisWorkbook.Sheets("List1").Cells(i, 1).Value = eMail.Body
            Cells(i, 1).ClearFormats
            i = i + 1
        End If
    Next eMail
        
    Aplikacia.Quit 'zatvorí MS Outlook
End Sub


Import Email obsahu z Outlooku do Excelu

Toto makro si samozrejme môžete  modifikovať podľa potrieb. Napríklad ak sa pozriete na kód z článku Graf meniaci sa v čase, tak časovač alebo Timer by spolu s kombináciou mohol zaistiť, že sa stiahnu dáta presne o 12:00 alebo každú nasledujúcu hodinu. Poprípade ak makro vytvoríte vo Workbook-u ako Sub auto_open(), tak sa Vám obsah stiahne vždy, keď otvoríte daný Excelovský súbor.

Súbor, ktorý používam vo videu si môžete stiahnuť kliknutím na nasledujúci obrázok:

downloads_normal

Taktiež nezabudnite na Facebook stránku:

EK logo FB

pondelok 18. marca 2013

Graf, meniaci sa v čase [pre špekulantov]

 

Tento obsah je zároveň odpoveďou pre jedného obchodníka – študenta, ktorý sa okrem iného snaží robiť si svoje analýzy externe – v Excel-i a poprosil ma, či by som nemohol urobiť niečo ako predlohu toho, ako zachytiť hodnoty-meniace sa v čase a zároveň dať ich do grafu.

Odpoveďou je použitie Application.OnTime objektovej metódy

Táto srandička totiž umožňuje spúšťať makro podľa nami stanoveného intervalu, teda kontinuálne.

image

ako vidíte z obrázku, táto metóda má 4 parametre. EarliestTime musí obsahovať časovú periódu, podľa ktorej sa makro bude spúšťať neustále v čase.

Procedure as String je zase názov procedúry-makra, ktoré má zapnúť. String znamená, že máme zapísať názov vo forme textu, t.z. v “úvodzovkách”.

Posledné dva parametre sú voliteľné, LatestTime reprezentuje čas – poslednú možnosť, po ktorú má čakať, ak sa makro nemohlo spustiť v čase EarliestTime.

Posledný Schedule je defaultne nastavený na hodnotu True a ak ho upravíme na False, potom následná metóda, teda opakovanie v čase sa zastaví.

Pozor!!!: parameter EarliestTime si vytvorte ako premennú v module, aby ste nemali problém s chodom celého makra-viď nasledujúce kódy.

Do klasického modulu Module 1 vložte nasledujúce dve makra:

Option Explicit
Dim Cas

Sub AktualizujGraf()

Dim Temp

Temp = Sheets("DATA").Cells(15, 4).Value

'Skopíruje hodnoty akcie Google a vloží ju vo forme novej bunky do dat v grafe
Sheets("Output").Select
Range("G5").Select
Selection.Insert Shift:=xlDown
Range("G5").Value = Temp
   
'vymaže poslednú prebytočnú hodnotu z grafu
Selection.End(xlDown).Select
Selection.ClearContents

'Aktualizuje graf tak, aby disponoval konečným počtom vstupných dát,
'vrátane novej hodnoty, ktorú sme vložili na začiatku
ActiveSheet.ChartObjects("KURZ").Activate
ActiveChart.SeriesCollection(1).Name = "GOOGLE"
ActiveChart.SeriesCollection(1).Values = "=Output!$G$5:$G$14"
Range("G5").Select

'!!!!!!  OnTime metóda, všimnite si definíciu času !!!!!!
Cas = Now + TimeValue("00:00:10")
Application.OnTime Cas, "AktualizujGraf"
   
End Sub
Sub
StopAktualizujGraf()

'V tomto prípade sme v OnTime použili Schedule:= False, ktorým prerušíme kontinualitu
Application.OnTime Cas, "AktualizujGraf", , False
Cells(8, 2).Value = 0
End Subimage

Nasmerujte kurzor na ThisWorkbook a dvojklikom ho otvorte. Do ThisWorkbook modulu vložte tieto makra:

 

 

Private Sub Workbook_BeforeClose(Cancel As Boolean)

If Cells(8, 2).Value = 0 Then
    Exit Sub
Else

    Call StopAktualizujGraf
End If

End Sub

Private Sub Workbook_Open()

Cells(8, 2).Value = 1
Call AktualizujGraf

End Subimage

tie dodatočné kódy ohľadom hodnoty v bunke na riadku 8 a stĺpci 2 slúžia ako forma ošetrenia, v rámci môjho príkladu.

Urobil som dve tlačidla: Stop a Play, ktoré buď prerušia alebo opäť spustia túto procedúru.

Celú túto parádu si môžete stiahnuť kliknutím na nasledujúci obrázok:

downloads_normal

Celý proces by mal fungovať tak, ako to ukazujem v nasledujúcom videu:

Prehľad a funkcionalita

 

Dúfam, že to mnohým pomôže v prípade komentárov alebo azda ďalších nápadov neváhajte a napíšte mi na Facebook-u kliknutím na obrázok:

EK logo FB

sobota 9. marca 2013

HARLEM SHAKE

 

Aj takto môže vyzerať Harlem Shake:

Harlem Shake – Excel Version

Súbor spolu s hudbou si stiahnite kliknutím tu: Download RAR . Potom ho rozbaľte do priečinku a zachovajte súbor s pesničkou vo adresári/foldri. Samozrejme nezabudnite sa pridať do skupiny kliknutí na: EK logo FB