gpt4 book ai didi

vba - 通过自动调整将 Excel 范围发送到电子邮件正文

转载 作者:行者123 更新时间:2023-12-03 02:02:49 25 4
gpt4 key购买 nike

我目前正在使用 Ron de Bruin's RangetoHTML函数可以通过电子邮件发送几个表。我想让这些表格自动适应 Outlook 的屏幕。

目前,我必须单击每个表格并转到布局 -> 自动调整以适应每个表格上的屏幕。我想知道这个任务是否可以以某种方式折叠到宏中。

编辑:这是我对解决方案的第一个猜测:

objMail.HTMLBody = RangetoHTML(Range("A1:G14")) & _
RangetoHTML(Range(Range("vmRange").Value)) & _
RangetoHTML(Range(Range("hpRange").Value)) & _
RangetoHTML(Range(Range("esrRange").Value))

For Each tbl In objMail.body.tables
tbl.Columns.AutoFit 'Note: This doesn't actually work
Next tbl

最佳答案

这是我对 Ron de Bruin 函数的修改版本:

Function RangetoHTMLFlexWidth(rng As Range)
' Changed by Ron de Bruin 28-Oct-2006
' Working in Office 2000-2013
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
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)
RangetoHTMLFlexWidth = ts.readall
ts.Close
RangetoHTMLFlexWidth = Replace(RangetoHTMLFlexWidth, "align=center x:publishsource=", _
"align=left x:publishsource=")

Dim startIndex As Long
Dim stopIndex As Long
Dim subString As String

'Change table width to "100%"
startIndex = InStr(RangetoHTMLFlexWidth, "<table")
startIndex = InStr(startIndex, RangetoHTMLFlexWidth, "width:") + 5
stopIndex = InStr(startIndex, RangetoHTMLFlexWidth, "'>")
subString = Left(RangetoHTMLFlexWidth, startIndex)
subString = subString & "100%"
RangetoHTMLFlexWidth = subString & Mid(RangetoHTMLFlexWidth, stopIndex)

'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

更改从注释开始:

'Change table width to "100%"

它只是找到定义表格宽度的位置并将其设置为 100%。浏览器或 Outlook 将单元格缩放到新的宽度,因此它可以完成工作,但在我看来,这是一个肮脏的黑客行为。

关于vba - 通过自动调整将 Excel 范围发送到电子邮件正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30113677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com