vba - 使用带有 ? 的字符串来自 Visual Basic 中的 Excel 单元格内容

标签 vba excel

我正在使用

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/

相关文章:

vba - 如何使用 VLOOKUP 并使用 VBA 从其他工作表获取详细信息

excel - 找出包含两个特定值的行的编号?

c# - 将超链接添加到 Excel 工作表 closedxml

vba - VBA 的隐藏陷阱

vba - 使用公共(public)列合并两个 Excel 文件

excel - 搜索特定单词并删除所有不包含完全匹配的行

excel - 使用 Excel VBA 将 Excel 工作簿中的 OLEObject 内容放入 Outlook 电子邮件正文

excel - excel中的多轴折线图

vba - 查找使用连接的位置 Excel VBA

Excel/Excel VBA 剪切和复制重置单元格名称