2016-12-01 4 views
0

以下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

私はしました。しかし、それはまだそれがシート2であることを知っています。しかし、名前を変更すると、実行時エラー '1004 Application definedまたはオブジェクト定義エラー – 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

関連する問題