5

Outlook でフォルダーを開き、メッセージを反復処理する VBA アプリを作成しました。メッセージ本文を (少し調整して) 単一のフラット ファイルに書き込む必要があります。私のコードは次のとおりです...

Private Sub btnGo_Click()
    Dim objOutlook As New Outlook.Application
    Dim objNameSpace As Outlook.NameSpace
    Dim objInbox As MAPIFolder
    Dim objMail As mailItem
    Dim count As Integer

    Set objNameSpace = objOutlook.GetNamespace("MAPI")
    Set objInbox = objNameSpace.GetDefaultFolder(olFolderInbox)
    count = 0

    For Each objMail In objInbox.Items
       lblStatus.Caption = "Count: " + CStr(count)
       ProcessMailItem (objMail)
       count = count + 1
    Next objMail

  End If
End Sub

問題の部分は「ProcessMailItem」です。この段階ではパフォーマンスにあまり関心がないので、この例では非常に効率の悪い「開いて、追加して、閉じる」ファイルの方法で問題ありません。

グーグルで答えを探すのに時間を費やすことができることは知っていますが、最初にここをチェックしましたが、これには良い答えがありませんでした. Stackoverflow のファンとして、これをここに掲載することが、将来の開発者が答えを探すのに役立つことを願っています。お待ち頂きまして、ありがとうございます。

4

3 に答える 3

6

組み込みの VBA ファイル ツールを使用するだけで、オブジェクトを使用せずにファイルに書き込むことができます。

Open "C:\file.txt" for append as 1
Print #1, SomeStringVar
Close #1
于 2008-12-30T20:16:18.050 に答える
4

テキストを追加するたびに出力ファイルを再度開いてもかまわない場合は、これでうまくいくはずです。

Private Sub ProcessMailItem(objMail As MailItem)

    Dim fso As New FileSystemObject
    Dim ts As TextStream

    Set ts = fso.OpenTextFile("C:\Outputfile.txt", ForAppending, True)

    ts.Write(objMail.Body)

    ts.Close()
    Set ts = Nothing
    Set fso = Nothing

End Sub

また、Microsoft Scripting Runtime ライブラリへの参照を追加する必要があります。これには FileSystemObject が含まれています。

于 2008-12-30T18:07:20.027 に答える
1

また、開発者向けの Outlook "オブジェクト モデル ガード" セキュリティの問題で説明されている "電子メール アドレスにアクセスしようとしている" というセキュリティ ポップアップにも注意する必要があります。

Public Sub ProcessMailItem(objMail As MailItem)
Dim FSO As New FileSystemObject
Dim ts As TextStream
Dim loc As String
Dim subject As String
Dim strID As String
' per http://www.outlookcode.com/article.aspx?ID=52
Dim olNS As Outlook.NameSpace
Dim oMail As Outlook.MailItem

strID = MyMail.EntryID
Set olNS = Application.GetNamespace("MAPI")
Set oMail = olNS.GetItemFromID(strID)
subject = oMail.subject
Set ts = FSO.OpenTextFile("C:\Documents and Settings\tempuser\My Documents\EMAILS\" + subject, ForAppending, True)
ts.Write (oMail.Body)
ts.Close
Set ts = Nothing
Set FSO = Nothing
Set oMail = Nothing
Set olNS = Nothing

サブ終了

于 2011-10-27T16:37:56.140 に答える