我在名为" email temp folder"的特定文件夹上保存了多个outlook msg。并将回复文件夹中的第一个消息。
但是有一个错误:类型不匹配发生在下面的行中。
请问有人帮我这个吗?
Sub outlookActivate1()
Dim OutApp As Outlook.Application
Dim OutMail As Outlook.MailItem
Dim fso As New FileSystemObject
Dim objFolder As Object
Dim objFile As Object
Dim FileItemToUse As Outlook.MailItem
Dim i As Long
Set OutApp = CreateObject("Outlook.Application")
strPath = "C:\Users\admin\Desktop\email temp folder" & "\"
strFiles = Dir(strPath & "*.*")
Set objFolder = fso.GetFolder(strPath)
For Each objFile In objFolder.Files
If i = 0 Then
Set FileItemToUse = objFile // error: type mismatch
End If
Next objFile
With FileItemToUse
.ReplyAll
.BCC = ""
.Subject = "Hi"
.HTMLBody = "testing"
.BodyFormat = olFormatHTML
.display
End With
Set OutMail = Nothing
Set OutApp = Nothing
End Sub
答案 0 :(得分:0)
这意味着objFile
不是您在代码顶部声明的类型Outlook.MailItem
。
依赖于您的电子邮件模板始终是该文件夹的Files
集合中的第一个项目的事实并不是很稳定,因为该文件可能会改变位置(可能已经不在那里,因为你得到了type mismatch
错误 - 您可能正在尝试将另一种类型转换为应该是Outlook.MailItem
类型的变量。
我的建议是直接引用文件对象;这意味着,在你的代码中:
Set objFile = fso.GetFile("C:\...\mytemplate.msg")
并继续运行代码,而getFolder()
集合中既不需要For Each objFile
也不需要循环Files
,希望您的文件是第一个。
但是,了解这类错误的最佳方法是在调试模式下运行代码(按F8
并逐行运行),并添加一些观察者,确定运行时的内容是什么
答案 1 :(得分:0)
Outlook对象模型不提供在磁盘上打开.msg文件的任何直接方法。但是,您可以使用以下变通方法来完成工作:
使用ShellExecute方法以编程方式打开文件。请注意,只能同时运行一个Outlook应用程序实例。因此,将在新的检查器窗口中打开消息文件。
Sub CreateFromTemplate()
Dim MyItem As Outlook.MailItem
Set MyItem = Application.CreateItemFromTemplate("D:\message.msg")
MyItem.Display
End Sub