0

Excelに保存されているアドレスのリストを自動メールで送信するスクリプトがありますが、最初のアドレスにのみ送信され、残りのアドレスにはループしていません。修正できないようです:

Set objMessage = CreateObject("CDO.Message") 
Set app = CreateObject("Excel.Application")
Set fso = CreateObject("Scripting.FileSystemObject")

For Each f In fso.GetFolder("Y:\Billing_Common\autoemail").Files
  If LCase(fso.GetExtensionName(f)) = "xls" Then
    Set wb = app.Workbooks.Open(f.Path)

set sh = wb.Sheets("Auto Email Script")
row = 2
email = sh.Range("A" & row)
LastRow = sh.UsedRange.Rows.Count

Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim f                                   
Set f = fso.OpenTextFile("Y:\Billing_Common\autoemail\Script\Email.txt", ForReading)                                        
BodyText = f.ReadAll

For r = row to LastRow
    If App.WorkSheetFunction.CountA(sh.Rows(r)) <> 0 Then 
    objMessage.Subject = "Billing: Meter Read" 
    objMessage.From = "billing@energia.ie"
    row = row + 1
    objMessage.To = email
    objMessage.TextBody = BodyText

objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2


'Name or IP of Remote SMTP Server
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "SERVER ADDRESS HERE"

'Server port
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 

objMessage.Configuration.Fields.Update
objMessage.Send

    End if
Next

f.Close
Set f = Nothing
Set fso = Nothing
wb.Close
End If
Next

どんな助けでも大歓迎です!

ありがとう!

4

1 に答える 1

2
row = 2
email = sh.Range("A" & row)
...
For r = row to LastRow
  ...
  objMessage.To = email
  ...
Next

emailセルの値に設定し、"A2"決して変更しません。複数の受信者にメールを送信する場合は、次のようにする必要があります。

objMessage.To = sh.Range("A" & r).Value

または(より良い)受信者リストを作成します(使用される範囲が最初のテーブル行のヘッダーで始まると仮定します):

ReDim recipients(LastRow - row)
For r = row To LastRow
  recipients(r - row) = sh.Range("A" & r).Value
Next
objMessage.To = Join(recipients, ";")

メッセージを一度だけ送信します。残りは MTA が処理します。


補足: Vishnu Prasad Kallummel がコメントで指摘したように、コードは開始した Excel インスタンスを閉じません。VBScript で作成された他のオブジェクトとは異なり、Office アプリケーションはスクリプトで自動的に終了しないため、自分で処理する必要があります。

...
wb.Close
app.Quit
于 2013-07-03T10:26:48.600 に答える