Hãy thử di chuyển nó lần đầu tiên sau đó xóa nó (chỉ hoạt động trên một số patchs năm 2000) hoặc sử dụng RDO hay CDO để làm công việc cho bạn (bạn sẽ phải cài đặt chúng)
Set objDeletedItem = objDeletedItem.Move(DeletedFolder)
objDeletedItem.Delete
CDO cách
Set objCDOSession = CreateObject("MAPI.Session")
objCDOSession.Logon "", "", False, False
Set objMail = objCDOSession.GetMessage(objItem.EntryID, objItem.Parent.StoreID)
objMail.Delete
RDO
set objRDOSession = CreateObject("Redemption.RDOSession")
objRDOSession.Logon
set objMail = objRDOSession.GetMessageFromID(objItem.EntryID>)
objMail.Delete
bạn cũng có thể đánh dấu các thông điệp đầu tiên trước khi bạn xóa nó và thứ e vòng lặp qua các thư mục các mục đã xóa và tìm thấy nó một cuộc gọi xóa một lần thứ hai. Đánh dấu nó bằng cách sử dụng Userproperty.
objMail.UserProperties.Add "Deleted", olText
objMail.Save
objMail.Delete
lặp qua bạn đã xóa mục tìm kiếm userprop rằng
Set objDeletedFolder = myNameSpace.GetDefaultFolder(olFolderDeletedItems)
For Each objItem In objDeletedFolder.Items
Set objProperty = objItem.UserProperties.Find("Deleted")
If TypeName(objProperty) <> "Nothing" Then
objItem.Delete
End If
Next
Tôi không muốn dùng CDO hoặc RDO, vì toàn bộ vấn đề ở đây là giảm độ phức tạp của mã và tôi không muốn giới thiệu tất cả các phụ thuộc mới. Thứ hai là cơ bản những gì tôi đang làm bây giờ. Lần đầu tiên tôi làm (giả): cho mỗi thư trong hộp thư đến msg.delete '// di chuyển đến các mục đã xóa next cho mỗi thư trong deletedItems msg.xóa '// xóa vĩnh viễn tiếp theo trong khi những gì tôi muốn làm, là một cái gì đó như: cho mỗi msg trong hộp thư đến msg.delete (vĩnh viễn = true) tiếp theo – eidylon
Không có phương pháp như vậy vào năm 2000. Bạn sẽ phải tạo ra chức năng của riêng bạn trong VBA. Điều gì là sai với di chuyển-xóa hoặc vòng lặp của bạn? nó có hiệu quả không? – 76mel
Không có gì vốn có "sai" với nó, tôi chỉ đang tìm kiếm một cách để làm sạch hơn là dựa vào hai vòng lặp. Thanks anyway anyway. – eidylon