2017-09-20 6 views
0

Wordテンプレートとプレースホルダを使用してOutlook署名を生成し、Outlookで生成された署名を設定するこのスクリプトが見つかりました。 - 評判が10を超えないためにリンクが削除されました -vbs Outlook Signature、2010/2016と比較した2013年の別の結果 - Selection.GoTo?

私のニーズに合わせていくつか修正しましたが、Outlook 2010と2016でテストするとうまくいきました。 Outlook 2013。プレースホルダは関連情報に置き換えられていません。

On Error Resume Next 

Const wdWord = 2 
Const wdParagraph = 4 
Const wdExtend = 1 
Const wdCollapseEnd = 0 


strTemplatePath = "\\server\dir\" 
strTemplateName = "SignatureTemplate.docx" 
strReplyTemplateName = "SignatureTemplateReply.docx" 


'----- Connect to AD and get user info -----' 
Set objSysInfo = CreateObject("ADSystemInfo") 
Set WshShell = CreateObject("WScript.Shell") 

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

strFirstname = objUser.FirstName 
strLastName = objUser.givenName 
strDepartment = objUser.Department 
strInitials = objUser.initials 
strName = objUser.FullName 
strTitle = objUser.Title 
strDescription = objUser.Description 
strOffice = objUser.physicalDeliveryOfficeName 
strCred = objUser.info 
strStreet = objUser.StreetAddress 
strLocation = objUser.l 
strPostCode = objUser.PostalCode 
strPhone = objUser.TelephoneNumber 
strMobile = objUser.Mobile 
strFax = objUser.FacsimileTelephoneNumber 
strEmail = objUser.mail 
strWeb = "" 

'New Signature 
Set objWord = CreateObject("Word.Application") 
Set objDoc = objWord.Documents.Open(strTemplatePath & strTemplateName,,True) 
Set objEmailOptions = objWord.EmailOptions 
Set objSignatureObject = objEmailOptions.EmailSignature 
Set objSignatureEntries = objSignatureObject.EmailSignatureEntries 


SearchAndRep "[Name]", strName, objWord 
If strTitle = "" Then 
SearchAndRep "[Title]", (objDoc.Bookmarks("title").Range.Paragraphs(1).Range.Delete), objDoc 
Else SearchAndRep "[Title]", strTitle, objWord 
End If 
If strDepartment = "" Then 
SearchAndRep "[Department]", (objDoc.Bookmarks("department").Range.Paragraphs(1).Range.Delete), objDoc 
Else SearchAndRep "[Department]", strDepartment, objWord 
End If 
SearchAndRep "[Phone]", strPhone, objWord 
If strMobile = "" Then 
SearchAndRep "[Mobile]", (objDoc.Bookmarks("mobile").Range.Paragraphs(1).Range.Delete), objDoc 
Else SearchAndRep "[Mobile]", strMobile, objWord 
End If 
SearchAndRep "[Fax]", strFax, objWord 
SearchAndRep "[OfficePhone]", strOfficePhone, objWord 
SearchAndRep "[email]", strEmail, objWord 
SearchAndRep "[web]", strWeb, objWord 
If strOffice = "" Then 
SearchAndRep "[Office]", (objDoc.Bookmarks("office").Range.Paragraphs(1).Range.Delete), objDoc 
Else SearchAndRep "[Office]", strOffice, objWord 
End If 



SearchAndRepHyperlink "[email]", strWeb, objDoc 
SearchAndRepHyperlink "[web]", strWeb, objDoc 



Set objSelection = objDoc.Range() 
objSignatureEntries.Add "Full Signature", objSelection 
objSignatureObject.NewMessageSignature = "Full Signature" 

'see note below if a different reply signature is desired 
'objSignatureObject.ReplyMessageSignature = "Reply Signature" 



objDoc.Saved = TRUE 
objDoc.Close 
objWord.Quit 

'______________________ 

'Reply Signature 
Set objWord = CreateObject("Word.Application") 
Set objDoc = objWord.Documents.Open(strTemplatePath & strReplyTemplateName,,True) 
Set objEmailOptions = objWord.EmailOptions 
Set objSignatureObject = objEmailOptions.EmailSignature 
Set objSignatureEntries = objSignatureObject.EmailSignatureEntries 

SearchAndRep "[Name]", strName, objWord 
If strTitle = "" Then 
SearchAndRep "[Title]", (objDoc.Bookmarks("title").Range.Paragraphs(1).Range.Delete), objDoc 
Else SearchAndRep "[Title]", strTitle, objWord 
End If 
If strDepartment = "" Then 
SearchAndRep "[Department]", (objDoc.Bookmarks("department").Range.Paragraphs(1).Range.Delete), objDoc 
Else SearchAndRep "[Department]", strDepartment, objWord 
End If 
SearchAndRep "[Phone]", strPhone, objWord 
If strMobile = "" Then 
SearchAndRep "[Mobile]", (objDoc.Bookmarks("mobile").Range.Paragraphs(1).Range.Delete), objDoc 
Else SearchAndRep "[Mobile]", strMobile, objWord 
End If 
SearchAndRep "[Fax]", strFax, objWord 
SearchAndRep "[OfficePhone]", strOfficePhone, objWord 
SearchAndRep "[email]", strEmail, objWord 
SearchAndRep "[web]", strWeb, objWord 
If strOffice = "" Then 
SearchAndRep "[Office]", (objDoc.Bookmarks("office").Range.Paragraphs(1).Range.Delete), objDoc 
Else SearchAndRep "[Office]", strOffice, objWord 
End If 


SearchAndRepHyperlink "[email]", strWeb, objDoc 
SearchAndRepHyperlink "[web]", strWeb, objDoc 



Set objSelection = objDoc.Range() 
objSignatureEntries.Add "Reply Signature", objSelection 
objSignatureObject.ReplyMessageSignature = "Reply Signature" 

objDoc.Saved = TRUE 
objDoc.Close 
objWord.Quit 





'----- Subrouting to search and replace template text placeholders ----- 
Sub SearchAndRep(searchTerm, replaceTerm, WordApp) 
    WordApp.Selection.GoTo 1 
    With WordApp.Selection.Find 
     .ClearFormatting 
     .Replacement.ClearFormatting 
     .MatchWholeWord = True 
     .Text = searchTerm 
     .Execute ,,,,,,,,,replaceTerm 
    End With 
End Sub 


'----- Subrouting to search and replace template hyperlink placeholders ----- 
'   Note this can be picky...if it does not work re-create hyperlink in the template 
Sub SearchAndRepHyperlink(searchLink, replaceLink, WordDoc) 
    Set colHyperlinks = WordDoc.Hyperlinks 
    For Each objHyperlink in colHyperlinks 
     If objHyperlink.Address = searchLink Then         
      objHyperlink.Address = replaceLink 
      End If 
    Next 
End Sub 

'WScript.Echo "Signature set" 

私はこの記事を見つけた - 答えはSelection.GoToが正しく設定されていないことが示唆されたhttps://social.msdn.microsoft.com/Forums/office/en-US/67184929-d7da-4fba-875b-0e1371f46f2f/vbscript-for-outlook-signature-not-work-with-office-2013?forum=worddev。私は彼の提案に従ったが、これは問題を解決しないだろう。

残りのコードは2013年に動作するようですが、Wordテンプレートが使用され、Outlookにコピーされて署名として設定されますが、プレースホルダはアクティブなディレクトリ情報に置き換えられません。 [名前]

タイトルのために非常に多くの

[OfficePhone]

[モバイル]

おかげ

:だから(展望2013年)の署名は、のように設定されてしまいますあなたの時間。

答えて

0

On Error Resume Next 

をコメントアウトすると、エラーがSearchAndRepサブルーチンで

.Selection.GoTo 

によって引き起こされていることを私に伝えます。

前のコメント(今削除されました)によって提案されました

関連する問題