MSAccessのVBAとOutlookオブジェクトモデルを使用してプログラムでOutlookの予定項目を作成しています(言語は関係ありませんが)。
アイテムは、他のユーザーに読み取り/書き込み権限が付与されている単一のユーザーに属する複数のカレンダーに追加されます。ユーザーは、Outlookを使用してカレンダーで予定を作成または編集する理由はありません。その後、予定データはバックエンドテーブルに保存されます。基本的に、Outlookは私の「カレンダービュー」として使用されています。
ただし、ユーザーがOutlookで直接予定項目を変更すると、バックエンドで更新されないという大きな問題が発生します。
予定項目ごとに設定でき、Falseに戻さない限り変更を許可しない、更新可能な「ReadOnly」プロパティが欲しいのですが、存在するとは思わないでください。助言がありますか?
私が解決策として試した、または却下したこと:
- ルールをユーザーに思い出させます。
- 不一致のアイテムをすべて検出するスクリプト-これは機能しますが、実用的ではありません。
- 編集を許可しないカスタムOutlookフォーム-ユーザーが予定をドラッグするのを妨げません。
更新:以下のnemmyによる提案を使用して、私はこれまでに到達するように管理しました。これは、ユーザーが何かを変更する前に予定を選択した場合にのみ機能します。予定を選択して同じクリックでドラッグした場合は機能しません。
Private WithEvents objExplorer As Outlook.Explorer
Private WithEvents appt As Outlook.AppointmentItem
Public Sub Application_Startup()
Set objExplorer = Application.ActiveExplorer
End Sub
Private Sub objExplorer_SelectionChange()
If objExplorer.CurrentFolder.DefaultItemType = olAppointmentItem Then
If objExplorer.Selection.Count > 0 Then
Set appt = objExplorer.Selection(1)
End If
End If
End Sub
Private Sub appt_Write(Cancel As Boolean)
If Not appt.Mileage = "" Then 'This appointment was added by my program
MsgBox ("Do not change appointments directly in Outlook!")
Cancel = True
appt.Close (olDiscard)
End If
End Sub