【发布时间】:2016-11-14 21:54:24
【问题描述】:
我从未使用过 Outlook VBA (2010),但我的经理要求我创建一个发送 IT 请求和 IS 请求的用户表单。我创建了自定义表单,在其中收集所有文本字段并将文本打印到单个文本框中。
此操作均在Sub CommandButton1_Click() 中定义,以Send() 结尾。在 sub 中,我对所有文本框都有类似的内容:
Set Sj =Item.GetInspector.ModifiedFormPages("P.2").Controls("Subject_Text")
Set YNbox = Item.GetInspector.ModifiedFormPages("P.2").Controls("YNBox")
Set Rbox = Item.GetInspector.ModifiedFormPages("P.2").Controls("ReasonBox")
我想知道如何将“P.2”中的文本粘贴到“消息”页面的消息区域?
这里是打印到单个文本框的代码 sn-p:
FinalBox.Text = "Subject: " & Sj.Text & vbCrLf & _
vbCrLf & "Can work around the issue?: " & YNbox.Text & _
vbCrLf & "Reason For Ticketing: " & Rbox.Text & _
vbCrLf & "Department: " & Dbox.Text & _
vbCrLf & "Impact: " & Ibox.Text & _
vbCrLf & "Urgency: " & Ubox.Text & _
vbCrLf & "System/Machine Number: " & Mbox.Text & _
vbCrLf & "Was trying to accomplish: " & Abox.Text & _
vbCrLf & "Has it occured before?: " & Bbox.Text & _
vbCrLf & "First Noticed: " & Tbox.Text & _
vbCrLf & "Others affected by the issue: " & Affbox.Text & _
vbCrLf & "Additonal Comments: " & Addbox.Text
那么,我该如何获取这个并将其附加到消息页面中的实际消息字段中?
.
非常感谢!!
附:我一直遇到MailItem.body 的问题,每当我创建一个对象时,例如:
Dim objMsg As Object,
我收到一条错误消息,提示“预期语句结束”...我了解 VB 和 VBA 不同,但我认为它不会让我这么头疼。
编辑:
您好 dbMitch 和 Tony Dallimore,感谢您帮助我澄清我的问题。就像我提到的,我只是 VBA 的初学者,我只是想
`Sub Commandbutton
Set Sj = Item.GetInspector.ModifiedFormPages("P.2").Controls("Subject_Text")
Set YNbox = Item.GetInspector.ModifiedFormPages("P.2").Controls("YNBox")
Set Rbox = Item.GetInspector.ModifiedFormPages("P.2").Controls("ReasonBox")
Set Dbox = Item.GetInspector.ModifiedFormPages("P.2").Controls("DepartmentDropbox")
Set Mbox = Item.GetInspector.ModifiedFormPages("P.2").Controls("MachineBox")
Set Ibox = Item.GetInspector.ModifiedFormPages("P.2").Controls("ImpactBox")
Set Ubox = Item.GetInspector.ModifiedFormPages("P.2").Controls("UrgencyBox")
Set Abox = Item.GetInspector.ModifiedFormPages("P.2").Controls("AccomplishBox")
Set Bbox = Item.GetInspector.ModifiedFormPages("P.2").Controls("BeforeText")
Set Tbox = Item.GetInspector.ModifiedFormPages("P.2").Controls("Timebox")
Set Affbox = Item.GetInspector.ModifiedFormPages("P.2").Controls("AffectedBox")
Set Addbox = Item.GetInspector.ModifiedFormPages("P.2").Controls("AdditionalBox")
Set Tbox8 = Item.GetInspector.ModifiedFormPages("P.2").Controls("TextBox8")
Set MESBOX = Item.GetInspector.ModifiedFormPages("Message").Controls("Message")
Tbox8.Text = "Subject: " & Sj.Text & vbCrLf & _
vbCrLf & "Can work around the issue?: " & YNbox.Text & _
vbCrLf & "Reason For Ticketing: " & Rbox.Text & _
vbCrLf & "Department: " & Dbox.Text & _
vbCrLf & "Impact: " & Ibox.Text & _
vbCrLf & "Urgency: " & Ubox.Text & _
vbCrLf & "System/Machine Number: " & Mbox.Text & _
vbCrLf & "Was trying to accomplish: " & Abox.Text & _
vbCrLf & "Has it occured before?: " & Bbox.Text & _
vbCrLf & "First Noticed: " & Tbox.Text & _
vbCrLf & "Others affected by the issue: " & Affbox.Text & _
vbCrLf & "Additonal Comments: " & Addbox.Text
Send
End Sub
`
我在网上找到的 Sub 假设要获取一个项目并将文本附加到消息正文中。每次我尝试声明对象的类型时似乎都会出现错误(例如 ____ As _____)。我不知道如何修改它以使其适合我的代码,但错误是在Dim objItem As Object 引发的,上面写着
预期语句结束
Sub TestAppendText()
Dim objItem As Object
Dim thisMail As Outlook.MailItem
'On Error Resume Next
Set objItem = Application.ActiveExplorer.Selection(1)
If Not objItem Is Nothing Then
If objItem.Class = olMail Then
Set thisMail = objItem
Call AppendTextToMessage(thisMail, "Some text added at " & Now())
End If
End If
Set objItem = Nothing
Set thisMail = Nothing
End Sub
Sub AppendTextToMessage(ByVal objMail As Outlook.MailItem, ByVal strText As String)
Dim objCDO As MAPI.Session
Dim objMsg As MAPI.Message
Dim objField As MAPI.Field
Set objCDO = CreateObject("MAPI.Session")
objCDO.Logon "", "", False, False
If Not objMail.EntryID = "" Then
Set objMsg = objCDO.GetMessage(objMail.EntryID, _
objMail.Parent.StoreID)
objMsg.Text = objMsg.Text & vbCrLf & strText
objMsg.Update True, True
Set objField = objMsg.Fields(CdoPR_RTF_COMPRESSED)
If Not objField Is Nothing Then
objField.Delete
objMsg.Update True, True
End If
Set objField = Nothing
Set objField = objMsg.Fields(CdoPR_RTF_SYNC_BODY_COUNT)
If Not objField Is Nothing Then
objField.Delete
objMsg.Update True, True
End If
Else
strMsg = "You must save the item before you add text. " & _
"Do you want to save the item now?"
intAns = MsgBox(strMsg, vbYesNo + vbDefaultButton1, "Append Text to Message")
If intAns = vbYes Then
Call AppendTextToMessage(objMail, strText)
Else
Exit Sub
End If
End If
Set objMsg = Nothing
objCDO.Logoff
Set objCDO = Nothing
End Sub
我也尝试过使用 CDO 对象,但它给了我一个错误,上面写着
ActiveX 组件无法创建对象:'CDONTS.NewMail'
Set Item1 = Item.MessageClass
Set objCDONTS = CreateObject ("CDONTS.NewMail")
objCDONTS.Body = Tbox8.Text
Item1.Message = "Hi"
如果这对其他人来说似乎很简单,我深表歉意。我在 VBA/VBScript 和 Outlook 设计方面只有 0 经验。这就是我在这里学习的原因!
【问题讨论】:
-
听起来你有几个问题,任何人都可以调试和解决,我们需要在上下文中查看代码 - mailitem.body 和
dim objMsg as Object之间的关系不存在。在您同时使用两者的地方显示您的代码 - 并确保您的代码首先编译。如果它没有编译 - 突出显示哪一行 -
代码中的任何内容都不会创建邮件项目或填充其属性,例如收件人和主题。您应该可以毫不费力地找到演示解决方案那部分的代码。邮件项目可以有一个文本正文(字符串属性 Body)和/或一个 Html 正文(字符串属性 HtmlBody)。您必须连接所有字段才能创建这些属性之一。您的 FinalBox.Text 将作为文本正文。或者,您可以在这些字段周围放置一个 Html 表格来创建一个 Html 正文。
-
您希望用户选择宏将更新的邮件项目吗?我原以为创建新消息更容易。这条消息是发给固定的收件人,例如“ITDept@Company.com”,还是在某个地方有一个列表?
-
理想情况下,最终用户将打开表单,填写自定义表单文本框,然后将这些文本发送给固定的收件人,然后再发送给 IT 部门。第一个子命令CommandButton1_Click() 位于自定义表单的末尾,最终用户将单击它以激活信息收集并发送它。我需要配置如何将所有文本框附加到消息正文的原因是因为我们的票务系统在创建票证时只读取消息正文。
-
我不明白您为什么要更新用户选择的现有电子邮件,而不是创建新电子邮件的宏。
标签: vba vbscript outlook outlook-2010