OutLook VBAに関する質問です。

ヘルプファイルのSortのコードサンプル例を参考に以下のようなコードを作成しましたが、sortが機能していません。原因と対策を教えて下さい。OutLook2000 SP-3を利用しています。OSはWindowsXP SP-2です。

Sub メールソート()
Dim objOLApp As New Outlook.Application
Dim objNameSpace As Outlook.NameSpace
Dim objFolder As Outlook.MAPIFolder
Dim objDestFolder As Outlook.MAPIFolder
Dim objMailItem As Object 'Outlook.MailItem
Dim i As Integer, k As Integer
Dim strDestFolder As String

Set objOLApp = CreateObject("Outlook.Application")
Set objNameSpace = objOLApp.GetNamespace("MAPI")
Set objFolder = objNameSpace.Folders("個人用フォルダ").Folders("受信トレイ")

objFolder.Items.Sort "[差出人]", True 'False(昇順),True(降順)
For i = 1 To objFolder.Items.Count
Set objMailItem = objFolder.Items(i)
Debug.Print i, objMailItem.SenderName
Next i

End Sub

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/12/15 01:28:30
  • 終了:2006/12/15 23:17:53

ベストアンサー

id:y3kz No.1

y3kz回答回数31ベストアンサー獲得回数92006/12/15 12:34:27

ポイント100pt

次の2点を変更したら、自分の環境(Outlook2000)で動作しました。


1.『[差出人]』を『[SenderName]』に変える。

これ、ひどいですよね、ヘルプの実行例でも日本語使ってるのに…。

ソートは出来ないのにエラーメッセージも出ないし、自分もハマりました…。


2.ソートするコレクションに変数を用意して、Sort実行後にコレクションを再取得してしまわないようにする。

具体的には

Dim colItems as Items

と宣言してから、、

Set colItems = objFolder.Items
colItems.Sort "[SenderName]", True  'False(昇順),True(降順)
For i = 1 To colItems.Count
    Set objMailItem = colItems(i)
    Debug.Print i, objMailItem.SenderName
Next i

のようにします。


.Sort を実行しても、もともとのメールデータに変更を加えるのではなく、

取得したコレクションのデータを並び替えているだけのようです。

ですから、

Set objMailItem = objFolder.Items(i)

としても、新たにコレクションを取得し直しすだけで、ソートの結果が反映されません。


この件については以下のページに解説が有ります。

http://support.microsoft.com/kb/183053/ja

(機械翻訳のページなので読みにくいですが、上のコードが良い例、下のが悪い例です。)

id:okehara

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

おかげさまでソートが実行できました。

ヘルプもいい加減なことが良く分かりました。

また、この場を利用させてもらいます。

2006/12/15 23:15:25

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません