【问题标题】:Email Signature - VBscript for Word, with tables电子邮件签名 - Word 的 VBscript,带表格
【发布时间】:2016-04-10 02:59:13
【问题描述】:

我正在尝试设置公司签名,然后使用 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)

编辑:来自 cmets 的其他信息。

我正在尝试为表格第二行中每个特定行中的文本设置不同的属性(字体大小、字体类型、粗体等)。例如:测试文本(这是粗体和 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

【问题讨论】:

  • 我试图完成的格式化不正确。我很抱歉。我正在尝试在徽标右侧添加三行。
  • 首先:删除 On Error Resume Next 行。这会关闭代码的错误消息。您需要错误消息来告诉您出了什么问题。如果没有这些信息,我们将无法为您提供帮助。

标签: email vbscript ms-word


【解决方案1】:

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

编辑说明:根据 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:您执行操作的顺序通常与以用户身份输入时相反:首先填充 Range,然后应用格式。

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

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

【讨论】:

  • @Razdell 好的,我已经编辑了我对 VBScript 的答案以及您的原始问题。 VBScript 不是 VBA,因此如果您需要提出更多问题,请记住这一点并相应地针对问题。
  • 你摇滚,辛迪!我非常感谢您的帮助和耐心。我现在按照我想要的方式完成了重要的部分设置。我需要做的最后一件事是在表格之后插入文本,然后我就完成了。我应该创建一个新问题还是您能帮我解决这个问题?
  • 再次感谢辛迪。我实际上最终用 objSelection.EndKey END_OF_STORY 解决了它
  • 好的。就这样没有意外的惊喜:这将始终将 SELECTION(用户结束的位置)放在文档的末尾,而不是专门放在表格之后。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-29
  • 2011-02-21
  • 1970-01-01
  • 2018-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多