簡體   English   中英

Excel 2013-VBA-必需的對象| 運行時錯誤'424'

[英]Excel 2013 - VBA - Object Required | Run-time Error '424'

我是VBA的新手,正嘗試設置一個宏,該宏將通過按鈕發送電子郵件。 我有以下代碼:

Sub SendHTMLEmail(what_address1 As String, subject_line1 As String, mail_body1 As String)

    Dim olapp As Outlook.Application
    Set olapp = CreateObject("Outlook.Application")

    Dim olmail As Outlook.MailItem
    Set olmail = olapp.CreateItem(olMailItem)

    olmail.To = what_address1
    olmail.Subject = subject_line1
    olmail.HTMLBody = mail_body1
    olmail.Display

End Sub

Sub SendHoldingEmail()

    row_number = 1

    Do
        DoEvents

        row_number = row_number + 1
        Dim mail_body_message As String
        Dim full_name As String
        Dim Email_Subject As String

        mail_body_message = EmailWording.Range("E4")
        Email_Subject = EmailWordings.Range("D4")
        Call SendHTMLEmail("", Email_Subject, mail_body_message)

    Loop Until row_number = 2

End Sub

當我嘗試並繼續執行此操作時出現錯誤。 你能告訴我我要去哪里錯嗎?

我確實進行了搜索,並查看了出現此錯誤的文章,但仍然無法使它起作用。 我想念什么?

您不能僅使用“ EmailWording”,就像它是在VBA中構造的對象一樣。 如果僅在所有代碼之上添加Option Explicit ,然后嘗試編譯項目,則會看到它顯示“ Compile Error:Variable not defined ”。 您必須像這樣獲得工作表:

Dim m_sheet As Excel.Worksheet
Set m_sheet = ActiveWorkbook.Sheets("EmailWording")

然后,將代碼更改為使用m_sheet

mail_body_message = m_sheet.Range("E4")

請注意,我刪除了row_number和循環,因為我看不到這在您的代碼中有何重要性。

此外,我想給您一個提示:在創建一個新的Outlook-Application之前,請先獲取它,在用戶的客戶端上可能已經打開了一個Outlook-Application。

Set olapp = GetObject(, "Outlook.Application")
If olapp Is Nothing Then
   Set olapp = CreateObject("Outlook.Application")
End If

1)在IDE的“工具/引用”中設置對Microsoft Outlook [version number] Object Library引用。

2)使工作表引用一致。 以下代碼行引用了兩頁,而不僅僅是一頁:

mail_body_message = EmailWording.Range("E4")
Email_Subject = EmailWordings.Range("D4")

3)最后,進行一些代碼清除,使用Option Explicit和適當的代碼縮進。

這對我有用:

Option Explicit

Sub SendHTMLEmail(what_address1 As String, subject_line1 As String, mail_body1 As String)

    Dim olapp As Outlook.Application
    Dim olmail As Outlook.MailItem

    Set olapp = CreateObject("Outlook.Application")
    Set olmail = olapp.CreateItem(olMailItem)

    olmail.To = what_address1
    olmail.Subject = subject_line1
    olmail.HTMLBody = mail_body1
    olmail.Display

End Sub

Sub SendHoldingEmail()

    Dim EmailWording As Excel.Worksheet
    Dim row_number As Long
    Dim Email_Subject As String, full_name As String, mail_body_message As String

    Set EmailWording = ThisWorkbook.Sheets("EmailWording")

    row_number = 1

    Do
       DoEvents

       row_number = row_number + 1

       mail_body_message = EmailWording.Range("E4")
       Email_Subject = EmailWording.Range("D4")
       Call SendHTMLEmail("miqi180@miqi.com", Email_Subject, mail_body_message) ' test email address inserted (not my real one)

    Loop Until row_number = 2

End Sub

編輯

修復了循環,這要歸功於Zac

Sub SendHoldingEmail()

    Dim EmailWording As Excel.Worksheet
    Dim row_number As Long
    Dim Email_Subject As String, full_name As String, mail_body_message As String

    Set EmailWording = ThisWorkbook.Sheets("EmailWording")

    ' starting row number
    row_number = 4

    Do
       DoEvents

       mail_body_message = EmailWording.Cells(row_number, 5) 
       Email_Subject = EmailWording.Cells(row_number, 4)
       Call SendHTMLEmail("miqi180@miqi.com", Email_Subject, mail_body_message) ' test email address inserted (not my real one)

       row_number = row_number + 1

    Loop Until row_number = 6 ' change as required

End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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