문제

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"입니다. 이 단계에서 성능에 지나치게 걱정하지 않기 때문에 매우 비효율적 인 "개방형, 추가, 닫기"파일 방법론은이 예에 적합합니다.

나는 Google과의 답변을 찾는 데 시간을 할애 할 수 있다는 것을 알고 있지만 먼저 여기에서 확인했으며 이것에 대한 좋은 답변은 없었습니다. StackoverFlow의 팬이기 때문에 이것을 여기에 올려 놓으면 미래의 개발자들이 답을 찾는 데 도움이되기를 바랍니다. 인내심에 감사드립니다.

도움이 되었습니까?

해결책

내장 된 VBA 파일 도구를 사용하는 것만으로도 개체를 사용하지 않고 파일에 쓸 수 있습니다.

Open "C:\file.txt" for append as 1
Print #1, SomeStringVar
Close #1

다른 팁

텍스트를 추가 할 때마다 출력 파일을 다시 열지 않으면 작동해야합니다.

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 스크립팅 런타임 라이브러리에 대한 참조를 추가해야합니다. 여기에는 fileSystemObject가 있습니다.

또한 보안 팝업을 관리해야합니다. 개발자를위한 Outlook "Object Model Guard"보안 문제

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

종료 서브

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top