Как создать тело письма с выбранным диапазоном, когда у меня есть скрытые строки - PullRequest
0 голосов
/ 18 января 2019

У меня есть макрос, который генерирует электронную почту Outlook из листа Excel. Это работает нормально, когда все строки не скрыты, но генерирует пустое тело, если одна или несколько строк скрыты.

Мне нужно, чтобы строки отображались или нет на основе других входных данных из рабочей таблицы.

пытался написать код различными способами, чтобы показать только видимые ячейки, но ничего не работает. Я считаю, что проблема с:

Set OutBody = Sheets("Email1").Range("A2:H24").SpecialCells(xlCellTypeVisible)

или, может быть, просто функция RangetoHTML.

Откройте для других предложений по скрытию или удалению нежелательных строк перед созданием электронной почты или созданием тела сообщения другим способом, если оно работает со скрытыми строками.

Sub RtoGemail()
'
' RtoGemail Macro
' 
'


Dim OutApp As Object
Dim OutMail As Object
Dim OutBody As Range
Dim Sendto As Range


With Application
.EnableEvents = False
.ScreenUpdating = False
End With


Set OutBody = 
Sheets("Email1").Range("A2:H24").SpecialCells(xlCellTypeVisible)

Set Sendto = Worksheets("Rtl to Grp").Range("D15")

On Error Resume Next


Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)

With OutMail
    .SentOnBehalfOfName = "fakename"
    .To = "" & Sendto  'Change email address here'
    .Subject = "" & Worksheets("Email1").Range("A1")
    .HTMLBody = RangetoHTML(OutBody)
    .display
    End With

Set OutMail = Nothing
Set OutApp = Nothing

On Error GoTo 0

With Application
.EnableEvents = True
.ScreenUpdating = True
End With

End Sub

Function RangetoHTML(OutBody As Range)
' Changed by Ron de Bruin 28-Oct-2006
' Working in Office 2000-2010
Dim fso As Object
Dim ts As Object
Dim TempFile As String
Dim TempWB As Workbook

TempFile = Environ$("temp") & "/" & Format(Now, "dd-mm-yy h-mm-ss") & 
".htm"

'Copy the range and create a new workbook to past the data in
OutBody.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

Должно генерировать тело письма с диапазоном A2: H24, даже если строки скрыты. Вместо этого генерирует пустое тело письма.

...