質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

Q&A

1回答

12670閲覧

Excel VBAでOutlook予定表の「定期的な予定」を取得したい。

rhaya

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

0グッド

0クリップ

投稿2020/07/04 07:26

前提・実現したいこと

Microsoft Office2013のExcel VBAで、Outlook予定表の「定期的な予定」をExcelに
読みだしたいのですが、うまくできません。

Outlook予定表の「定期的な予定」は、特定の日の予定のみ変更、削除などができると思いますが、
変更後のデータをVBAで取得できません。どのようにすれば取得できますでしょうか。

以下のソースコードで「定期的な予定」の取得を試みています。

VBA

1myAppointments.IncludeRecurrences = True 2Set currentAppointment = myAppointments.Find("[Start] >= """ & _ 3 tdystart & """ and [Start] <= """ & tdyend & """") 4

出てくる予定は、確かに「定期的な予定」を含んでいるのですが、出力結果とOutlook予定表の内容が一致しません。

 ・一部の予定が出力されない
・過去に削除済みの予定が出力される
・「定期的な予定」の一部を変更した予定が、変更前の日時で表示される

という状況です。解決策をご教示いただきたく、お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

オブジェクトの指定が違うと思います。

outlook の予定を格納しているオブジェクトは、GetNamespace("MAPI")で生成します。
スケジュールは、GetDefaultFolderメソッドの引数で、olFolderCalendarを指定してスケジュールを取得します。

日付を指定しているようなコードを書いているので、下記のソースコードが参考になると思います。

VBA

1Sub test1() 2 Dim ns As Outlook.Namespace 3 Dim mf As Object 4 Dim ob As Object 5 Dim strret As String 6 Dim x As Long 7 8 Set ns = Outlook.GetNamespace("MAPI") 9 Set mf = ns.GetDefaultFolder(olFolderCalendar) 10 11 x = 1 12 For Each ob In mf.Items 13 If ob.Start > (#7/1/2020# - 1) And ob.Start < (#7/7/2020# + 1) Then 14 strret = Format(ob.Start, "yyyy/mm/dd") & Space(3) _ 15 & Format(ob.Start, "hh:mm") & Space(3) & ob.Subject & vbCrLf 16 ActiveCell.Offset(x, 1).Value = strret 17 x = x + 1 18 End If 19 Next ob 20 21End Sub 22 23

投稿2020/07/05 03:08

編集2020/07/05 03:34
kai_keitai

総合スコア344

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rhaya

2020/07/06 12:16 編集

ご回答ありがとうございました。 言葉足らずで申し訳ありません。 >outlook の予定を格納しているオブジェクトは、GetNamespace("MAPI")で生成します。 >スケジュールは、GetDefaultFolderメソッドの引数で、olFolderCalendarを指定してスケジュールを取得します。 こちらの指定は、サンプルに書かなかった部分で行っておりました。 端折ってしまって、大変失礼しました。 その上で、サンプルでいただいたコードで、「定期的な予定」以外のアイテムは取得できました。 しかし、「定期的な予定」として登録されているものは、正しく取得できませんでした。 一部の予定は正しく取得できます。 しかし「もともと月~金の12時~13時」で登録した予定を、一日だけ14時~15時に変えた場合に、もともとの開催時刻で取得されてしまったり、他者から送られてきた会議の招待で登録された定期的な予定が、出力されなかったりします。 OutlookライブラリのクラスAppointmentItemは、定期的な予定の場合、メンバーStartに、定期的な予定の最初の開始日時が入っているようですが、取得したいのはこの値ではなく、ある1日を指定した場合に、その定期的な予定がOutlook予定表からどのように登録されているか(表示されているか)です。 たとえば ・7/1から開始された月~金の12時開始の予定で、7/6の予定を一日分VBA出力すると、この予定が含まれていること ・この定期的な予定が、通常12時開始のところ、ひとつだけ14時開始に手動変更されていても、変更後の予定を取得できること になります。サンプルコードの場合も、私が開発した場合も、いずれも自身が登録し、手動変更をしていない予定は出力できたのですが、他者が登録した予定や手動変更した予定が、正しく出力できませんでした。 対応方法について教授いただけましたら幸甚です。 誠に恐縮ですが、何卒よろしくお願い申し上げます。
kai_keitai

2020/07/06 13:58

なるほど。 しかし、私は Docs.Microsoft のサンプルコードで試しましたが、 私の場合、削除したアイテムは出ないし、変更前のデータも出ないし、 変更されて正規なデータしか出ませんね。 おそらく、希望に沿った結果が出ていると思います。 Outlookの設定かな? ちょっと、私の実力値では解決が難しいかもです。 すいません。 https://docs.microsoft.com/ja-jp/office/vba/api/outlook.items.includerecurrences
gandhi159

2024/03/30 11:06

GetRecurrencePatternメソッドを実行後に取得できるRecurrencePatternオブジェクトの中の Exceptionsプロパティの中に AppointmentItemがあるので、 これをFor Eachなどで回して item.startなどを取得すると変更後の定期予定の内容が取得できます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問