人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: okehara
●カテゴリ:コンピュータ
✍キーワード:application as NeXT object OS
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● y3kz
●100ポイント ベストアンサー

次の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

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

◎質問者からの返答

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

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ