我正在使用
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 中的文本)将不再显示在电子邮件中。
最佳答案
地址后的第一个 header 应以 ?
开头,并且不应有互联网不安全字符。在 VBA 中,"
字符将结束字符串,并且在 VBA 认为的字符串之外会有非法代码。
将 ?
和 "
替换为正文字符串中的十六进制等效值应该可以。
尝试:
strBody = Replace(strBody, """", "%22") 'to replace the "
strBody = Replace(strBody, "?", "%3F") 'to replace the ?
在将 strBody
传递给 ShellExecute
命令之前。
您可以在此处阅读有关使用 mailto:
协议(protocol)的更多信息:https://msdn.microsoft.com/en-us/library/aa767737%28v=vs.85%29.aspx
关于vba - 使用带有 ? 的字符串来自 Visual Basic 中的 Excel 单元格内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34619102/