VBA邮件正文中strbody3与签名间多余空行的移除问题(基于Ron de Bruin的RangetoHTML函数)
VBA邮件正文中strbody3与签名间多余空行的移除问题(基于Ron de Bruin的RangetoHTML函数)
嘿,我来帮你搞定这个烦人的多余空行问题!我看你用了Ron de Bruin的RangetoHTML函数,这种空行问题大多是HTML生成时的多余标签、签名自带的空段落,或者拼接时的标签叠加导致的,咱们一步步来解决:
一、先从RangetoHTML函数源头清理多余标签
Ron的函数把表格转成HTML后,经常会在末尾自动加多余的<br>或空<p>标签,这是空行的高发区。咱们直接修改RangetoHTML函数,在读取完HTML内容后做清理:
打开你的RangetoHTML函数,在RangetoHTML = ts.readall这行之后,添加以下代码:
' 循环移除末尾多余的<br>标签 Do While Right(RangetoHTML, 4) = "<br>" RangetoHTML = Left(RangetoHTML, Len(RangetoHTML) - 4) Loop ' 移除空段落标签 RangetoHTML = Replace(RangetoHTML, "<p> </p>", "") RangetoHTML = Replace(RangetoHTML, "<p></p>", "") ' 清理末尾多余的空格 RangetoHTML = Trim(RangetoHTML)
二、调整strbody3的HTML写法
看你的strbody3开头带了个<br>,如果RangetoHTML的输出末尾已经自带换行,叠加后就会多出空行。把strbody3里的<br>删掉,改成这样:
strbody3 = "<p style=font-size:11pt;font-family:Calibri;mso-margin-top-alt:0.0pt;margin-bottom:0.0pt;'>Thanks,"
(注意你原来的代码里有个<delete>,应该是笔误,记得删掉哦)
三、清理Outlook签名自带的空行
Outlook的签名HTML经常藏着多余的空段落或样式标签(就是你Debug里看到的<w:LsdException>那些),这些也会导致空行。咱们在获取签名后先做一轮清理:
signature = OutMail.HTMLBody ' 移除签名开头的空段落 signature = Replace(signature, "<p> </p>", "") signature = Replace(signature, "<p></p>", "") ' 移除签名开头多余的换行 Do While Left(signature, 4) = "<br>" signature = Right(signature, Len(signature) - 4) Loop
四、最后补个全局清理的小技巧
如果上面的方法还没彻底解决,你可以在拼接完所有HTML后,再全局合并连续的换行标签:
Dim combinedHTML As String combinedHTML = strbody1 & strbody2 & RangetoHTML(rng) & strbody3 & signature ' 把连续的两个换行合并成一个 combinedHTML = Replace(combinedHTML, "<br><br>", "<br>") .HTMLBody = combinedHTML
另外别忘了手动检查下Outlook的签名设置——有时候签名本身在Outlook里就带了多余空行,那代码再处理也没用,先确保签名本身是紧凑的哦!
内容来源于stack exchange
相关产品推荐
相关产品推荐

