用一个string与? 从Excel中的单元格内容在Visual Basic中
我在用
Range("$AC" & Right(ActiveCell.Address, 2)).Value
以获取所选单元格的行中AC
列的内容。 单元格的内容是一个评论,我希望用户能够写入包含在我用我的macros生成的电子邮件中。 例如,如果你有“对学生3评论”。 没有在单元格中的引号,它被添加到电子邮件的正文。 该注释包含在strBody
string中,然后使用以下两个命令(目标电子邮件地址存储在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