プロパティの取得と設定に関するヒント集Best Practices for Getting and Setting Properties

プロパティの値の取得と設定に関しては、以下のヒントを参考にしてください。Keep in mind the following best practices recommendations for getting and setting values for properties:

  • アイテムオブジェクトに明示的に組み込まれているプロパティを取得して設定するには、たとえば、 MailItem などのプロパティを親オブジェクトから直接参照します。Reference a property directly off the parent object to get and set explicit built-in properties of item objects, for example, MailItem.Subject.

  • 明示的に組み込まれているプロパティとカスタムプロパティを列挙し、アイテムのカスタムプロパティを取得および設定するには、 ItemProperties および**ItemProperty** を使用します (ただし、 DocumentItem オブジェクトを除く)。Use ItemProperties and ItemProperty to enumerate explicit built-in properties and custom properties, and get and set custom properties for items (except for DocumentItem object).

  • UserProperties および**UserProperty** を使用して、アイテムのカスタムプロパティを列挙、取得、および設定します (ただし、 DocumentItemオブジェクトを除く)。Use UserProperties and UserProperty to enumerate, get and set custom properties for items (except for the DocumentItem object).

  • PropertyAccessor を使用して、 DocumentItemオブジェクトのカスタムプロパティ、Outlook オブジェクトモデルに公開されていない組み込みのアイテムレベルのプロパティ、または次のオブジェクトのプロパティを取得および設定します。 addressentryAddressListAttachmentExchangeDistributionListexchangeuserFolderRecipient、および**Store**。Use PropertyAccessor to get and set custom properties for the DocumentItem object, built-in item-level properties that are not exposed in the Outlook object model, or properties for the following objects: AddressEntry, AddressList, Attachment, ExchangeDistributionList, ExchangeUser, Folder, Recipient, and Store.

  • 複数のカスタムプロパティを取得または設定するには、パフォーマンスを向上させるために、 UserPropertiesオブジェクトの代わりにPropertyAccessorオブジェクトを使用します。To get or set multiple custom properties, use the PropertyAccessor object instead of the UserProperties object for better performance.

  • カスタム プロパティを作成するか、カスタム プロパティにアクセスするには、MAPI proptag または ID 名前空間ではなく MAPI 文字列名前空間を使用すると便利です。To create or access custom properties, use the MAPI string namespace for convenience over the MAPI proptag or id namespace. アドインの GUID を名前空間 GUID として使用します。Use the GUID of your add-in as the namespace GUID.

  • 名前空間によりプロパティを参照する場合は、大文字小文字が区別されます。When referencing properties by namespaces, be aware that such references are case-sensitive. たとえば、 urn: schema: contacts: givennameは有効な名前空間、 urn: schema: contacts: givennameは有効ではありません。For example, while urn:schemas:contacts:givenName is a valid namespace, urn:schemas:contacts:givenname is not.

  • 複数のプロパティを取得または設定するには、PropertyAccessor と PropertyAccessor を使用します。この場合は、 PropertyAccessor と**PropertyAccessor** を繰り返し使用するのではなく、 GetProperties と**** を使用します。低下.To get or set multiple properties, use PropertyAccessor.GetProperties and PropertyAccessor.SetProperties, as opposed to repeated PropertyAccessor.GetProperty and PropertyAccessor.SetProperty, for better performance.

  • アイテムレベルのカスタムプロパティの値が変更されたときにcustompropertychangeイベントが発生するようにするには、カスタムプロパティがアイテムのUserPropertiesコレクションに含まれている必要があります。To have the CustomPropertyChange event fire when the value of an item-level custom property changes, the custom property must be in the item's UserProperties collection. SetProperty または SetProperties によって暗黙的に追加されたアイテム レベルのプロパティは、自動的にアイテムの UserProperties コレクションの一部にはなりません。An item-level property added implicitly by SetProperty or SetProperties does not automatically become part of the item's UserProperties collection. このプロパティを含めるには、明示的な UserProperties.Add が必要です。An explicit UserProperties.Add is required to include it.

  • UserPropertiesメソッドによって作成されたプロパティを初めて設定するには、 PropertyAccessorオブジェクトのSetPropertiesおよびSetPropertyメソッドの代わりに**UserProperty** プロパティを使用します。To set for the first time a property created by the UserProperties.Add method, use the UserProperty.Value property instead of the SetProperties and SetProperty methods of the PropertyAccessor object.

以下では、オブジェクトへのプロパティの保存に関するヒントを示します。This section describes the best practices for saving properties on an object:

  • アイテムオブジェクトの場合、アイテムのsaveメソッドを呼び出してアイテムを現在のフォルダーに保存すると、アイテムにプロパティが保存されます。For item objects, calling the item's Save method to save the item to the current folder also saves its properties on the item.

  • Saveメソッド (AddressListFolderRecipient、およびStore) を持たないアイテムレベル以外のオブジェクトの場合、 PropertyAccessor プロパティを呼び出す**PropertyAccessor プロパティSetProperty、またはSetProperties**は暗黙的にプロパティをオブジェクトに保存します。For non-item-level objects that do not have a Save method (AddressList, Folder, Recipient, and Store), calling PropertyAccessor.DeleteProperty, PropertyAccessor.DeleteProperties, SetProperty, or SetProperties will implicitly save the properties on the object.

このセクションでは、 PropertyAccessorを使用してプロパティを取得または設定するときに、型変換を簡単にするためのベストプラクティスについて説明します。This section describes the best practices for keeping type conversion simple when using the PropertyAccessor to get and set properties. PT_SYSTIMEなどの MAPI プロパティの種類の定義については、「プロパティの種類」を参照してください。For definitions of MAPI property types such as PT_SYSTIME, see Property Types.

  • ほとんどの Outlook の日付と時刻の値は協定世界時 (UTC) 形式で格納されますが、MAPI 型PT_SYSTIMEのすべてのプロパティが常に UTC を返すという保証はありません。Although most Outlook date-time values are stored in Coordinated Universal Time (UTC) format, there is no guarantee that all properties of the MAPI type PT_SYSTIME will always return UTC. PT_SYSTIME のプロパティを取得すると、 VT_DATE 値が返されます。Getting a PT_SYSTIME property will return a VT_DATE value. PT_SYSTIME のプロパティを設定するときは、地域の日付と時刻の値ではなく、UTC 値として設定します。When setting a PT_SYSTIME property, ensure that you are setting the property as a UTC value rather than a local date-time value. GetPropertySetPropertyGetProperties、およびSetPropertiesの各メソッドでは、タイムゾーンの変換は実行されません。The GetProperty, SetProperty, GetProperties, and SetProperties methods do not perform time zone conversion. タイム ゾーンを明示的に変換するには、ヘルパー メソッド PropertyAccessor.LocalTimeToUTC および PropertyAccessor.UTCToLocalTime を使用します。Use the helper methods PropertyAccessor.LocalTimeToUTC and PropertyAccessor.UTCToLocalTime to perform explicit time zone conversion.

  • 複数値プロパティ (Microsoft Visual Basic type VT_ARRAY) は、プロパティの値と同じ数の要素を含む2次元配列として格納されます。A multi-valued property (Microsoft Visual Basic type VT_ARRAY) is stored as a two-dimensional array that contains the same number of elements as are there are values in the property. 複数値を持つプロパティを取得すると、 VT_ARRAY値が返されます。Getting a multi-valued property will return a VT_ARRAY value. 複数値を持つプロパティを設定するときは、プロパティに設定する値ごとに 1 つの要素を持つ 2 次元配列 (VT_ARRAY) を渡します。When setting a multi-valued property, pass a two-dimensional array (VT_ARRAY) with one element for each value that you want to set for the property.

  • バイナリプロパティ (MAPI 型PT_BINARY) は、文字列ではなくバイト配列として格納されます。A binary property (MAPI type PT_BINARY) is stored as an array of bytes rather than a string. バイナリプロパティを取得すると、 VT_ARRAY型の値が返されます。Getting a binary property will return a value of type VT_ARRAY. GetPropertySetPropertyGetProperties、およびSetPropertiesの各メソッドは、バイナリ配列と文字列の間で変換を実行しません。The GetProperty, SetProperty, GetProperties, and SetProperties methods do not perform any conversion between binary array and string. 明示的に変換を実行するには、ヘルパー メソッド PropertyAccessor.BinaryToString および PropertyAccessor.StringToBinary を使用します。Use the helper methods PropertyAccessor.BinaryToString and PropertyAccessor.StringToBinary to explicitly perform any conversion.

  • PT_OBJECTなど、特定の MAPI プロパティの種類は、 PropertyAccessorではサポートされていません。Certain MAPI property types, such as PT_OBJECT, are not supported by the PropertyAccessor. このようなプロパティを取得または設定しようとすると、"実行できません" エラーが発生します。Attempting to get or set such properties will result in a "property operation not supported" error.

  • MAPI proptag 名前空間で参照を使用してプロパティを取得または設定するときは、proptag で指定された種類が、プロパティの基になる種類と一致するようにします。When getting or setting a property using a reference in the MAPI proptag namespace, make sure that the type specified in the proptag matches the underlying type of the property. VT_BSTRとしてプロパティを取得または設定するために proptag で001e または001e の種類を指定できるPT_STRING8プロパティの場合を除き、プロパティを取得または設定しても型の強制は行われず、存在する場合はエラーが返されます。 型が一致しません。Except for the case of a PT_STRING8 property where you can specify either a type of 001E or 001F in the proptag to get or set the property as a VT_BSTR, getting or setting a property does not involve any type coercion and an error will be returned if there is a type mismatch.

  • プロパティを設定するときは、mapi の proptag 名前空間内のプロパティを使用するよりも、mapi 文字列名前空間でプロパティ参照を使用する方が制限が少ない場合があります。When setting a property, it may be less restrictive to use a property reference in the MAPI string namespace than one in the MAPI proptag namespace. MAPI 文字列名前空間でプロパティを指定する場合、プロパティの基になる型と一致する値は厳密には必要ありません。Specifying the property in the MAPI string namespace does not strictly require the value to match the underlying type of the property. たとえば、 VT_BSTRなどの文字列値を渡して、 PT_SYSTIMEなどの日付と時刻のプロパティを設定することができます。プロパティの型は、値の型となります。これは、 VT_BSTRです。For example, you can pass a string value like VT_BSTR to set a date-time property such as PT_SYSTIME, and the type of the property becomes the type of the value, which is VT_BSTR.

サポートとフィードバックSupport and feedback

Office VBA またはこの説明書に関するご質問やフィードバックがありますか?Have questions or feedback about Office VBA or this documentation? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.