对象所需Outlook VBA复制粘贴到Excel

时间:2016-08-23 19:45:28

标签: excel vba excel-vba outlook outlook-vba

我正在尝试复制电子邮件的正文并将其粘贴到新的Excel工作簿中。以下代码在“Set Wb”行上生成“Object Required”错误。我是Outlook VBA的新手,我很难在任何地方尝试查找有关此错误的信息。我从其他地方复制了大部分代码,但它已经有一段时间了,我忘了在哪里。非常感谢任何帮助。

Sub PasteToExcel()
Dim activeMailMessage As MailItem
Dim xlApp As Excel.Application
Dim Wb As Excel.Workbook
Dim Ws As Excel.Worksheet


If TypeName(ActiveExplorer.Selection.Item(1)) = "MailItem" Then

    'Get a handle on the email
    Set activeMailMessage = ActiveExplorer.Selection.Item(1)

    'Copy the formatted text:
    activeMailMessage.GetInspector().WordEditor.Range.FormattedText.Copy

    'Ensure Excel Application is open
    Set xlApp = CreateObject("Excel.Application")

    'Make Excel Application visible
    xlApp.Visible = True

    'Name the Excel File
    Set Wb = xlObject.Object.Workbooks("Test.xlsx")

    'Paste the email
    Set Ws = xlObject.Object.Sheets(1)
    Ws.Range("A1").Paste

    End If
End Sub

1 个答案:

答案 0 :(得分:3)

xlObject未在任何地方声明或分配。在模块顶部指定Option Explicit - VBE可能会抱怨未声明的标识符。

由于xlObject未被声明,因此它隐式Variant,并且由于它从未被分配,因此其类型实际为Variant/Empty。由于Empty不是对象类型,因此使用Set关键字来指定对象引用会导致"对象需要"错误,因为Set只能用于分配对象引用。

此代码重现了该问题 - 在立即窗格中尝试:

Set foo = xyz.abc

换句话说,xlObject并不存在,VBA不知道如何处理它。正如您在评论中被告知的那样,您需要使用正确声明和分配的xlApp引用。

Set Wb = xlApp.Workbooks("Test.xlsx")
  

这让我超出范围错误

当然可以。在该Excel实例中没有名为Test.xlsx的工作簿。

解决方案是打开它:

Set Wb = xlApp.Workbooks.Open("Test.xlsx")

现在,如果该文件不存在,您应该会遇到另一个错误:处理它

  

Test.xlsx不存在。我需要宏来创建一个新的工作簿,并将其命名为。

Add方法将创建一个全新的工作簿:

Set Wb = xlApp.Workbooks.Add

您可以在关闭工作簿之前将其命名为:

wb.SaveAs "test.xlsx"
wb.Close False

Close方法包含保存更改​​的参数,因此您也可以在一行中执行此操作:

wb.Close True, "test.xlsx"