Windows 7でOutlook 2007を使用しています。最近iCloudをインストールしましたが、残念ながらGoogleカレンダー同期では既定の予定表が同期されるだけです。誰かが多くのだろうiCloudカレンダーから予定表に予定をコピーするマクロ
- 空のすべての予定
- コピーのデフォルトのカレンダーのデフォルトのカレンダーへのiCloudカレンダーからすべての予定
簡単なVBAマクロで私を助けることができる場合、私は思っていましたありがとう!この回答で
Windows 7でOutlook 2007を使用しています。最近iCloudをインストールしましたが、残念ながらGoogleカレンダー同期では既定の予定表が同期されるだけです。誰かが多くのだろうiCloudカレンダーから予定表に予定をコピーするマクロ
簡単なVBAマクロで私を助けることができる場合、私は思っていましたありがとう!この回答で
健康警告
すべてが実験によって発見されました。私はVB Helpから始めて、F2を使ってオブジェクトモデルにアクセスし、何がうまくいくかを見つけるまで実験しました。私は非常に推薦された参考書を購入しましたが、それは私が発見しなかった重要なものを何も含んでいませんでした。
私が得た知識の重要な特徴は、それが多くの異なるインストールに基づいていることです。遭遇した問題のいくつかは、インストールの間違いの結果であり、なぜ参考書の作者がそれらを知らなかったのかを説明しているかもしれない。
次のコードは、私はあなたが最初のバージョンとの報告
イミディエイトウィンドウに、デフォルトのカレンダー内の予定のプロパティを選択見通し2007
出力と類似したコードをテストしている展望2003でテストされていますこのルーチンのエラー: "ランタイムエラー '-2147467259(80004005)':正の期間を入力する必要があります。
私がGoogleで見つけたウェブサイトによると、エラー80004005はシステムファイルが壊れていることを意味します。
アポイントには、Start(日付の入力)、End(タイプの日付)、Duration(タイプLong)の3つの関連項目があります。私は、EndまたはDurationが実行時に導出されると仮定します。私の推測では、Durationが負であるか、StartがStartの前にあるということです。私は私のシステム上でこのマクロによって作成された予定のリストで、終日イベントのいくつかがプロパティAllDayEvent = False
を持つことに気付きました。アポイントメントを作成し、後でAllDayEventをオンまたはオフに切り替えると矛盾が生じていたことがわかりました。
この問題を検出しようとするコードを追加しましたが、私のシステムでこのエラーが発生する予定がないため、テストできません。このマクロは、あなたの現在の予定のリストから始めることを目的としていましたので、それを働かせることができない場合は、あまり心配しないでください。
Sub ReviewCalendar()
Dim DateTimeEnd As Date
Dim DateTimeStart As Date
Dim Duration As Long
Dim ItemMine As Object
Dim ItemMineClass As Long
Dim FolderTgt As MAPIFolder
Set FolderTgt = CreateObject("Outlook.Application"). _
GetNamespace("MAPI").GetDefaultFolder(olFolderCalendar)
' I use this macro to list selected properties from the test calendar.
' Add a quote to the statement above and remove the quote from the next
' statement to do the same.
'Set FolderTgt = CreateObject("Outlook.Application"). _
GetNamespace("MAPI").Folders("Test Folders"). _
Folders("Calendar")
For Each ItemMine In FolderTgt.Items
With ItemMine
' Occasionally I get syncronisation
' errors. This code avoids them.
ItemMineClass = 0
On Error Resume Next
ItemMineClass = .Class
On Error GoTo 0
If ItemMineClass = olAppointment Then
Debug.Print "** Subject: " & .Subject
Debug.Print " Created: " & _
Format(.CreationTime, "d mmm yy hh:mm:ss")
Debug.Print " Updated: " & _
Format(.LastModificationTime, "d mmm yy hh:mm:ss")
Debug.Print " Time: ";
DateTimeStart = .Start
If .AllDayEvent Then
Debug.Print "All day " & Format(.Start, "d mmm yy")
Else
On Error Resume Next
DateTimeEnd = .End
Duration = .Duration
On Error GoTo 0
If Duration <= 0 Then
Debug.Print " ##### Invalid duration #####"
End If
Debug.Print Format(.Start, "h:mm") & " to " & _
Format(.End, "h:mm") & "(" & .Duration & _
" minutes) on " & Format(.Start, "d mmm yy")
End If
' If you remove the quote from the following statement
' it will delete the appointment.
' .Delete ' Delete appointment
End If
End With
Next
End Sub
予定
のコピーをテストするための準備、私はあなたが重要なものに影響を与えずにマクロをテストできるように、テスト用フォルダを作成することをおすすめします。
ここで、[カレンダー]を選択すると、「テストフォルダのカレンダー」が追加選択肢として表示されます。テストカレンダーにデフォルトのカレンダーから
コピーの予定
このマクロは、デフォルトのカレンダー内のすべての予定のテストの予定表にコピーを作成します。
一度実行してから[Calandar]を選択し、デフォルトとテストカレンダーの両方にチェックマークを付けます。 2つのカレンダーは同一である必要があります。
警告:マクロを再度実行すると、各予定の2つのコピーが終了します。
Sub CopyCalendar()
Dim FolderDest As MAPIFolder
Dim ItemCopy As AppointmentItem
Dim ItemMine As Object
Dim ItemMineClass As Long
Dim NameSpaceMine As NameSpace
Dim FolderSrc As MAPIFolder
Set NameSpaceMine = _
CreateObject("Outlook.Application").GetNamespace("MAPI")
With NameSpaceMine
Set FolderSrc = .GetDefaultFolder(olFolderCalendar)
Set FolderDest = .Folders("Test Folders").Folders("Calendar")
End With
Debug.Print FolderSrc.Items.Count
Debug.Print FolderDest.Items.Count
For Each ItemMine In FolderSrc.Items
With ItemMine
' Occasionally I get syncronisation
' errors. This code avoids them.
ItemMineClass = 0
On Error Resume Next
ItemMineClass = .Class
On Error GoTo 0
' I have never found anything but appointments in
' Calendar but test just in case
If ItemMineClass = olAppointment Then
Set ItemCopy = .Copy
ItemCopy.Move FolderDest
End If
End With
Next
End Sub
次は
Set FolderDest
文はその階層を下に働くことによってpartcularフォルダを選択する方法を示して繰り返します。他のより一般的な手法がありますが、この方法でiCloundカレンダーにアクセスできる場合は、これで十分です。
Set NameSpaceMine = _
CreateObject("Outlook.Application").GetNamespace("MAPI")
With NameSpaceMine
Set FolderDest = .Folders("Test Folders").Folders("Calendar")
End With
最初のマクロは、カレンダ内のすべての予定と別のカレンダーから第二のコピーの予定を削除するためのコードを含みます。
このコードを組み合わせて適用すると、一方向の同期が得られます。つまり、カレンダー2にカレンダー1のコピーが作成されます。これは適切ですか? iCloudカレンダーをデフォルトのカレンダーで上書きするのは適切でしょうか?双方向同期はより複雑です。私はいくつかの "エンタープライズ"同期ルーチンを経験していますが、誰もばかではありません。あなたが「企業が高価で品質の低いソフトウェアを超えているということ」の場合、あなたは驚かないでしょう。そうしないと、双方向の同期が困難であるか、または両方のステートメントが真であることに同意することができます。
問題は、次のとおりのいずれかのカレンダーに
私のシステムでは、CreationTimeとLastModificationTimeは変更されずにコピーされるので、識別子として使用するというオプションがあります。私は、会議の要求のために更新されているカレンダーのCreationTimeとLastModificationTimeへの影響をテストする方法がありません。
私はあなたにこれらの問題を考慮し、この問題をどのように進めたいかを決定します。
ありがとうございました!私はOutlookにマクロを追加することができます。私は以前にExcelでVBAを手短に手直ししました。物事を考えれば、マクロがiCloudカレンダーをデフォルトのカレンダーと同期させることが最も賢明です(つまり、デフォルトのカレンダーで変更を行い、マクロはiCloudカレンダーと同期します)。 iCloudカレンダーはOutlookからアクセスでき、「iCloudのカレンダー」と呼ばれます。しかし、マクロを実行すると私にエラーメッセージが表示されます。ランタイムエラー '-2147467259(80004005)':正の期間を入力する必要があります。 –
ここで深夜になってしまったので、明日よりコードをいくつか見ていきます。私はそれを設定しないDurationを読んでいるので、その期間は間違っています。最後のDebug.Print文から '.Duration&'を削除し、その行の下に 'Debug.Print" "&.Duration'を追加してみてください。それはあなたにエラーを与える予定の日付と主題を与えるでしょう。 'Debug.Print" "&.Duration'がエラーを返す場合は、行をコメントにし、F8を一度押し、再度引用符を削除してからF5を押します。それは、その予定の期間を過ぎて、マクロを続行できるようにします。 –
このエラーを出す予定や予定について珍しいことはありますか?私のインストールでは、Outlookエクスプローラは最上位フォルダとして '個人用フォルダ'と 'アーカイブフォルダ'を提供します。これらの下には、受信トレイなどのサブフォルダがあります。サブフォルダには、任意の深さまでサブフォルダを配置できます。下の「iCloudのカレンダー」の下に「iCloud」のような名前の別のトップレベルのフォルダがあるとします。そのようなものですか? –