[英]Copy email body to Excel using Outlook VBA
我正在嘗試將電子郵件的正文復制到新的 Excel 工作簿。
該代碼正在生成錯誤
“需要的對象”
在Set Wb
行上。
這段代碼的大部分是從其他地方復制的,但已經有一段時間了,我忘記了在哪里。
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
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"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.