VBA调用Outlook发邮件:单元格值前缀异常问题求助
解决VBA邮件中单元格值重复添加前缀的问题
看起来你的问题出在单元格C6(即代码里的WS.Cells(6,3))的实际存储值和你在Excel界面看到的显示值不一致,或者是单元格内容被重复添加了前缀导致的。以下是具体的排查和解决方法:
先排查问题根源
首先确认单元格的真实内容:
- 打开Excel,选中C6单元格,看顶部的编辑栏里显示的内容是不是已经有多个
ACCT:前缀?有时候Excel的单元格格式会隐藏部分内容,但实际存储的值是完整的。 - 或者在VBA代码里临时加一行调试代码:
Debug.Print WS.Cells(6,3).Value,然后打开VBA编辑器的立即窗口(按Ctrl+G),查看输出的内容——这会直接显示单元格的真实存储值。
解决方案
根据排查结果,选择对应的解决方式:
方案1:获取单元格的显示文本(适合格式隐藏前缀的情况)
如果编辑栏里的真实值是正常的Zeer Dringend,但单元格用了自定义格式(比如"ACCT:"@)导致显示带前缀,那可以把代码里的.Value改成.Text,这样会获取你在Excel界面看到的显示内容:
strbody = "<font size=""3"" face=""Calibri"">" & _ "Beste Collega,<br><br>" & _ "Een nieuwe retour zending registratie werd aangemaakt met urgentie: <B>" & WS.Cells(6, 3).Text & "</B>.<br>" & _ "Het pakket nummer is <B>" & WS.Cells(22, 3).Value & "</B>.<br><B> " & _ "</B><br><br>In geval van vragen gelieve contact op te nemen." & _ "<br><br> Met vriendelijke groeten, </font>"
方案2:清理重复前缀(适合真实值带重复前缀的情况)
如果单元格的真实存储值确实是ACCT:ACCT:ACCT:Zeer Dringend,那可以用VBA代码批量去掉所有开头的ACCT:前缀:
Dim urgentie As String urgentie = WS.Cells(6, 3).Value ' 循环去掉所有开头的"ACCT:"前缀 Do While Left(urgentie, 5) = "ACCT:" urgentie = Mid(urgentie, 6) ' 从第6个字符开始取内容 Loop ' 然后在邮件正文中使用清理后的变量 strbody = "<font size=""3"" face=""Calibri"">" & _ "Beste Collega,<br><br>" & _ "Een nieuwe retour zending registratie werd aangemaakt met urgentie: <B>" & urgentie & "</B>.<br>" & _ "Het pakket nummer is <B>" & WS.Cells(22, 3).Value & "</B>.<br><B> " & _ "</B><br><br>In geval van vragen gelieve contact op te nemen." & _ "<br><br> Met vriendelijke groeten, </font>"
避免重复问题的建议
如果是因为之前运行宏时不小心给C6单元格重复添加了前缀,那要检查你的代码里有没有修改C6值的逻辑,确保每次运行宏不会额外给单元格加前缀。
内容的提问来源于stack exchange,提问作者user12187248
相关产品推荐
相关产品推荐

