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 -
Ä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.
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
Kiitoksia neosofta hyvästä ja nopeasta vastauksesta.
Tarvii alkaa viritteleen tuota omaan tarpeeseen.. ja vielä kerran kiitoksia :)
- Kekkonen -
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.
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
Ja olet tehnyt tämän?
neosofta kirjoitti:
VBA-Projektiin referenssi:
Microsoft Outlook xx.0 Object Library
(xx=versionumero, tiedosto on MSOUTL.OLB)
Olin mielestäni tehnyt, mutta en sitten ollutkaan.. sori!
Tuon jälkeen se ilmoitti seuraava..
Virheilmoitus
Ja kiitoksia avusta :)
- Kekkonen
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
Aihe on jo aika vanha, joten et voi enää vastata siihen.