Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VBA: Excel: Sähköpostiin ajastettu muistutus

Sivun loppuun

Kekkonen [04.06.2014 09:09:39]

#

Moro,

Voisiko joku teistä ammattilaisista neuvoa, että kuinka teen excelillä muistutuksen sähköpostiin kun tietty päivämäärä koittaa.

Kyseisessä sähköpostissa olisi kiva jos näkyisi tietoja halutuista soluista.
Pahoittelen huonosta esimerkistä, mutta...
Tarkoituksena olisi saada alla olevasta taulukosta seuraavat tiedot: Etunimi, Sukunimi ja Asia

Etunimi Sukunimi Asia Muistutuspäivä
Keke Rousberg blaa blaa blaa 14.8.2014
Pena Rekkamies jotain jargonia 25.4.2015
Arvid Kröönberg Ja blaa blaa blaa 24.12.2018

- Kekkonen -

Osmo [05.06.2014 06:49:41]

#

Äkkiseltään tuntuisi siltä, että sopivampi työkalu kuvaamaasi tarpeeseen olisi Outlook. Tai joku muu kalenteriohjelmisto, esim. ilmainen/mainosrahoitteinen Google-kalenteri, jolla saisi kaupan päälle myös tekstiviestimuistutuksen.

neosofta [05.06.2014 12:04:06]

#

Virittele tältä pohjalta mielesi mukaan...

VBA-Projektiin referenssi:
Microsoft Outlook xx.0 Object Library
(xx=versionumero, tiedosto on MSOUTL.OLB)

'ThisWorkbook tai TämäTyökirja
Private Sub Workbook_Open()
   StartTimer
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)

   StopTimer
   ThisWorkbook.Save

End Sub
'Module1
Dim aOutlook As Outlook.Application
Dim aEmail As Outlook.MailItem

Public RunWhen As Double
Public Const cRunIntervalSeconds = 60 '300 '(5 minuuttia)
Public Const cRunWhat = "RunAtInterval"


Public Sub StartTimer()

   RunWhen = Now + TimeSerial(0, 0, cRunIntervalSeconds)
   Application.OnTime EarliestTime:=RunWhen, _
   Procedure:=cRunWhat, Schedule:=True

End Sub

Sub RunAtInterval()

    Dim rvalues As Variant
    rvalues = CheckDates()

    If rvalues(0) Then
        SendMail rvalues(1), "Moi " & Split(rvalues(2), " ")(0) & "!" & _
        vbLf & vbLf & rvalues(3)
    End If

    StartTimer

End Sub

Sub StopTimer()

   On Error Resume Next
   Application.OnTime RunWhen, "RunAtInterval", Schedule:=False
   If Err <> 0 Then
      Err.Clear
      On Error GoTo 0
   End If

End Sub

Function CheckDates() As Variant()

    Dim rArray(3) As Variant

    Dim pvm As String
    pvm = Split(Now(), " ")(0)

    Dim vrivi As Long

    ActiveSheet.Unprotect Password:="salasana"
    vrivi = Taul1.Cells.SpecialCells(xlCellTypeLastCell).Row
    ActiveSheet.Protect Password:="salasana", DrawingObjects:=True, Contents:=True, Scenarios:=True

    For i = 1 To vrivi
        If Taul1.Cells(i, 3).Text = pvm Then
            rArray(0) = True
            rArray(1) = Taul1.Cells(i, 2).Text
            rArray(2) = Taul1.Cells(i, 1).Text
            rArray(3) = Taul1.Cells(i, 4).Text
            Taul1.Cells(i, 3).Value = ""
            Taul1.Cells(i, 4).Value = ""
            Exit For
        End If
    Next i


    CheckDates = rArray

End Function

Sub SendMail(ByVal address As String, ByVal message As String)

    Set aOutlook = New Outlook.Application
    Set aEmail = aOutlook.CreateItem(olMailItem)
    aEmail.Importance = 1
    aEmail.Subject = "ASIAA"
    aEmail.BodyFormat = olFormatPlain
    aEmail.Body = message
    aEmail.To = address

    On Error Resume Next
    aEmail.Send

    If Err <> 0 Then
        MsgBox "Sähköpostia lähetettäessä tapahtui virhe" & _
                                    vbCrLf & vbCrLf & Error$
        Err.Clear
        On Error GoTo 0
    End If

    aOutlook.Quit
    Set aEmail = Nothing
    Set aOutlook = Nothing

End Sub

Kuvia:
Taul1
TämäTyökirja
Module1

Kekkonen [05.06.2014 15:10:12]

#

Kiitoksia neosofta hyvästä ja nopeasta vastauksesta.
Tarvii alkaa viritteleen tuota omaan tarpeeseen.. ja vielä kerran kiitoksia :)

- Kekkonen -

neosofta [07.06.2014 08:19:55]

#

Mikäli haluat käyttää viestin lähetykseen OUTLOOK'n asemesta CDO:ta niin poista edellisen esimerkin Module1 alun deklaraatiosta nämä rivit:

Dim aOutlook As Outlook.Application
Dim aEmail As Outlook.MailItem

ja korvaa Sub SendMail koodi seuraavalla koodilla:

Sub SendMail(ByVal address As String, ByVal message As String)

    Dim cdoMsg As Object
    Dim cdoConf As Object
    Set cdoMsg = CreateObject("CDO.Message")
    Set cdoConf = CreateObject("CDO.Configuration")
    Dim schema As String

    schema = "http://schemas.microsoft.com/cdo/configuration/"

    Set Flds = cdoConf.Fields

    With Flds
        .Item(schema & "sendusing") = 2
        .Item(schema & "smtpserver") = "smtp.gmail.com"
        .Item(schema & "smtpserverport") = 465
        .Item(schema & "smtpauthenticate") = 1
        .Item(schema & "sendusername") = "erkki.esimerkki@gmail.com"
        .Item(schema & "sendpassword") = "salasana"
        .Item(schema & "smtpusessl") = 1
        .Update
    End With

    With cdoMsg
        Set .Configuration = cdoConf
        .To = address
        .From = "Erkki Esimerkki"
        .Subject = "ASIAA"
        .TextBody = message
        On Error Resume Next
        .Send
        If Err <> 0 Then
            MsgBox "Sähköpostin lähettämisessä tapahtui virhe" _
            & vbCrLf & vbCrLf & Err.Description
            Err.Clear
            On Error GoTo 0
        End If
    End With

    Set cdoMsg = Nothing
    Set cdoConf = Nothing
    Set Flds = Nothing

End Sub

Valiste VBA editorissa TOOLS -> References ja tutki löytyykö listasta: Microsoft CDO 1.21 Library
Mikäli kirjasto löytyy niin kaikki on OK. Mikäli ei löydy niin lataa tämä, pura .zip pakkaus ja asenna kirjastotiedostot ohjeen mukaan.

Kekkonen [30.06.2014 09:29:45]

#

Moro,

Jonkin verran on mennyt aikaa kun kerkisin testaileen tuota koodipätkää ja se ei suostu toimimaan.
Ilmoittaa virhettä "Compile error: User-defined type not defined"
ja boldaa seuraavan kohdan "aOutlook As Outlook.Application".

- Kekkonen

Grez [30.06.2014 09:40:24]

#

Ja olet tehnyt tämän?

neosofta kirjoitti:

VBA-Projektiin referenssi:
Microsoft Outlook xx.0 Object Library
(xx=versionumero, tiedosto on MSOUTL.OLB)

Kekkonen [30.06.2014 12:33:40]

#

Olin mielestäni tehnyt, mutta en sitten ollutkaan.. sori!
Tuon jälkeen se ilmoitti seuraava..
Virheilmoitus

Ja kiitoksia avusta :)

- Kekkonen

neosofta [06.07.2014 07:20:20]

#

Virittele työkirja seuraavasti:
Poista kaikki muut taulukot paitsi taulukko Taul1.
Valitse taulukon Taul1 sarakkeet sarakkeesta E eteenpäin valitsemalla hiirellä sarake E paina Shift näppäin pohjaan ja pidä se alas painettuna, paina End näppäintä ja sen jälkeen Nuoli oikealle näppäintä, klikkaa valitun alueen sisällä hiiren kakkospainikkeella ja valitse Piilota.
Kirjoita otsikot 1. riville sarakkeiden A - D soluihin.
Valitse sarakkeet A:sta D:hen, klikkaa valitun alueen sisällä hiiren kakkospainikkeelle, valitse Muotoile solut, valitse Suojaus välilehti, poista ruksi valinnasta Lukittu ja klikkaa Ok.
Valitse 1. rivi (otsikkorivi), klikkaa hiiren kakkospainikkeella valitun alueen sisällä, valitse Muotoile solut, valitse Suojaus välilehti, ruksaa valinta Lukittu ja klikkaa Ok.
Suojaa ensin taulukko antamalla salasanaksi salasana ja sen jälkeen työkirja antamalla salasanaksi salasana.
Lopuksi tallenna työkirja makrot sallivaan muotoon


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta