2016-05-13 11 views
-2

埋め込み画像を含むVBAコードを使用して、Excelから一括メールワークブックを作成しようとしています。コードに「For i」を適用することができず、ListObject tableを使用してリスト全体からメールを送信する方法を理解できません。以下のスクリプトでは、参照されるシートは「メッセージジェネレータ」です。列Bの行の値が0になるまで、リスト内の全員に個別の電子メールを送信しようとしています。しかし、ループに設定したIntegerは値0を返すように見えます。行と列は全くありません。バルク電子メールwith excel

誰かが大量の電子メールを送信するためにブックを作成する方法を知っていますか?スクリプトについては以下を参照してください。ありがとうございました!

Dim MainWB As Workbook 
Dim olApp As Outlook.Application 
Dim olemail As Outlook.MailItem 
Dim fso As Scripting.FileSystemObject 
Dim ts As Scripting.TextStream 
Dim SigPath As String, SigText As String 
SigPath = Environ("AppData") & "\Microsoft\Signatures\New.htm" 
    Set fso = New Scripting.FileSystemObject 
    Set ts = fso.OpenTextFile(SigPath) 
SigText = ts.ReadAll 
ts.Close 
    Set fso = Nothing 
    Set MainWB = ActiveWorkbook 

Dim Subject As String 
Dim Body As String 
Dim i As Integer 
Dim l As Integer 
l = NumberOfNonBlankRowsInColumn(2) - 2 'subtract 2 header rows 
    Set olApp = New Outlook.Application 

For i = 0 To l 
    Set olemail = olApp.CreateItem(olMailItem) 
    Subject = MainWB.Sheets("Message Generator").Range("B3").Offset(i, 0).Value 
    Body = MainWB.Sheets("Message Generator").Range("AB3").Offset(i, 0).Value 
    With olemail 
     .BodyFormat = olFormatHTML 
     .To = "[email protected]" 
     .Subject = Subject 
     .Body = Body 
     .Attachments.Add "C:\Users\Jacka\Documents\Test\logo.jpg" 
     .HTMLBody = "<img src='cid:logo.jpg'" & "width='309.5' height='39.5'><br>" & _vbanewline & .HTMLBody & SigText 
     .Display 
     End With 
     Set olemail = Nothing 
Next i 
    Set olApp = Nothing 
End Sub 

機能NumberOfNonBlankRowsInColumn(整数としてsouceCol)整数

Dim NumberOfRowsInColumn As Integer, j As Integer 
Dim CurrentRowValue As String 
NumberOfRowsInColumn = Cells(Rows.Count, sourceCol).End(xlUp).row 

For j = 1 To NumberOfRowsInColumn 
    CurrentRowValue = Cells(j, sourceCol).Value 

If IsEmpty(CurrentRowValue) Or CurrentRowValue = "" Then 
Exit For 
End If 
Next j 
NumberOfNonBlankRowsInColumn = (j - 1) 
End Function 

答えて

0

として、この間違いをしないようにしてください。私が行の値がより上にあり、後で削除された私の列のために、それが時々で働いた理由は他にありません。したがって、私はNonBlankRowsInColumnを2に設定します(値がどこで始まるか)。以下の編集機能を参照してください。


機能NumberOfNonBlankRowsInColumn(整数としてsouceCol)整数として

Dim NumberOfRowsInColumn As Integer, j As Integer 
Dim CurrentRowValue As String 
NumberOfRowsInColumn = Cells(Rows.Count, sourceCol).End(xlUp).row 

For j = 2 To NumberOfRowsInColumn 
    CurrentRowValue = Cells(j, sourceCol).Value 

If IsEmpty(CurrentRowValue) Or CurrentRowValue = "" Then 
Exit For 
End If 
Next j 
NumberOfNonBlankRowsInColumn = (j - 1) 
End Function 
関連する問題