VBA - 从特定文件夹中选择第一个文件并全部回复

时间:2015-02-21 11:59:51

标签: excel vba outlook-vba

我在名为" 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

2 个答案:

答案 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文件的任何直接方法。但是,您可以使用以下变通方法来完成工作:

  1. Application类的CreateItemFromTemplate方法,它允许从Outlook模板(.oft)或只是消息文件(.msg)创建新的Microsoft Outlook项目并返回新项目。有关详细信息,请参阅How To: Create a new Outlook message based on a template
  2. 使用ShellExecute方法以编程方式打开文件。请注意,只能同时运行一个Outlook应用程序实例。因此,将在新的检查器窗口中打开消息文件。

    Sub CreateFromTemplate() Dim MyItem As Outlook.MailItem Set MyItem = Application.CreateItemFromTemplate("D:\message.msg") MyItem.Display End Sub