电子邮件签名 - 用于Word的VBscript,带有表格

时间:2016-01-25 16:43:16

标签: email vbscript ms-word

我正在尝试设置公司签名,然后使用GPO实现它。

这就是我想要完成的事情:

John Hancock | Paralegal | Company, PC
<Logo (to the left of text)> 60 Test Street | PO Box 1389 | Testing, PA 19820 
Phone: 555.555.5555| Fax: 555.555.5555 | Email: testing@testing.com (need this hyperlinked)

编辑:评论中的其他信息。

我正在尝试为表格第二行中每个特定行的文本设置不同的属性(字体大小,字体类型,粗体等)。例如:测试文本(这是粗体和Calibri) - 测试文本2(这不是粗体和Arial)。当我按原样运行脚本时,我会在第一列的左侧获得徽标,在第二列中获得徽标右侧的文本行。我无法弄清楚的是如何在第一行的正下方添加另一行文本,并让该行文本显示不同的字体属性等。

这是我到目前为止的代码:

Set objSysInfo = CreateObject("ADSystemInfo")

Set WshShell = CreateObject("WScript.Shell")

strUser = objSysInfo.UserName
Set objUser = GetObject("LDAP://" & strUser)

strName = objUser.FullName
strFirst = objUser.FirstName
strLast = objUser.LastName
strInitials = objUser.Initials
strOffice = objUser.physicalDeliveryOfficeName
strPOBox = objUser.postOfficeBox
strTitle = objUser.Description
strCred = objUser.info
strStreet = objUser.StreetAddress
strLocation = objUser.l
strPostCode = objUser.PostalCode
strPhone = objUser.TelephoneNumber
strMobile = objUser.Mobile
strFax = objUser.FacsimileTelephoneNumber
strEmail = objUser.mail
strCompany = objUser.Company


Const NUMBER_OF_ROWS = 1
Const NUMBER_OF_COLUMNS = 2

Set objWord = CreateObject("Word.Application")
Set objDoc = objWord.Documents.Add()
Set objSelection = objWord.Selection
Set objEmailOptions = objWord.EmailOptions
Set objSignatureObject = objEmailOptions.EmailSignature

Set objSignatureEntries = objSignatureObject.EmailSignatureEntries

Set objRange = objDoc.Range()
objDoc.Tables.Add objRange, NUMBER_OF_ROWS, NUMBER_OF_COLUMNS
Set objTable = objDoc.Tables(1)

Set objShape = objTable.Cell(1, 1).Range.Hyperlinks.Add(objSelection.InlineShapes.AddPicture("\\eg-fileserver\admin space\signature\logo.jpg"), "http://www.eastburngray.com",,,"")
objTable.Columns(1).Width = 20
objTable.Columns(2).Width = 320
objTable.Cell(1, 2).Range.Font.Bold = True
objTable.Cell(1, 2).Range.Font.Name = "Calibri"
objTable.Cell(1, 2).Range.Font.Size = 10
objTable.Range.ParagraphFormat.SpaceAfter = 0
objTable.Cell(1, 2).Range.Text = strFirst & strInitials & strLast & " | " & strOffice & " | " & strCompany

Set objSelection = objDoc.Range()

objSignatureEntries.Add "Full Signature", objSelection
objSignatureObject.NewMessageSignature = "Full Signature"

objDoc.Saved = True
objWord.Quit

1 个答案:

答案 0 :(得分:0)

在Word中添加具有各种格式的文本的关键是使用Range对象。您可以将范围视为不可见的选择,主要区别在于您可以根据需要使用多个Range对象 - 只能有一个选择。更改格式的技巧是“折叠”范围(想象它就像按向右或向左箭头键到闪烁的“点”,然后继续键入)。

编辑注意:基于bibadia的猜测,这实际上是关于VBScript和而不是VBA 我已经改变了你的问题中的标签,并且正在编辑我的答案以适应VBScript。 VBScript不能使用特定于Word的对象声明和枚举,因此我删除了“Dim As”并将所有wdEnum替换为Integer等效值。

使用您的代码作为起点,方法可能如下所示:

Dim rngCell 
Set rngCell = objTable.Cell(1,2).Range
rngCell.ParagraphFormat.SpaceAfter = 0
rngCell.Text = strFirst & strInitials & strLast & " | " & _
               strOffice & " | " & strCompany & vbCr
rngCell.Font.Bold = True
rngCell.Font.Name = "Calibri"
rngCell.Font.Size = 10
rngCell.Collapse 0  'wdCollapseEnd
rngCell.MoveEnd 1, -1  'wdCharacter, -1
rngCell.Text = strPhone & " | " & strFax & " | " & strEmail
rngCell.Font.Bold = False
rngCell.Font.Size = 8

注1:您执行操作的顺序通常与以用户键入时的顺序相反:首先填充范围,然后应用格式。

注意2:当在单元格的末尾折叠时,Word会将“范围”位置移动到下一个单元格的开头。因此,代码将点移回一个字符,将其放在上一个(原始)单元格的末尾:rngCell.MoveEnd wdCharacter, -1

注3:我在第一个vbCr的末尾添加了rngCell.Text,以便在表格单元格中创建新段落。