<追記>
outlookのアカウントはhotmailのを使った。他のサービスのメアドでうまくいくのかは不明
</追記>
snack.elve.club
ファイルを開くと予定表リストができて、チェックつけた予定の5分前にメールを送信予約してくれるマクロだよー
開くとこうなって↓
sheet2はこんな感じ*1
チェックつけてボタンを押す↓
↓メール送信予約できちゃった*2
ThisWorkbookのコード
Private Sub Workbook_Open()
Sheet1.clrMain
If Sheet2.chkParameter Then
Sheet1.getSchedule
Sheet1.addMailButton
Else
MsgBox ("送信先と時間を指定してください")
Sheet2.Select
End If
Range("A1").Select
End Sub
Sheet1のコード
Sub clrMain()
Dim e As Long: e = Range("A1").CurrentRegion.Item(Range("A1").CurrentRegion.Count).Row
If e > 1 Then
Range("2:" & e).Delete
Dim s As Shape
End If
For Each s In Me.Shapes
s.Delete
Next
End Sub
Sub addChkbox(r As Range)
If r Is Nothing Then Exit Sub
Dim t As Long: t = r.Top
Dim l As Long: l = r.Left
Dim w As Long: w = r.Width
Dim h As Long: h = r.Height
Me.CheckBoxes.Add(l, t, w, h).Select
With Selection
.Value = xlOff
.Name = "Chk" & r.Row
.Characters.Text = ""
.Text = ""
.LinkedCell = r.Address
End With
End Sub
Sub addMailButton()
Dim r As Range: Set r = Range("F1:H3")
Dim t As Long: t = r.Top
Dim l As Long: l = r.Left
Dim w As Long: w = r.Width
Dim h As Long: h = r.Height
Me.Buttons.Add(l, t, w, h).Select
With Selection
.Name = "SendMail"
.Characters.Text = "SendMail"
.Text = "SendMail"
.OnAction = "Sheet1.sendMail"
End With
End Sub
Sub sendMail()
Dim ap As Outlook.Application
Set ap = Outlook.Application
Dim e As Long: e = Range("A1").CurrentRegion.Item(Range("A1").CurrentRegion.Count).Row
If e = 1 Then Exit Sub
Dim i As Long
For i = 2 To e
If Cells(i, 1).Value = True Then
Dim mItem As Outlook.MailItem: Set mItem = ap.CreateItem(olMailItem)
mItem.DeferredDeliveryTime = Cells(i, 3)
mItem.Subject = Cells(i, 4)
mItem.Body = Cells(i, 4)
mItem.To = Sheet2.getMailAddress
mItem.Send
End If
Next
MsgBox ("送信完了")
End Sub
Sub getSchedule()
Dim ap As Outlook.Application
Set ap = Outlook.Application
Dim tdystart As String
Dim tdyend As String
Dim myAppointments As Outlook.Items
Dim currentAppointment As Outlook.AppointmentItem
tdystart = Format(Date, "yyyy/m/d 0:00")
tdyend = Format(Date + 1, "yyyy/m/d 23:59")
Set myAppointments = _
ap.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar).Items
myAppointments.Sort "[Start]"
myAppointments.IncludeRecurrences = True
Set currentAppointment = myAppointments.Find("[Start] >= """ & _
tdystart & """ and [Start] <= """ & tdyend & """")
Dim i As Long: i = 2
Dim j As Long
While TypeName(currentAppointment) <> "Nothing"
j = 1
addChkbox (Cells(i, j)): j = j + 1
If currentAppointment.AllDayEvent Then
Cells(i, j) = Format(currentAppointment.Start, "yyyy/m/d 9:00")
Else
Cells(i, j) = currentAppointment.Start
End If
j = j + 1
Cells(i, j) = Cells(i, j - 1) - Sheet2.getDelayTime: j = j + 1
Cells(i, j) = currentAppointment.Subject: j = j + 1
Cells(i, j) = currentAppointment.Body
i = i + 1
Set currentAppointment = myAppointments.FindNext
Wend
End Sub
Sheet2のコード
Function getMailAddress() As String
getMailAddress = Range("A2").Value
End Function
Function getDelayTime() As String
getDelayTime = Range("B2").Value
End Function
Function chkParameter() As Boolean
If Range("A2") = "" Or Range("B2") = "" Then
chkParameter = False
Else
chkParameter = True
End If
End Function