Из комментария ОП:
При запуске макроса получено сообщение об ошибке «Ошибка во время выполнения» -2147024894 (80070002) ': не удается найти этот файл. Проверьте путь и файлимя правильное. "
Это потому, что в вашей функции RangeToHTML
вы создаете две временные книги, но закрываете только одну.Поэтому, как только RangeToHTML
вернется, ваш ActiveWorkbook
будет ссылаться на оставшуюся временную рабочую книгу, а не на оригинал.Поскольку он не был сохранен, его свойство .FullName
еще не имеет значения, поэтому, таким образом, возникает ошибка «Не удается найти этот файл».
В RangeToHTML
, избавьтесь от одного из этих разделов, где выскопируйте / вставьте, и ваша проблема будет решена:
'Copy the range and create a new workbook to past the data in
rng.Copy
Set TempWB = Workbooks.Add(1)
With TempWB.Sheets(1)
.Cells(1).PasteSpecial Paste:=8
.Cells(1).PasteSpecial xlPasteValues, , False, False
.Cells(1).PasteSpecial xlPasteFormats, , False, False
.Cells(1).Select
Application.CutCopyMode = False
On Error Resume Next
.DrawingObjects.Visible = True
.DrawingObjects.Delete
On Error GoTo 0
End With
'Copy the range and create a new workbook to past the data in
rng.Copy
Set TempWB = Workbooks.Add(1)
With TempWB.Sheets(1)
.Cells(1).PasteSpecial Paste:=8
.Cells(1).PasteSpecial xlPasteValues, , False, False
.Cells(1).PasteSpecial xlPasteFormats, , False, False
.Cells(1).Select
Application.CutCopyMode = False
On Error Resume Next
.DrawingObjects.Visible = True
.DrawingObjects.Delete
On Error GoTo 0
End With
Вы также должны в своей процедуре SendEmailOutlook
вообще не использовать ActiveWorkbook
, так как, как вы можете видеть, это может сбить вас с толку, если выне осторожныВсегда лучше установить и работать со ссылкой непосредственно на рабочую книгу.
Итак, что-то вроде:
Dim wb as Workbook
Set wb = Workbooks("Your Workbook Name")
или:
Dim wb as Workbook
Set wb = ActiveWorkbook
в началеSendEmailOutlook
, а затем используйте wb
везде, где вы в данный момент используете ActiveWorkbook
в другом месте процедуры.