0

Microsoft Outlook VBA でサブルーチンを作成して、受信トレイとそのサブフォルダー内のすべてのメッセージを一覧表示する csv ファイルを作成しました。受信トレイを見るだけでマクロが機能するようになりましたが、サブフォルダーをループしようとすると、書き込もうとしているファイルを参照して「不正なファイル名エラー」が返されました。したがって、基本的に、processFolder 関数の「Write #ff」行がエラーを引き起こしています。ファイル名 #ff のスコープについて何か不足しているものはありますか? ありがとう

サブ Response_Log()

Dim myItem As Object
Dim msg As MailItem
Dim myFolder As Folder
Dim mysubfolder As Outlook.Folder
Dim myNamespace As NameSpace
Set myNamespace = Application.GetNamespace("MAPI")
Set myFolder = myNamespace.Folders("My mailbox").Folders("Inbox")

Dim resFile As String
    resFile = "myfilepath\Response_Log.csv"
Dim ff As Byte
    ff = FreeFile()
Open resFile For Append As #ff
Write #ff, "Sender Name"; "Sender Email Address"; "Received Time"; "Subject"; "Response Status and Response Time"
processFolder myFolder

Close #ff

サブ終了

関数 processFolder (oParent As Outlook.MAPIFolder)

    Dim oFolder As Outlook.MAPIFolder
    Dim oMail As Object
    Dim Respond As String
    Dim NoRespond As String
        NoRespond = "Not Yet Replied"


    For Each oMail In oParent.Items
        If TypeOf oMail Is MailItem Then
           If Mid(oMail.SenderEmailAddress, 1, 3) <> "/O=" Then
                If oMail.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x10810003") = 102 Or oMail.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x10810003") = 103 Then
                    Respond = "Replied on " & oMail.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x10820040")
                    Write #ff, oMail.SenderName; oMail.SenderEmailAddress; oMail.ReceivedTime; oMail.Subject; Respond
                Else                        
                    Write #ff, oMail.SenderName; oMail.SenderEmailAddress; oMail.ReceivedTime; oMail.Subject; NoRespond
                End If
            End If
        End If
    Next

    If (oParent.Folders.Count > 0) Then
        For Each oFolder In oParent.Folders
            processFolder oFolder
        Next
    End If

終了機能

4

1 に答える 1

0

ファイル番号ffは で定義されているようで、 で使用Response_Logしようとしています。それはうまく終わらないでしょう:-)processFolder

おそらくprocessFolder、書き込み先のファイル番号である追加のパラメーターを受け入れるように変更することをお勧めします。

次に、それ自体Response_Logからの再帰呼び出しと再帰呼び出しの両方で、それを渡すようにしてください。processFolder何かのようなもの:

Sub Response_Log()
    :
    processFolder myFolder,ff
:
Function processFolder(oParent As Outlook.MAPIFolder,ff as Byte)
    :
    processFolder oFolder,ff

これらの呼び出しの構文も確認することをお勧めします。VBA をやったのは久しぶりですが、オプションのcallステートメントと括弧を使用すると発生する可能性のある問題がいくつかあります。次のようなものが必要になる場合があります。

call processFolder (oFolder,ff)
于 2013-09-11T03:37:32.643 に答える