Итак, я перестроил код сейчас, чтобы он использовал цикл для генерации файлов и отправки писем.
Вот что я получил сейчас:
Sub Maakbestanden_maandag ()
Dim Sh As Worksheet
Set Sh = ThisWorkbook.Sheets("Kopers-Maandag")
Dim Ab As Worksheet
Set Ab = ThisWorkbook.Sheets("Aanbod")
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Sheets("Aanbod").Select
Sheets("Aanbod").Copy
Cells.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A15:C15").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 14336204
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Range("D20:D49").Select
Selection.NumberFormat = "_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)"
Range("C20:C49").Select
Selection.NumberFormat = "@"
Range("E20:F49").Select
Selection.NumberFormat = "0"
Columns("E:E").ColumnWidth = 8
Columns("F:F").ColumnWidth = 6
ActiveWorkbook.BuiltinDocumentProperties("Author") = "AUTHOR NAME"
Range("G50").Select
ActiveCell.FormulaR1C1 = "=SUM(R[-30]C:R[-1]C)"
Range("G51").Select
ActiveCell.FormulaR1C1 = "=R[-1]C/12"
Dim i As Integer
Dim last_row As Long
last_row = Application.WorksheetFunction.CountA(Sh.Range("A:A"))
For i = 2 To last_row
Range("D15:H15").Select
ActiveCell.FormulaR1C1 = Sh.Range("B" & i).Value
Range("D15:H15").Select
Application.ActiveWorkbook.SaveAs Filename:=Sh.Range("C" & i).Value, _
FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
Next i
Application.DisplayAlerts = True
ActiveWindow.Close
MsgBox "Bestanden aangemaakt"
Call Verstuuremail_maandag
End Sub
и чем отправлять актуальные письма:
Sub Verstuuremail_maandag()
Dim Sh As Worksheet
Set Sh = ThisWorkbook.Sheets("Kopers-Maandag")
Dim OA As Object
Dim msg As Object
Set OA = CreateObject("Outlook.Application")
Dim i As Integer
Dim last_row As Long
last_row = Application.WorksheetFunction.CountA(Sh.Range("A:A"))
For i = 2 To last_row
Set msg = OA.createitem(0)
msg.To = Sh.Range("A" & i).Value
msg.Subject = "Sales offer"
msg.body = ""
If Sh.Range("C" & i).Value <> "" Then
msg.attachments.Add Sh.Range("C" & i).Value
End If
DoEvents
msg.send
Next i
MsgBox "E-mails voor maandag verstuurd"
Sheets("Veilprijzen").Select
End Sub
Теперь, когда я тестирую его, он работает хорошо, но все же иногда он останавливается на 2/3 пути при отправке писем (генерация файлов работает полностью каждый раз).
Когда он останавливается, выдается следующая ошибка:
VBA ошибка 5 неверный вызов процедуры или аргумент
VBA отмечает это по адресу: msg.send
Странно, но иногда мы выполняем полный прогон в один и тот же день, с тем же кодом и информацией о клиентах, а иногда это происходит не полностью.
Любая рекомендация, чтобы решить эту проблему?