【问题标题】:VBA - select the first file from a specific folder and reply allVBA - 从特定文件夹中选择第一个文件并全部回复
【发布时间】:2015-02-21 11:59:50
【问题描述】:

我在名为“电子邮件临时文件夹”的特定文件夹中保存了多个 Outlook 消息,并会在文件夹中的第一个消息上回复。

但是有一个错误:下面几行出现类型不匹配。

有人可以帮我解决这个问题吗?

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

【问题讨论】:

标签: excel vba outlook


【解决方案1】:

这意味着objFile 不是您在代码顶部声明的Outlook.MailItem 类型。

依赖于您的电子邮件模板将始终是文件夹的 Files 集合中的第一项这一事实并不是很稳定,因为文件可能会更改位置(可能已经不存在,因为您得到了 @987654324 @error - 您可能试图将另一种类型转换为应该是 Outlook.MailItem 类型的变量)。

我的建议是直接引用文件对象;这意味着,在您的代码中:

Set objFile = fso.GetFile("C:\...\mytemplate.msg")

并继续运行代码,无需在Files 集合中进行getFolder() 或循环For Each objFile,希望您的文件将是第一个。

但是,了解此类错误的最佳方法是在调试模式下运行代码(按 F8 并逐行运行),并通过添加一些观察者,找出运行时的内容。

【讨论】:

  • 感谢您的建议。我仍然想一次在文件夹中放置 1 个文件。那么是否可以将 FileItemToUse 解析为 Outlook 项目?
  • 我不明白你的问题,对不起。你能给我更多的背景信息吗?
  • 而不是遍历“电子邮件临时文件夹”中的多个文件。我只会将 1 个文件放在文件夹 (FileItemToUse) 中并在上面回复。在我的代码中,我设置了 FileItemToUse = objFile 但它不起作用,因为它们是 2 种不同的类型。那么我该如何解决呢?
  • 我不知道你的对象的类型,你应该知道。您可以使用函数TypeName(objFile) 来计算它,然后声明您的FileItemToUse
  • objFile 是对象,FileItemToUse 是 Outlook.MailItem。如果我将 FileItemToUse 调暗为对象,它将与 objFile 匹配,但 .replyAll 会出现错误,因为它不是 Outlook 项目。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-23
    • 2018-02-18
    • 2022-08-04
    相关资源
    最近更新 更多