簡體   English   中英

使用 Outlook VBA 將電子郵件正文復制到 Excel

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM