[[20140407171029]] 『OUTLOOKグループスケジュールをエクセルに落としax(稲葉) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『OUTLOOKグループスケジュールをエクセルに落としたい』(稲葉)

 OUTLOOK2007でグループスケジュール若しくは、共有の予定表(重ねて表示)(下図)を
○日	○週	●月				
/【稲葉】\	/『田中』\	/《鈴木》\				
日曜日____________________	月曜日____________________	火曜日___________________	水曜日	木曜日	金曜日	土曜日
3月30日___________________	3月31日___________________	4月1日___________________	4月2日	4月3日	4月4日	4月5日
【08:00 10:00 ○×商事】	【12:00 15:00 AB市場】	《12:00 15:00 AB市場》				
【08:00 11:00 □×鉄鋼】	『10:00 15:00 CD出版』	『10:00 15:00 CD出版』				
《10:00 15:00 △×食品》	《09:00 17:00 EF磁器》	《09:00 17:00 EF磁器》				
4月6日____________________	4月7日___________________	4月8日___________________	4月9日	4月10日	4月11日	4月12日
【省略】						
『省略』						
《省略》						
4月12日___________________	4月13日___________________	4月14日___________________	4月15日	4月16日	4月17日	4月18日
【省略】						
『省略』						
《省略》						

 エクセルか、アウトルックの予定表のビューで
 こういう表にしたい。
	[A]	[B]_______________________	[C]_______________________	[D]_______________________	[E]	[F]	[G]	[H]
[1]	曜日	日曜日____________________	月曜日____________________	火曜日___________________	水曜日	木曜日	金曜日	土曜日
[2]	氏名	3月30日___________________	3月31日___________________	4月1日___________________	4月2日	4月3日	4月4日	4月5日
[3]	稲葉	【08:00 10:00 ○×商事】	【12:00 15:00 AB市場】					
[4]	____	【08:00 11:00 □×鉄鋼】						
[5]	田中	________________________	『10:00 15:00 CD出版』	『10:00 15:00 CD出版』				
[6]	鈴木	《10:00 15:00 △×食品》	《09:00 17:00 EF磁器》	《09:00 17:00 EF磁器》		

 ビューで不可能なら、
 「稲葉 08:00 10:00 ○×商事」
 「鈴木 10:00 15:00 △×食品」のように、開始と終了時間が
 載っている予定アイテムのテキストをエクセルに出力したい。		

< 使用 Excel:Excel2007、使用 OS:WindowsXP >


 半分やりたいことが出来たので、載せておきます。
 予定表のプロパティで、アクセス権の「既定」または接続するユーザーへ「全詳細情報」の参照権限
 がないと取得できませんでしたが、同じ部署内程度でしたら十分運用出来そうでした。

 本当は予定表に保存したグループスケジュールから名前をひっぱりたかったのですが
 探しきれませんでした。
 予定表に保存したグループスケジュールから名前を取得する方法及び、パプリック
 フォルダの予定表からデータを取り込む場合どのようにすればよいか、分かる方い
 たら教えてください。
 エクセル以外の質問ですみません・・・
 参考にしたサイトはコード内に記述してあります。

 '==ここから 
Option Explicit
Public Result
Public ItemCount
Public Sub スケジュール表を一覧表に()
'http://outlooklab.wordpress.com/2008/08/16/%E3%81%BB%E3%81%8B%E3%81%AE%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%AE%E4%BA%88%E5%AE%9A%E3%82%92%E4%B8%80%E6%8B%AC%E3%81%A7%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%E3%83%9E%E3%82%AF%E3%83%AD/
'http://outlooklab.wordpress.com/2008/02/23/exchange-%E7%92%B0%E5%A2%83%E3%81%A7%E5%85%B1%E6%9C%89%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E4%BB%96%E4%BA%BA%E3%81%AE%E4%BA%88%E5%AE%9A%E8%A1%A8%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92/
    Dim GetStart As String
    Dim GetEnd As String
    Dim GetUser
    Dim GetDay As String
    Dim USER_ROW As Long
    '
    '_/_/_/_/取得したいメンバーのエイリアス値を入れる_/_/_/_/
    'メモ欄    ( 稲葉   田中    鈴木  )
    GetUser = Array("1234567", "1234568", "1234569")
    USER_ROW = 5
    GetDay = InputBox("当月の予定=0 翌月の予定=1 を入力してください")
    If GetDay = "" Then MsgBox "正しく取得できませんでした。": Exit Sub
    GetStart = Year(Now) & "/" & Month(Now) + GetDay & "/1 00:00"
    GetEnd = DateAdd("m", 1, CDate(GetStart)) & " 00:00"
    Dim xl As Object
    Set xl = CreateObject("Excel.Application")
    '
    '_/_/_/_/一人USER_ROW分の項目入力できるようにし、1行目に日付を入れる_/_/_/_/
    Dim i As Long, n As Long
    ReDim Result(1 To (UBound(GetUser) + 1) * USER_ROW, 1 To 33)
    n = 2
    For i = CDate(Format(GetStart, "mm/dd")) To CDate(Format(GetEnd, "mm/dd"))
        Result(1, n) = CDate(i)
        n = n + 1
    Next i
    '
    '_/_/_/_/予定表アイテムを取得する変数宣言_/_/_/_/
    Dim objRecip As Recipient               'ユーザーを特定するときに使用する。
    Dim objApoItem                          '予定表のアイテムを一つずつ取り出す(As AppointmentItem)
    Dim U As Long                           '
    U = 2
    '
    '_/_/_/_/指定したユーザーで繰り返し処理_/_/_/_/
    '処理の考え方
    'Resultの2列目から○月1日の日付を順次入れると仮定し、「日」を引数に配列に加える。
    '日付によって異なる項目数は、ItemCountにユーザーの開始行「U」を使って32の要素をもつ、静的配列を作り、同じく日を引数に加算する
    Dim j As Long
    Dim msg As String
    For i = 0 To UBound(GetUser)
        '
        '#アドレス帳からユーザー名を探し、なければFalseを返す
        Set objRecip = Session.CreateRecipient(GetUser(i))
        objRecip.Resolve
        If objRecip.Resolved Then
            ItemCount = Split(Evaluate("REPT(""" & U & ",""" & ",34)"), ",")
            '
            '#予定表アイテムのコレクションをWithブロックで指定する。
            With Application.Session.GetSharedDefaultFolder(objRecip, olFolderCalendar).Items
                On Error Resume Next
                .Sort "[Start]"
                .IncludeRecurrences = True
                If Not err <> 0 Then
                    On Error GoTo 0
                    '
                    '#開始日から終了日までのアイテムをFindメソッドで探す
                    Set objApoItem = .Find("[Start] < """ & GetEnd & """ AND [End] >= """ & GetStart & """")
                    Result(U + 0, 1) = objRecip.Name
                    '
                    '#While-Wendでアイテムが見つからなくなるまで繰り返す
                    While Not objApoItem Is Nothing
                        With objApoItem
                            If Not .Location = "日本" Then
                                Call GetData(.Start, .End, .Subject)
                                '
                                '#開始日から終了日までが2日以上あれば、終了日まで件名を取得する
                                If .End >= DateAdd("d", 1, CDate(.Start)) Then
                                    For j = DateAdd("d", 1, CDate(.Start)) To xl.WorksheetFunction.Min(.End, .Start + USER_ROW - 1) Step 1
                                        Call GetData(j, .End, .Subject)
                                    Next j
                                End If
                            End If
                        End With
                        '
                        '#次のアイテムを探す
                        Set objApoItem = .FindNext
                    Wend
                Else
                    msg = msg & objRecip.Name & "さんの情報が取得できませんでした" & vbNewLine
                End If
                err.Clear
                On Error GoTo 0
            End With
        End If
        U = U + USER_ROW
    Next i
    If msg <> "" Then MsgBox msg
    '
    '_/_/_/_/エクセルオブジェクトから新しいブックを作成して、結果を落とし込む_/_/_/_/
    With xl
        .Visible = True: .UserControl = True
        .Workbooks.Add
        .ActiveWindow.DisplayGridlines = False
        With .ActiveWorkbook.Sheets(1)
            '
            '#データを落とし込み、体裁を整える
            .Range("A1").Resize(UBound(Result, 1), UBound(Result, 2)).Value = Result
            .Range("A1").Value = Format(Now, "yy.mm.dd作成")
            '
            '#セル全体
            With .Cells
                With .Font
                    .Name = "MS ゴシック"
                    .Size = 9
                End With
                .ShrinkToFit = True
                .ColumnWidth = 22
            End With
            '
            '#1行目
            With .Range("1:1")
                .NumberFormatLocal = "m/d(aaa)"
                .HorizontalAlignment = xlCenter
            End With
            '
            '#ユーザー毎の設定
            For i = 2 To .UsedRange.Rows.Count Step USER_ROW
                With .Cells(i, 1).Resize(USER_ROW)
                    .Merge
                    .HorizontalAlignment = xlLeft
                End With
                With .Cells(i, 1).Resize(USER_ROW, .UsedRange.Columns.Count)
                    .Borders.LineStyle = xlContinuous
                    .Borders(xlInsideVertical).Weight = xlHairline
                    .Borders(xlInsideHorizontal).Weight = xlHairline
                End With
            Next i
            '
            '#土日に色を付ける
            Dim r As Range
            For i = 2 To .UsedRange.Columns.Count
                Select Case Format(.Cells(1, i).Value, "aaa")
                    Case "土", "日"
                        If r Is Nothing Then
                            Set r = .Cells(1, i).Resize(.UsedRange.Rows.Count)
                        Else
                            Set r = xl.Union(r, .Cells(1, i).Resize(.UsedRange.Rows.Count))
                        End If
                End Select
            Next i
            r.Interior.Color = RGB(191, 223, 255)
        End With
    End With
End Sub
Private Sub GetData(ByVal datStart As Date, ByVal datend As Date, sbj As String)
    '_/_/_/_/エクセルに落とし込みたいデータを指定します。
    Result(ItemCount(CInt(Format(datStart, "d"))), CInt(Format(datStart, "d")) + 1) = _
        sbj & " " & Format(datStart, "hh:mm") & "〜"
        '↑ここの部分
    ItemCount(CInt(Format(datStart, "d"))) = ItemCount(CInt(Format(datStart, "d"))) + 1
End Sub
(稲葉) 2014/04/08(火) 15:45

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.