次の方法で共有


Outlookの複数ユーザの予定表をcsvでエクスポートしたい

質問

2016年6月27日月曜日 8:04

Exchange環境にてOutlook2013を使用しています。

特定のアカウントでログインし、別の複数ユーザ(30人程度)の予定表をcsvでエクスポートするVBAを構築しました。

作業日を起点に前後2週間をエクスポートしたいのですが、途中まで処理した後でエラーメッセージが表示され、

処理が中断してしまいます。

エラーメッセージ:

===============
-2147352567(800200009)
Startは不明なプロパティです
===============

エラーの後、csvを確認すると、大体1人目の180件ほどをエクスポートしていました。

以下にソースを記述しますので、ご教示いただければ幸いです。

どうぞよろしくお願いいたします。

===============

Option Explicit

Public Sub ExportOhtersCalendar()
   
    Dim dtExport As Date
    Dim strStart As String
    Dim strEnd As String
    Dim objFSO 'As FileSystemObject
    Dim stmCSVFile 'As TextStream
    Dim strUserName As String
    Dim objRecip As Recipient
    Dim colAppts As Items
    Dim objAppt 'As AppointmentItem
    Dim strLine As String
    Dim i As Integer
   
    Const CSV_FILE_NAME = "C:\保存先パス\Outlook.csv" ' エクスポートするファイル名を指定してください。
    Dim arrUsers As Variant
   
    '==========以下にユーザ名を記述します。必要に応じて追加修正してください。==========
   
    arrUsers = Array("ユーザ1 ", "ユーザ2 ", "ユーザ3 ", "ユーザ4 ", "ユーザ5 ", _
                "ユーザ6 ",,,,,)

    dtExport = Now
    strStart = Year(DateAdd("ww", -2, CDate(dtExport))) & "/" & Month(DateAdd("ww", -2, CDate(dtExport))) & "/" & Day(DateAdd("ww", -2, CDate(dtExport)))
    strEnd = Year(DateAdd("ww", 2, CDate(dtExport))) & "/" & Month(DateAdd("ww", 2, CDate(dtExport))) & "/" & Day(DateAdd("ww", 2, CDate(dtExport)))
    
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set stmCSVFile = objFSO.CreateTextFile(CSV_FILE_NAME, True)

    stmCSVFile.WriteLine """ユーザー"",""件名"",""場所"",""開始日時"",""終了日時"",""分類項目"",""内容"",""主催者"",""必須出席者"""
    
    For i = LBound(arrUsers) To UBound(arrUsers)
        strUserName = arrUsers(i)
        Set objRecip = Application.Session.CreateRecipient(strUserName)
        objRecip.Resolve
        
        If Not objRecip.Resolved Then
            MsgBox "ユーザーが特定できませんでした。", vbCritical, "共有されている予定表のエクスポート"
            Exit Sub
        End If
        
        Set colAppts = Application.Session.GetSharedDefaultFolder(objRecip, olFolderCalendar).Items
       
        colAppts.Sort "[Start]"
        colAppts.IncludeRecurrences = True
        
        Set objAppt = colAppts.Find("[Start] < """ & strEnd & """ AND [End] >= """ & strStart & """")
        
        While Not objAppt Is Nothing
            strLine = """" & objRecip.Name & _
                """,""" & objAppt.Subject & _
                """,""" & objAppt.Location & _
                """,""" & objAppt.Start & _
                """,""" & objAppt.End & _
                """,""" & objAppt.Categories & _
                """,""" & objAppt.Body & _
                """,""" & objAppt.Organizer & _
                """,""" & objAppt.RequiredAttendees & _
                """"
           stmCSVFile.WriteLine strLine
            Set objAppt = colAppts.FindNext
        Wend
    Next
    
    stmCSVFile.Close    
    MsgBox "作業完了!", vbOKOnly, "~Fin.~"
   
End Sub

すべての返信 (4)

2016年7月26日火曜日 4:28 ✅回答済み

こんにちは。

> Set objAppt = colAppts.Find("[Start] < """ & strEnd & """ AND [End] >= """ & strStart & """")

ItemsオブジェクトFindメソッドの戻り値をObject型(提示されたコードではVariant)の変数objApptにセットしています。

> エラー箇所で指定している[Start]が、どのオブジェクトのプロパティであるのかが理解できておらず、
> また、どのように修正すればいいのかがよくわかりません。

予定表フォルダー(olFolderCalendar)の中にあるAppointmentItemの情報を取得したいのだと思いますが、該当フォルダー内にはAppointmentItem以外のアイテム(MeetingItemとか?)があり、そのアイテムを処理しようとした時点で、取得したいプロパティが無く、処理が止まってしまうのでしょう。

手っ取り早く処理するのであれば、エラー箇所の前に「On Error Resume Next」(http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_error.html)を入れれば、処理が止まらないようにできるだろうと思います。


2016年6月27日月曜日 8:17

こんにちは。

Items.Findメソッドで返されるOutlookアイテム(オブジェクト型)がStartプロパティをサポートしていないのだと思います。
躓いているアイテムの種類を確認してみてはいかがでしょうか?

Outlook アイテム オブジェクト:
https://msdn.microsoft.com/ja-jp/library/ff866278.aspx


2016年7月21日木曜日 10:27

返信いただきましてありがとうございます。

また、レスポンスが遅くなりまして申し訳ございません。

いただいたヒントを元に調査・検;を行い、コードのどの部分でエラーになるかは特定できましたが、

当方のスキルがさほど高くないこともあり、「どのように修正を加えたらいいのか」で止まっております。

「オブジェクトがStartプロパティをサポートしていない」の意味は理解できますが、

エラー箇所で指定している[Start]が、どのオブジェクトのプロパティであるのかが理解できておらず、

また、どのように修正すればいいのかがよくわかりません。

大変恐縮ではございますが、改めてご教示いただければと思います。

 ※恥ずかしながら、そもそも、このソースが何をどこにSetしているのかが理解できておりません。

【エラー箇所】 

Set objAppt = colAppts.Find("[Start] < """ & strEnd & """ AND [End] >= """ & strStart & """")

どうぞよろしくお願いいたします。


2016年11月7日月曜日 7:58

返信が大変遅くなりまして申し訳ございません。

ご教示いただいた「On Error Resume Next」にてエラーを回避し、

抽出できたデータを集計して、問題なしとの結論になりました。

長々と質問を引っ張りまして恐縮です。

どうもありがとうございました。