私は、Lotus Notesを介して電子メールを送信するためのExcel VBA(Send_Mail)を持っています。それはうまくいっていますが、私は一人で複数の人に個別のメールを送る際に助けが必要です。複数の電子メールを送信するためのvbaのループ機能のヘルプが必要
私のExcelシートにあります。セルA7は200行以上になる電子メールアドレス、B7は件名、Cell C7はメール本文を持ちます。 (これには別のマクロが自動的に入力されています)。しかし、私のコード(Send_Mail)は、セルA7にあるアドレスにただ1つの電子メールを送信しています。私はCol A7以降のメールアドレス宛てに、それぞれの件名(Col B)とメール本文(C C)をメールで送信してください。
以下は私のコードです。
Public TOID As String
Public CCID As String
Public SECT As String
Public ACCO As String
Public SUBJ As String
Sub Send_Mail()
Dim answer As Integer
answer = MsgBox("DO YOU HAVE LOTUS NOTES OPEN ?? Not WebLotus notes", vbYesNo + vbQuestion, "LOTUS NOTES")
If answer = vbNo Then
MsgBox "Please Open Notes and Try the Macro Again"
Exit Sub
Else
End If
Application.DisplayAlerts = False
Call Send
MsgBox "Mail Sent to " & (Range("L2").Value) & " " & "Recipents"
Application.DisplayAlerts = True
End Sub
Public Function Send()
SendEMail = True
Sheets("Main").Select
TOID = Range("A7").Value
CCID = ""
SUBJ = Range("B7").Value
'On Error GoTo ErrorMsg
Dim EmailList As Variant
Dim ws, uidoc, Session, db, uidb, NotesAttach, NotesDoc, objShell As Object
Dim RichTextBody, RichTextAttachment As Object
Dim server, mailfile, user, usersig As String
Dim SubjectTxt, MsgTxt As String
Set Session = CreateObject("Notes.NotesSession")
user = Session.UserName
usersig = Session.COMMONUSERNAME
mailfile = Session.GETENVIRONMENTSTRING("MailFile", True)
server = Session.GETENVIRONMENTSTRING("MailServer", True)
Set db = Session.GETDATABASE(server, mailfile)
If Not db.IsOpen Then
Call db.Open("", "")
Exit Function
End If
Set NotesDoc = db.CREATEDOCUMENT
With NotesDoc
.Form = "Memo"
.Subject = SUBJ 'The subject line in the email
.Principal = user
.sendto = TOID 'e-mail ID variable to identify whom email need to be sent
.CopyTo = CCID
End With
Set RichTextBody = NotesDoc.CREATERICHTEXTITEM("Body")
With NotesDoc
.COMPUTEWITHFORM False, False
End With
'==Now set the front end stuff
Set ws = CreateObject("Notes.NotesUIWorkspace")
If Not ws Is Nothing Then
Set uidoc = ws.EDITDOCUMENT(True, NotesDoc)
If Not uidoc Is Nothing Then
If uidoc.EDITMODE Then
'Mail Body
Sheets("Main").Select
Range("C7").Select
Dim rnBody1 As Range
Set rnBody1 = Selection
rnBody1.CopyPicture
'rnBody1.Copy
Call uidoc.GOTOFIELD("Body")
Call uidoc.Paste
End If
End If
End If
Call uidoc.Send
Call uidoc.Close
'close connection to free memory
Set Session = Nothing
Set db = Nothing
Set NotesAttach = Nothing
Set NotesDoc = Nothing
Set uidoc = Nothing
Set ws = Nothing
Sheets("Main").Select
End Function
あなたのsend関数は、引数で呼び出すプロシージャと考えることができます。これらの引数は、A7の下向きの範囲でループ内で割り当てる変数です。 1つの引数は、Range( "A"&currentRow)をサブとサブ内に渡して、これをTOID、同じ列BとCの値に割り当てます(これは現在の行に対してこれらを渡します)。 – QHarr
あなたが使用している.Selectを取り除く。 [避ける.Select](https://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba)を参照してください。明示的にオプションを使用し、すべての変数が宣言され、正しく型付けされていることを確認します。ブールSendEmailをブール値にします。あなたには多くのバリエーションがあります。 Dim ws、.... NotesAttach、NotesDoc、objShell Objectとして、最後のものだけがオブジェクトです。空のElse節もあります。私はあなたの関数の最後にガベージコレクションが必要だとは思わないが、他の人はそれに同意しないかもしれない。 – QHarr
こんにちはQHarr、私はこれらのコードに非常に新しいです、そして、それを多く理解しません。このコードをループオプションと一緒にクリーニングしてください。 – Amit