【问题标题】:nextline vba with excel generated emailsnextline vba 与 excel 生成的电子邮件
【发布时间】:2016-04-25 06:40:02
【问题描述】:

上网后,我仍然遇到在 excel 生成的电子邮件中插入新行的问题。

我尝试了以下代码:

 Email = "person@email.com"
 Subj = "Subject"
 body = "Hello Person," & vbCr & _
 "message" & vbCr & _
 "Example: " & vbCr & _
 "another example" & vbCr & _
 "another example" & vbCr & _
 "Thank you. "

 body = "Hello Person," & vbCr & _
 body = body & "message" & vbCr & _
 etc etc

我试过了

 body = "Hello Person," & vbNewline & _
 body = body & "message" & vbNewline & _
 etc etc

第一个示例运行良好,但没有多余的行。第二个例子抛出不匹配错误

知道问题是什么吗?

生成电子邮件的代码

 URL = "mailto:" & Email & "?subject=" & Subj & "&body=" & Msg & "        " & body
 ShellExecute 0&, vbNullString, URL, vbNullString, vbNullString, vbNormalFocus

 Private Declare 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

【问题讨论】:

  • 不匹配是因为语法没有意义。 & _ 基本上是 IDE 为用户创建换行符以获得更好格式的方式。它在语法上与 body="Hello Person, " & vbNewLine & body = body & "message" 相同。如果您在第一行末尾取出 & _,它会起作用(它会消除错误)。
  • 它确实消除了错误,但没有解决没有额外行的问题。感谢您指出这一点
  • 您可以发布您预期输出的屏幕截图吗? @Slubee 发布的答案在每行之后添加了一个换行符。您是否期望“Hello Person”和“message”之间有一个空行?如果是这样,添加另一个 vbNewLine,如下所示:"Hello Person," & vbNewLine & vbNewLine & _
  • 编辑了原始帖子以包含屏幕截图

标签: vba excel email


【解决方案1】:

使用 vbNewline 添加行。

“你好人”& Vbnewline &

【讨论】:

  • try body = "Hello Person," & vbnewline & _ "message" & vbnewline &_ ets 等
  • try body = "Hello Person," & vbnewline & "message" & vbnewline & etc
  • @DougCoats 你能发布一个你期望的 body 变量格式的模型吗?
【解决方案2】:

这将与@Slubee 的答案非常相似,但我认为它更完整一些,希望能帮助您查明您的问题。试试这个代码:

Option Explicit

Sub test()
    Dim email As String, _
        subj As String, _
        body As String

    email = "Foo@boo.com"
    subj = "Subject goes here"
    body = "Hello Person," & vbNewLine & _
            "message" & vbNewLine & _
            "Example:" & vbNewLine & _
            "another example" & vbNewLine & _
            "another example" & vbNewLine & _
            "Thank you. "

    MsgBox body

    body = "Hello Person," & vbCr & _
            "message" & vbCr & _
            "Example:" & vbCr & _
            "another example" & vbCr & _
            "another example" & vbCr & _
            "Thank you. "

    MsgBox body
End Sub

您会看到它们产生了相同的东西(并且它与您在屏幕截图中输入的内容相匹配)。我的观点是,我认为问题在于您对 body 变量所做的事情,而不是 Excel / VBA 构造字符串的方式。

下面是一些使用 Outlook 创建电子邮件的代码,它给出了预期的结果。如果您不使用 Outlook,则必须说明您使用什么程序来生成电子邮件:

Option Explicit

    Sub test()
        Dim email As String, _
            subj As String, _
            body As String

        Dim OutApp As Object, _
            OutMail As Object

        email = "Foo@boo.com"
        subj = "Subject goes here"

        body = "Hello Person," & vbCr & _
                "message" & vbCr & _
                "Example:" & vbCr & _
                "another example" & vbCr & _
                "another example" & vbCr & _
                "Thank you. "

        Set OutApp = CreateObject("Outlook.Application")
        Set OutMail = OutApp.CreateItem(0)

        On Error Resume Next
            With OutMail
                .To = email
                .CC = ""
                .BCC = ""
                .Subject = subj
                .body = body
                .Display
            End With
        On Error GoTo 0

        Set OutMail = Nothing
        Set OutApp = Nothing
    End Sub

【讨论】:

  • 我认为问题在于 vba 如何处理电子邮件的实际正文而不是字符串。我可能需要调查一下(或者调查一下前景 vba 的东西)
  • @DougCoats 您可以发布您的 Outlook 代码(或您用于生成电子邮件的代码)吗?
  • @DougCoats 您使用的是 Outlook 或 Outlook express,还是一些基于 Web 的版本?
  • outlook 2013。我也在顶部添加了私有功能
  • @DougCoats 试试我在第二个块中添加的代码,看看它对你有用。它适用于我(也使用 Outlook 2013)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-26
  • 2019-09-03
  • 2016-02-17
  • 2018-12-30
  • 1970-01-01
相关资源
最近更新 更多