【发布时间】:2016-04-09 17:10:28
【问题描述】:
我正在使用
Range("$AC" & Right(ActiveCell.Address, 2)).Value
获取所选单元格行中AC 列的内容。单元格的内容是评论,我希望用户能够写入包含在我使用宏生成的电子邮件中。例如,到目前为止,如果您有“对学生 3 的评论”。如果单元格中没有引号,则会将其添加到电子邮件正文中。评论包含在字符串strBody 中,然后使用以下两个命令合并到电子邮件中(目标电子邮件地址存储在strTo 中):
strURL = strTo & "&Body=" & strBody
和
ShellExecute 0&, vbNullString, strURL, vbNullString, vbNullString, vbNormalFocus
目前没有问题。除非用户在 Excel 单元格的内容中使用特殊字符,例如 ? 或 "。使用? 会切断字符串的其余部分,而使用" 会产生错误,甚至无法生成电子邮件。
所以问题来了:有没有一种方法可以对抓取进行编码以格式化单元格的内容,从而忽略特殊字符?或者有没有办法让用户输入他们的评论,以便? 被视为?。注意我试过\?/?"?""?'?,甚至像Microsoft.Visual.Chr(34)这样的东西。
编辑:
@stucharo 下面的回答效果很好!谢谢。对于那些要求使用最少代码来查看发生了什么的人(这对我来说仍然是个谜,因为我只是将这些东西放在一起弗兰金斯坦):
Private Declare PtrSafe Function ShellExecute Lib "shell32.dll" _
Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long
Sub EmailStudent()
strTo = "mailto:Address@bmail.com"
strSubject = "Email Subject"
strBody1 = Range("'Sheet1'!A1")
strBody2 = Range("'Sheet1'!A2")
strBody3 = Range("'Sheet1'!A3")
strBody = strBody1 & "%0D%0A%0D%0A" & strBody2 & "%0D%0A%0D%0A" & strBody3
strBody = Replace(strBody, "?", "%3F")
strURL = strTo & "&subject=" & strSubject & "&Body=" & strBody
ShellExecute 0&, vbNullString, strURL, vbNullString, vbNullString, vbNormalFocus
End Sub
Sheet1 的 A1 A2 和 A3 中的文本应包含在电子邮件正文中。您需要运行 Outlook 客户端。我包含了对问号的修复,如果您删除“替换”命令并在 A2 中放置一个问号,则它后面的任何文本,包括 A3 中的文本,都将不再显示在电子邮件中。
【问题讨论】:
-
欢迎来到 StackOverflow,请在以后的问题中格式化您的代码并添加有助于解决 tu 问题的相关信息。此外,不需要感谢。
-
我认为
"正在使代码崩溃,因为它是一个特殊字符,而我不确定为什么?会剪切字符串的其余部分(它可能与@ 987654343@ 电子邮件对象的属性,但这是我第一次听说)。但是,如果您将单元格中的这些字符存储到变量中,则应该没有任何问题,因此我认为我们缺少代码的相关部分。我们可以举一个最小的例子来重现错误吗? -
尝试使用这里的功能之一:stackoverflow.com/questions/218181/…
-
您必须使用
ShellExecute命令来生成电子邮件吗?通过创建Outlook对象,然后创建电子邮件对象并添加正文和附件等,我取得了很多成功。从这个角度工作可能会绕过你的问题。 -
~?不起作用。对不起。