title: Run-Time Error (Send Mail from Spreadsheet)
body: <p>I have used Rob De Bruin's 'send range as mail' code to send out daily reports to the relevant people. After using this code for a few months it has broke and gives me a run-time error. Specifically during the cleanup 'cws.delete'.</p>
  
  <p>I cant seem to debug and solve (code below):</p>
  
  <pre><code>Sub Send_Row_Or_Rows_Attachment_1()
  
      Dim OutApp As Object
      Dim OutMail As Object
      Dim rng As Range
      Dim Ash As Worksheet
      Dim Cws As Worksheet
      Dim Rcount As Long
      Dim Rnum As Long
      Dim FilterRange As Range
      Dim FieldNum As Integer
      Dim mailAddress As String
      Dim NewWB As Workbook
      Dim TempFilePath As String
      Dim TempFileName As String
      Dim FileExtStr As String
      Dim FileFormatNum As Long
  
  
      On Error GoTo cleanup
  
      Set OutApp = CreateObject("Outlook.Application")
  
      With Application
          .EnableEvents = False
          .ScreenUpdating = False
      End With
  
      'Set filter sheet, you can also use Sheets("MySheet")
      Set Ash = Sheets("Sheet3")
  
      'Set filter range and filter column (column with names)
      Set FilterRange = Ash.Range("A1:P" &amp; Ash.Rows.Count)
      FieldNum = 10    'Filter column = A because the filter range start in column A
  
      'Add a worksheet for the unique list and copy the unique list in A1
      Set Cws = Worksheets.Add
      FilterRange.Columns(FieldNum).AdvancedFilter _
              Action:=xlFilterCopy, _
              CopyToRange:=Cws.Range("A1"), _
              CriteriaRange:="", Unique:=True
  
      'Count of the unique values + the header cell
      Rcount = Application.WorksheetFunction.CountA(Cws.Columns(1))
  
      'If there are unique values start the loop
      If Rcount &gt;= 2 Then
          For Rnum = 2 To Rcount
  
              'Look for the mail address in the MailInfo worksheet
              mailAddress = ""
              On Error Resume Next
              mailAddress = Application.WorksheetFunction. _
                  VLookup(Cws.Cells(Rnum, 1).Value, _
                            Worksheets("Mailinfo").Range("A1:B" &amp; _
                                  Worksheets("Mailinfo").Rows.Count), 2, False)
              On Error GoTo 0
  
  
              If mailAddress &lt;&gt; "" Then
  
                  'Filter the FilterRange on the FieldNum column
                  FilterRange.AutoFilter Field:=FieldNum, _
                                         Criteria1:=Cws.Cells(Rnum, 1).Value
  
                  'Copy the visible data in a new workbook
                  With Ash.AutoFilter.Range
                      On Error Resume Next
                      Set rng = .SpecialCells(xlCellTypeVisible)
                      On Error GoTo 0
                  End With
  
                  Set NewWB = Workbooks.Add(xlWBATWorksheet)
  
                  rng.Copy
                  With NewWB.Sheets(1)
                      .Cells(1).PasteSpecial Paste:=8
                      .Cells(1).PasteSpecial Paste:=xlPasteValues
                      .Cells(1).PasteSpecial Paste:=xlPasteFormats
                      .Cells(1).Select
                      Application.CutCopyMode = False
                  End With
  
                  'Create a file name
                  TempFilePath = Environ$("temp") &amp; "\"
                  TempFileName = "Daily Debit Balances" _
                               &amp; " " &amp; Format(Now, "dd-mmm-yy h-mm-ss")
  
                  If Val(Application.Version) &lt; 12 Then
                      'You use Excel 97-2003
                      FileExtStr = ".xls": FileFormatNum = -4143
                  Else
                      'You use Excel 2007-2016
                      FileExtStr = ".xlsx": FileFormatNum = 51
                  End If
  
                  'Save, Mail, Close and Delete the file
                  Set OutMail = OutApp.CreateItem(0)
  
                  With NewWB
                      .SaveAs TempFilePath &amp; TempFileName _
                            &amp; FileExtStr, FileFormat:=FileFormatNum
                      On Error Resume Next
  
                      Call AddAzureLabel(OutMail, "Restricted - Internal")
                      With OutMail
                          .To = mailAddress
                          .Subject = "Daily Balances Report"
                          .Attachments.Add NewWB.FullName
                          .Body = "Hi," &amp; vbCrLf &amp; vbCrLf &amp; "Please find attached your daily balances." &amp; vbCrLf &amp; vbCrLf &amp; "Kind regards," &amp; vbCrLf &amp; vbCrLf &amp; "Sam"
                          .Display  'Or use Send
                      End With
                      On Error GoTo 0
                      .Close savechanges:=False
                  End With
  
                  Set OutMail = Nothing
                  Kill TempFilePath &amp; TempFileName &amp; FileExtStr
              End If
  
              'Close AutoFilter
              Ash.AutoFilterMode = False
  
          Next Rnum
      End If
  
  cleanup:
      Set OutApp = Nothing
      Application.DisplayAlerts = False
      Cws.Delete
      Application.DisplayAlerts = True
  
      With Application
          .EnableEvents = True
          .ScreenUpdating = True
      End With
  </code></pre>
  
  <p>Any help on this? CWS.Delete is where I get stuck using F8 also. Everything was working fine up until this point.</p>