我正在尝试复制电子邮件的正文并将其粘贴到新的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
答案 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"