This macro is used to publish a template to another user's mailbox. If the template name never changes you can 'hard code' the template name into the code.
You need to have proper permissions to publish forms to other users folder; you need at least Folder Visible and Create Items permission.
Nonediting Author and above have the required permissions, or select just those two permissions in the dialog.
Why would you use a macro to publish a template instead of using the Publish command in Forms Designer? Because you can. :) It's also the only way to remotely publish custom forms in someone else's mailbox.
To use this macro, you need to confirm macro security is set to low.
- Press Alt+F11 in to open the VBA editor.
- Right-click on Project1 and choose Insert > Module.
- Paste the code into the new module.
- Press F8 to run it.
Use a macro to publish custom forms
Option Explicit Sub PublishForm() 'fromhttp://slipstick.me/0clkw Dim olNS As Outlook.NameSpace Dim MyFolder Dim MyItem Dim MyForm As FormDescription Dim myRecipient As Recipient Dim recip, fname, tname, appdata As String Dim oShell Set oShell = CreateObject("WScript.Shell") appdata = oShell.ExpandEnvironmentStrings("%appdata%") tname = InputBox("Template name (only) path is in Templates folder") recip = InputBox("Publish to mailbox: name or alias") fname = InputBox("Publish form as: name") tname = appdata & "\Microsoft\Templates\" & tname & ".oft" Set olNS = Application.GetNamespace("MAPI") Set MyItem = Application.CreateItemFromTemplate(tname) Set MyForm = MyItem.FormDescription Set myRecipient = olNS.CreateRecipient(recip) myRecipient.Resolve If myRecipient.Resolved Then Set MyFolder = olNS.GetSharedDefaultFolder(myRecipient, 9) 'calendar End If MyForm.Name = fname MyForm.PublishForm 3, MyFolder '3=olFolderRegistry Set olNS = Nothing End Sub
Use a template to publish a form
If you need to publish forms frequently (in your mailbox or other mailboxes), you can use a custom form with VBScript. The advantage of this method is that the "publish form" form is available when you open your mailbox on any computer.
To create this form, follow these steps:
- Open a new Post form in Forms Designer.
- Click View code and paste this code into the code window.
- Create 4 textbox controls on P.2 tab using these names: fame, tname,recip, fno and 5 labels (the fifth label is a cheat sheet to identify template types).
Label | Textbox |
---|---|
Publish form as | fname |
Template name | tname |
Username | recip |
Template type | fno |
You should hide the Message tab, since you aren't using that page. In Outlook 2007, 2010, 2013 click on the Page button, then click on Display This Page to remove the checkmark. Adding controls to the P.2 page will show the page by default.
You can change the name of P.2 tab, but its not necessary since it's not visible in the finished form. If you change the name, you need to change the name in the macro code too.
Add a command button and run the form to test it.
Option Explicit 'http://slipstick.me/0clkw Dim olNS Dim MyFolder Dim MyItem Dim MyForm Dim myRecipient Dim recip Dim fname Dim tname Dim fno Dim appdata Dim oShell Sub CommandButton2_Click() Set olNS = Item.Application.GetNamespace("MAPI") Set MyFolder = olNS.GetDefaultFolder(9) '6=olFolderInbox Set oShell = CreateObject( "WScript.Shell" ) appdata=oShell.ExpandEnvironmentStrings("%appdata%") fname = Item.GetInspector.ModifiedFormPages("P.2").Controls("fname").Value tname = Item.GetInspector.ModifiedFormPages("P.2").Controls("tname").Value recip = Item.GetInspector.ModifiedFormPages("P.2").Controls("recip").Value fno = Item.GetInspector.ModifiedFormPages("P.2").Controls("fno").Value Set MyItem = Application.CreateItemFromTemplate(appdata & "\Microsoft\Templates\" & tname & ".oft") Set myRecipient = olNS.CreateRecipient(recip) myRecipient.Resolve If myRecipient.Resolved Then Set MyFolder = olNS.GetSharedDefaultFolder(myRecipient, fno) 'calendar End If Set MyForm = MyItem.FormDescription MyForm.Name = fname MyForm.PublishForm 3, MyFolder '3=olFolderRegistry Item.Close 1 '1=olDiscard End Sub Sub CommandButton1_Click() Dim oDialog Set oDialog = Application.Session.GetSelectNamesDialog oDialog.Display End Sub
A pst file containing the template is here.
GetSharedDefaultFolder Values
The code above is using the Calendar folder. to use a diffierent folder, you need to change the value for GetSharedDefaultFolder (or GetDefaultFolder if using it on your own mailbox):
Set MyFolder = olNS.GetDefaultFolder(9) 'calendar
Set MyFolder = olNS.GetSharedDefaultFolder(myRecipient, 9)
Valid entries are listed in the table below.
Folder Name | GetDefaultFolder(#) |
---|---|
Calendar | 9 |
Contacts | 10 |
Inbox | 6 |
Journal | 11 |
Tasks | 13 |
More Information
OL98: How to Programmatically Publish a Form MSKB (valid for all versions of Outlook)
How to design custom template under message/mail form !
How to design custom template under message/mail form !
I was asked to design Request for Leave form as a template which can be later used by the users .
I designed the template by choosing Home ->New Mail->Developer->Design a Form -> Selected Message (Look IN : Standard Forms Library)
Here In this design mode I can see To,Cc,Subject and body . I deleted Body (Rich Text Box) and added the other controls like Multiple Labels,Textboxes and Textbox(Multiline to true) in place of Body
I saved this whole thing into local machine outlook/templates folder with .oft extension .
When I close whole thing and open by clicking choose form in New Mail . The template is loading . When I write something in the textbox and fill the
fields and try to send to other user . It is just showing the Empty body and it is not showing any of the controls/Input data to the receiver mail .
Please reply me ASAP
Thanks in advance
If you aren't using Exchange server and publishing it to the organizational forms library, you need to send the form definition. It's on the properties tab when customizing the form.