При массовой рассылке писем КА использую функцию RangeToHtml by Ron de Bruin. Проблема в том, что при копировании таблицы в тело письма код добавляет пустую строчку без видимых границ в конец таблицы. При прорисовке сетки выглядит это примерно так: Скрин
Возможно ли каким-либо образом удалить лишнюю строчку?
Стандартный код функции RangeToHtml :
Скрытый текст
Function RangetoHTML(rng As Range) ' Changed by Ron de Bruin 28-Oct-2006 ' Working in Office 2000-2016 Dim fso As Object Dim ts As Object Dim TempFile As String Dim TempWB As Workbook
'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
'Publish the sheet to a htm file With TempWB.PublishObjects.Add( _ SourceType:=xlSourceRange, _ Filename:=TempFile, _ Sheet:=TempWB.Sheets(1).Name, _ Source:=TempWB.Sheets(1).UsedRange.Address, _ HtmlType:=xlHtmlStatic) .Publish (True) End With
'Read all data from the htm file into RangetoHTML Set fso = CreateObject("Scripting.FileSystemObject") Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2) RangetoHTML = ts.readall ts.Close RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _ "align=left x:publishsource=")
'Close TempWB TempWB.Close savechanges:=False
'Delete the htm file we used in this function Kill TempFile
Set ts = Nothing Set fso = Nothing Set TempWB = Nothing End Function
neqkeet, может, функции передается диапазон с лишней строкой, т.е. проблема в определении последней занятой строки диапазона? Приложите файл с данными и кодом вызова функции RangeToHtml.
Однако удалить через Replace их не получается. Пытаюсь удалить строчки <![if supportMisalignedColumns]> и <![endif]> и все что между ними следующим кодом.
neqkeet, функция Replace не работает с подстановочными знаками. Можно с помощью Instr найти фрагмент "<![if supportMisalignedColumns]>", после него фрагмент "<![endif]>" и скомбинировать части строки. Или использовать регулярные выражения. А вообще, если таблица не содержит сложного форматирования, для преобразования в HTML можно использовать функции на VBA, которые генерируют код без этих всяких метаданных, например http://dailydoseofexcel.com/archives/2015/02/13/converting-an-excel-range-to-html-the-hard-way/