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