お世話になっております。
現在、スクリプトAを実行する為に、
ExcelのBookをgetobjectするのでopenしておく必要があり
一度、ExcelのBookを開くスクリプトを実行、
その後、スクリプトAを実行。
これを続けて行うと、
最初の何度かは成功するのですが、
ある一定期間から突然
「インデックスが有効範囲にありません。」と言うエラーが出て、
スクリプトAが実行出来なくなります。
各々を単独実行する分には全く問題なく動き、
また、手動でExcelBookを開いてスクリプトAを実行すると、
正常に動きます。
Excelを開くスクリプトはこう書いています。
' Excel起動
Set oXlsApp = CreateObject("Excel.Application")
If oXlsApp Is Nothing Then
' Excel起動失敗
MsgBox "Excel起動失敗"
Else
' Excel起動成功
' --Excel表示(falseにすると非表示にできる)
oXlsApp.Application.Visible = true
' --ブックを開く
oXlsApp.Application.Workbooks.Open("C:\work\TEST.xlsm")
End If
これで、正常にBookが開きます。
その後スクリプトAがこれです。
Option Explicit
Dim ex, bk, i, m, ol, sh
Set ex = GetObject(,"Excel.Application")
Set bk = ex.Workbooks(1)
Set ol = CreateObject("Outlook.Application")
Set sh = bk.Worksheets("Sheet1")
For i = 2 To sh.Range("A1").End(-4121).Row
Set m = ol.CreateItemFromTemplate("C:\work\test.oft")
m.TO = sh.Cells(i,"A").Value
m.Subject = sh.Cells(i,"D").Value
m.Attachments.Add "C:\work" & sh.Cells(i,"E").Value
m.Attachments.Add "C:\work" & sh.Cells(i,"F").Value
m.Attachments.Add "C:\work" & sh.Cells(i,"G").Value
m.HTMLBody = Replace(m.HTMLBody,"□□", sh.Cells(i,"B").Value)
m.HTMLBody = Replace(m.HTMLBody,"●●", sh.Cells(i,"C").Value)
m.SaveAs"C:\work" & sh.Cells(i,"B").Value & ".msg"
Next
以上になります。
まず待機時間を疑いましたが、間に40秒待機時間を設けても
同じ結果で、待機時間でないことが分かりました。
その後、変数の開放をしていないせいかと思い、
各スクリプトで変数の開放をしましたが、
Excelを開くスクリプトの方では、
変数宣言自体がされてないと言われ、
スクリプトAにおいては、
開放について何も変化はありませんでした。。
もし、なぜなのか分かる方いましたら、
教えていただけますと幸いです。
回答2件
あなたの回答
tips
プレビュー