为什么有一条线添加到.Body?

时间:2017-03-28 14:09:57

标签: vba batch-file

我想使用Outlook规则在Windows中运行批处理文件,该文件将主题和电子邮件正文作为输入(这意味着两个参数)。
如果我直接以C:\ Users \ me \ Desktop \ firstplink.bat" subjectPartA subjectPartB" " bodyA bodyB",它做的正确。有两个参数,在引号中。我有A和B所以在主语和身体中至少有2个单词。

我的代码添加了一行搞乱批处理文件。

Sub firstplink(item As Outlook.MailItem)
    strSubject = item.Subject
    MsgBox strSubject
    strBody = item.Body
    MsgBox strBody
    strProgramName = "C:\Users\me\Desktop\firstplink.bat"
    strAll = strSubject & " " & strBody
    all = """" & strProgramName & """ """ & strSubject & """ """ & strBody & """"
    MsgBox all
    Call Shell("""" & strProgramName & """ """ & strSubject & """ """ & strBody & """")
End Sub

Sub TestScript()
    Dim testMail As MailItem
    Set testMail = Application.CreateItem(olMailItem)
    testMail.Subject = "Test subject"
    testMail.Body = "bcTest bbody bb cxcvaa"
    Project1.Module1.firstplink testMail
End Sub

2 个答案:

答案 0 :(得分:2)

如果没有一个,则Outlook.MailItem上的VBA开销会向Item.Body追加vbCRLF。由此代码证明

Option Explicit

Sub firstplink(item As Outlook.MailItem)
    Dim strSubject As String, strBody As String, strAll As String, strProgramName As String
    Dim all As String
    strSubject = item.Subject
    MsgBox strSubject
    Debug.Print Asc(Right(item.Body, 1))
    Debug.Print Asc(Right(item.Body, 2))
    strBody = item.Body
    MsgBox strBody
    strProgramName = "C:\Users\me\Desktop\firstplink.bat"
    strAll = strSubject & " " & strBody
    all = """" & strProgramName & """ """ & strSubject & """ """ & strBody & """"
    MsgBox all
    Call Shell("""" & strProgramName & """ """ & strSubject & """ """ & strBody & """")
End Sub

Sub TestScript()
    Dim testMail As MailItem
    Set testMail = Application.CreateItem(olMailItem)
    testMail.Subject = "Test subject"
    testMail.Body = "bcTest bbody bb cxcvaa"
    Project1.Module1.firstplink testMail
End Sub

立即窗口在两个Debug.Print上报告10然后13。如果手动添加vbCrLF(例如testMail.Body = "bcTest bbody bb cxcvaa" & vbCrLf),则第二个vbCrLf 添加。

这必须与预期终止item.body的vbCrLf有关,如果它不存在则开销会增加一个以避免崩溃。

答案 1 :(得分:1)

如果尚未存在,则Outlook始终会在正文末尾添加vbCrLf

您可以通过将MsgBox strBody替换为(例如)MsgBox strBody & "_"

,轻松地在代码中显示它

在您的示例中,您只需使用以下代码删除它:

Sub firstplink(item As Outlook.MailItem)
    strSubject = item.Subject
    strBody = Replace(item.Body, vbCrLf, "")
    Call Shell("""" & strProgramName & """ """ & strSubject & """ """ & strBody & """")
End Sub