使用 VBA 打开和阅读 .eml 文件
Open and read .eml files with VBA
我需要使用 VBA 打开和阅读 .eml 文件。令人震惊的是,这似乎很难。请帮忙。下面的代码在 Set OL = GetObject("Outlook.Application")
:
行给出了这个错误
Run-time error '-2147221020 (800401e4)':
Automation error
Invalid Syntax
代码:
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
GetObject
函数将 class 名称作为第二个参数:
Set OL = GetObject(, "Outlook.Application")
它是CreateObject
,它会先拿走它:
Set OL = CreateObject("Outlook.Application")
请注意,Outlook 永远只会 运行 一个实例。您应该能够调用 CreateObject
函数,而不需要使用 GetObject
。如果 Outlook 已经打开,CreateObject
将 return 该实例,如果 outlook 尚未打开,它将创建一个。
我需要使用 VBA 打开和阅读 .eml 文件。令人震惊的是,这似乎很难。请帮忙。下面的代码在 Set OL = GetObject("Outlook.Application")
:
Run-time error '-2147221020 (800401e4)': Automation error Invalid Syntax
代码:
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
GetObject
函数将 class 名称作为第二个参数:
Set OL = GetObject(, "Outlook.Application")
它是CreateObject
,它会先拿走它:
Set OL = CreateObject("Outlook.Application")
请注意,Outlook 永远只会 运行 一个实例。您应该能够调用 CreateObject
函数,而不需要使用 GetObject
。如果 Outlook 已经打开,CreateObject
将 return 该实例,如果 outlook 尚未打开,它将创建一个。