2016-12-01 61 views
0

下面我有一個腳本,它將發送一封電子郵件(從excel)到Mail.To變量中列出的收件人。我想從一個不同的工作表中的數組中獲取電子郵件地址列表,分隔這些值並用分號分隔它們。如何劃分數組並引用VBA中的字符串

我得到一個運行時錯誤與當前代碼: 「-2147352565(8002000b)」 項目無法對應於請求的名稱或序號的集合中找到。

我對此有何看法? (使用連接功能)。或者有更簡單的方法。

任何幫助,將不勝感激!謝謝。

Private Sub sendEmail_Click() 
Dim Mail As New Message 
Dim config As Configuration 
Set config = Mail.Configuration 

config(cdoSendUsingMethod) = cdoSendUsingPort 
config(cdoSMTPServer) = "smtp.gmail.com" 
config(cdoSMTPAuthenticate) = cdoBasic 
config(cdoSMTPUseSSL) = True 
config(cdoSendUserName) = "****************.edu" 
config(cdoSendPassword) = "*******" 
config.Fields.Update 

mailRecipientArray = Worksheets("Sheet2").Range(Range("D2"), Range("D20")).Value 
mailRecipientString = Join(WorksheetFunction.Transpose(mailRecipientArray), "; ") 

Mail.To = mailRecipientString 
Mail.From = config(cdoSendUserName) 
Mail.Subject = "EmailSubject" 
Mail.TextBody = ActiveSheet.emailBodytext 

Mail.AddAttachment "C:\Users\fms0ce\Documents\21.txt" 

On Error Resume Next 

Mail.Send 

If Err.Number <> 0 Then 
    MsgBox Err.Description, vbCritical, "There was an error" 
    Exit Sub 

End If 

MsgBox "Your email(s) have been sent!", vbInformation, "Sent" 

End Sub 
+0

什麼行會拋出錯誤? –

+0

'mailrecipientarray'行 – Luke

+0

我做過。但是excel仍然知道它是sheet2。但是,在更改名稱後,該行顯示運行時錯誤'1004應用程序定義的或對象定義的錯誤 – Luke

回答

0

的問題是,所使用的外Range()內部的Range()仍指活性片。嘗試:

Dim ws As Worksheet 
Set ws = Sheets("Sheet2") 
mailRecipientArray = ws.Range(ws.Range("D2"), ws.Range("D20")).Value 

至於你的其他問題去,Join似乎罰款。這是我最喜歡的功能之一。如果您遇到問題,請提出另一個問題。

+0

這確實是問題所在。簡單的修復。謝謝! 連接函數完美工作。 – Luke