用一个string与? 从Excel中的单元格内容在Visual Basic中

我在用

Range("$AC" & Right(ActiveCell.Address, 2)).Value 

以获取所选单元格的行中AC列的内容。 单元格的内容是一个评论,我希望用户能够写入包含在我用我的macros生成的电子邮件中。 例如,如果你有“对学生3评论”。 没有在单元格中的引号,它被添加到电子邮件的正文。 该注释包含在strBodystring中,然后使用以下两个命令(目标电子邮件地址存储在strTo )合并到电子邮件中:

 strURL = strTo & "&Body=" & strBody 

 ShellExecute 0&, vbNullString, strURL, vbNullString, vbNullString, vbNormalFocus 

到目前为止没有问题。 除非用户使用特殊字符,如?"在Excel单元格的内容中,使用”切断string的其余部分而不使用"创build错误,甚至无法生成电子邮件。

所以这里是一个问题:有没有一种方法可以编写格式化单元格的内容,以便忽略特殊字符? 或者有没有一种方法,我可以让用户键入他们的评论,以便? 只是被视为一个? 。 注意我试过\? /? "?" "? '?甚至像Microsoft.Visual.Chr(34)

编辑:

@stucharo的答案下面的工作很好! 谢谢。 对于那些要求最小代码的人来看看发生了什么事情(对我来说,这仍然是一个谜,因为我只是Frankinstein这个东西在一起)这里是:

 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客户端。 如果删除了replace命令并在A2中放置了一个问号,那么后面的任何文本(包括A3中的文本)都不会再显示在电子邮件中。

地址之后的第一个标题应该在前面? 应该没有互联网不安全的字符。 在VBA中, "字符将结束string,并且在VBA认为是string之外会出现非法代码。

replace?"与他们的六angular等量在你的身体串应该工作。

尝试:

 strBody = Replace(strBody, """", "%22") 'to replace the " strBody = Replace(strBody, "?", "%3F") 'to replace the ? 

在将strBody传递给ShellExecute命令之前。

你可以在这里阅读更多关于使用mailto:协议: https : //msdn.microsoft.com/en-us/library/aa767737%28v=vs.85%29.aspx