我想使用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
答案 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