【发布时间】:2021-09-16 01:38:29
【问题描述】:
我正在尝试打开存储在本地的点 .eml 文件并使用 excel 宏访问附件文件名。 我收集了一些可以完成这项工作的代码,但不是真的。打开 .eml 文件有效(Set Myinspect = OL.ActiveInspector),但在下一行(Set MyItem = Myinspect.CurrentItem)我收到错误“运行时错误'91' - 对象变量或未设置块变量” .
但是,如果我在第一次尝试后从头开始重新运行代码(电子邮件现在从上次运行中打开),我会得到没有错误的附件名称,并且这里自然会关闭电子邮件的第一个实例并打开第二个实例。如果我删除“MyItem.Close 1”行,我将在第二次运行后获得两个电子邮件实例。
我怀疑这可能是由于在代码尝试检索附件名称之前电子邮件没有时间打开和加载,因此我尝试在设置“Myitem”之前放置一个 MsgBox 并等到电子邮件已加载,但没有成功..
感谢您对此提供的任何帮助。代码的最终用途是遍历 .eml 文件列表以搜索带有预先确定名称的附件的 .eml 文件,然后返回 .eml 文件的名称,因此它循环更快的解决方案那么例如“等待 5 秒”将是最佳选择。
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:\test1.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 = CreateObject("Outlook.Application")
Set Myinspect = OL.ActiveInspector
Set MyItem = Myinspect.CurrentItem
MsgBox "Attachment = " & MyItem.Attachments(1)
MyItem.Close 1
End Sub
【问题讨论】: