0

VBA を使用して .eml ファイルを開いて読み取る必要があります。意外と難しそうですね。助けてください。以下のコードでは、行でこのエラーが発生しますSet OL = GetObject("Outlook.Application")

実行時エラー '-2147221020 (800401e4)': 自動化エラー無効な構文

コード:

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Private Const SW_SHOWNORMAL As Long = 1
Private Const SW_SHOWMAXIMIZED As Long = 3
Private Const SW_SHOWMINIMIZED As Long = 2

Sub test11()
    strMyFile = "C:\test.eml"
    Dim Myinspect As Outlook.Inspector
    Dim MyItem As Outlook.MailItem
    Dim OL As Object

    If Dir(strMyFile) = "" Then
        MsgBox "File " & strMyFile & " does not exist"
    Else
        ShellExecute 0, "Open", strMyFile, "", "C:\test1.eml", SW_SHOWNORMAL
    End If

    Set OL = GetObject("Outlook.Application")
    Set Myinspect = OL.ActiveInspector
    Set MyItem = Myinspect.CurrentItem
    MsgBox "Subject = " & MyItem.Subject
    MsgBox "Body = " & MyItem.Body
    MyItem.Close 1
End Sub
4

1 に答える 1

1

このGetObject関数は、クラス名を 2 番目の引数として受け取ります。

Set OL = GetObject(, "Outlook.Application")

それCreateObjectは最初にそれを取るだろう:

Set OL = CreateObject("Outlook.Application")

Outlook は 1 つのインスタンスしか実行しないことに注意してください。関数を呼び出すことができ、CreateObject使用する必要はありませんGetObject。Outlook が既に開いてCreateObjectいる場合は、そのインスタンスが返されます。Outlook がまだ開いていない場合は、インスタンスが作成されます。

于 2015-02-18T16:07:27.993 に答える