Outlook の予定表に「山の日」を含む 2016 年以降の祝日を追加するスクリプト


Outlook の予定表に 2013 年以降の祝日を追加するスクリプトのコメントにて以下のご質問をいただきました。


山の日が追加されたのですが、どうしたらよいでしょうか。


山の日は 2014 年に制定された新しい祝日なので、それ以前にリリースされた Outlook 2013 などの祝日情報には含まれていません。
Outlook 2016 の祝日情報には山の日が含まれていますが、すでに以前のバージョンでインポート済みであると、既存の祝日が重複してインポートされる動作となってしまいますので、祝日を追加するスクリプトを作りました。

スクリプトは以下の通りです。このスクリプトを AddHoliday.vbs という名前で保存し、ダブルクリックして実行すると、2013 年以降の祝日が Outlook の既定の予定表に追加されます。

' - ここをトリプル クリックするとすべてのコードが選択できます。
'
Option Explicit
Const olFolderCalendars = 9
Const olAppointmentItem = 1
Const olFree = 0
Dim objOutlook
Dim objSession
Dim objCalendar
Dim colEvents
Dim objHoliday
Dim iYear
' Outlook アプリケーション オブジェクトの取得
Set objOutlook = CreateObject("Outlook.Application")
' Namespace オブジェクトの取得
Set objSession = objOutlook.GetNamespace("MAPI")
' 予定表フォルダの取得
Set objCalendar = objSession.GetDefaultFolder(olFolderCalendars)
Set colEvents = objCalendar.Items
' 予定表から 2016 年以降の祝日のみを取得
Set objHoliday = colEvents.Find("[分類項目] = '祝日' AND [開始日] >= '2015/12/31' AND [場所] = '日本'")
' 2016 年以降の祝日を削除
While Not objHoliday Is Nothing
    objHoliday.Delete
    Set objHoliday = colEvents.FindNext
Wend
'
' 2016 年から 2022 年までの祝日を追加
For iYear = 2016 to 2022
    AddNormalHoliday "天皇誕生日", iYear, 12, 23
    AddNormalHoliday "勤労感謝の日", iYear, 11, 23
    AddNormalHoliday "文化の日", iYear, 11, 3
    AddHappyMonday "体育の日", iYear, 10, 2
    AddHappyMonday "敬老の日", iYear, 9, 3
    AddNormalHoliday "山の日", iYear, 8, 11
    AddHappyMonday "海の日", iYear, 7, 3
    AddNormalHoliday "こどもの日", iYear, 5, 5
    AddNormalHoliday "みどりの日", iYear, 5, 4
    AddNormalHoliday "憲法記念日", iYear, 5, 3
    AddNormalHoliday "昭和の日", iYear, 4, 29
    AddNormalHoliday "建国記念の日", iYear, 2, 11
    AddHappyMonday "成人の日", iYear, 1, 2
    AddNormalHoliday "元日", iYear, 1, 1
Next
' 日付が一定でない祝日の追加
AddNormalHoliday "春分の日", 2016, 3, 20
AddNormalHoliday "春分の日", 2017, 3, 20
AddNormalHoliday "春分の日", 2018, 3, 21
AddNormalHoliday "春分の日", 2019, 3, 21
AddNormalHoliday "春分の日", 2020, 3, 20
AddNormalHoliday "春分の日", 2021, 3, 20
AddNormalHoliday "春分の日", 2022, 3, 21
AddNormalHoliday "秋分の日", 2016, 9, 22
AddNormalHoliday "秋分の日", 2017, 9, 23
AddNormalHoliday "秋分の日", 2018, 9, 23
AddNormalHoliday "秋分の日", 2019, 9, 23
AddNormalHoliday "秋分の日", 2020, 9, 22
AddNormalHoliday "秋分の日", 2021, 9, 23
AddNormalHoliday "秋分の日", 2022, 9, 23
'
' 振り替え休日を考慮しない祝日の追加
Sub AddHoliday( sName, dtDay )
    Set objHoliday = objOutlook.CreateItem(olAppointmentItem)
    objHoliday.Subject = sName
    objHoliday.Start = dtDay
    objHoliday.AllDayEvent = True
    objHoliday.Categories = "祝日"
    objHoliday.ReminderSet = False
    objHoliday.BusyStatus = olFree
    objHoliday.Location = "日本"
    objHoliday.Save
    Set objHoliday = Nothing
End Sub
'
' ハッピーマンデーの祝日の追加
Sub AddHappyMonday( sName, iYear, iMonth, iMonday )
    Dim iWk
    Dim iDay
    Dim dtDay
    iWk = Weekday(iYear & "/" & iMonth & "/1" )
    If iWk <= 2 Then
        iWk = iWk + 4
    Else
        iWk = iWk - 3
    End If
    iDay = 7 * iMonday - iWk
    AddHoliday sName, iYear & "/" & iMonth & "/" & iDay & " 00:00 AM"
End Sub
'
' 通常 (振り替え休日あり) の祝日の追加
Sub AddNormalHoliday( sName, iYear, iMonth, iDay )
    Dim iWk
    Dim dtSub
    Dim objHoliday
    AddHoliday sName, iYear & "/" & iMonth & "/" & iDay & " 00:00 AM"
    iWk = Weekday( iYear & "/" & iMonth & "/" & iDay )
    If iWk = 1 Then
        dtSub = CDate(iYear & "/" & iMonth & "/" & iDay)
        Do    ' 振替休日が国民の祝日だったら、翌日に繰り越し
            dtSub = DateAdd("d", 1, dtSub)
            Set objHoliday = colEvents.Find("[分類項目] = '祝日' AND [開始日] >= '" & _
                dtSub & " 00:00 AM' AND [終了日] <= '" & DateAdd("d", dtSub, 1) & _
                "' AND [場所] = '日本'")
        Loop While Not objHoliday Is Nothing
        AddHoliday "振替休日 (" & sName & ")", dtSub & " 00:00 AM"
    End If
End Sub

広告

Outlook の予定表に「山の日」を含む 2016 年以降の祝日を追加するスクリプト」への5件のフィードバック

  1. 山の日の追加スクリプト、使わさせていただきました。ありがとうございます。
    2016の秋分の日が23日になっていますが、22日かと思います。

  2. こんにちは、moonと申します。

    以前【Outlook の予定表に 2013 年以降の祝日を追加するスクリプト】で
    創立記念日を毎年3月1日で登録したいという件でお世話になりました。

    環境はWindows 7 Professional (32bit) Outlook2010です。

    今年の夏 山の日はスルーしていましたが、
    今回、「山の日」を含む 2016 年以降の祝日を追加するスクリプトを実行しようと
    トリプルクリックでコピーし
    メモ帳に貼付→名前を付けて保存で【AddHoliday.vbs】としたファイルを
    デスクトップへ保存し、ダブルクリックして実行すると以下のエラーが発生します。

    スクリプト: D:\******\Documents\Desktop\AddHoliday.vbs(******敢て伏せてます)
    行: 65
    文字: 5
    エラー: 型が一致しません: パラメーター値を割り当てられません。Outlook では入力した文字列を変換できません。
    コード: 80020005
    ソース: Microsoft Outlook

    解決方法をアドバイス頂ければ幸いです。
    よろしくお願い申し上げます。

  3. 度々、申し訳ございません。moonです。

    確認の為、Outlook2010開いて確認ましたら
    2016年、2017年は追加されています。各年14件の祝日(山の日を含み)
    2018年以降は追加されません。

  4. 度々、申し訳ございません。moonです。
    その後の報告です。

    Windows 7 Professional (32bit) Outlook2010環境では
    エラーが発生しましたが。

    別PCの Windows 7 Professional (64bit) Outlook2013環境では
    山の日を含め2022年末まで問題なく追加できました。

    エラーが発生の原因は
    Windows 7 Professional (32bit) Outlook2010環境のどこかに問題があるのだと思います。

    Outlook2013から祝日のみをエクスポートし
    Outlook2010にインポートしましたので、結果的には
    Windows 7 Professional (32bit) Outlook2010環境でも
    山の日を含め2022年末まで問題なく追加できました。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中