Last reviewed on July 28, 2015   —  2 Comments

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.
You need at least Create Permission to publish forms in other users mailboxes

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.

  1. Press Alt+F11 in to open the VBA editor.
  2. Right-click on Project1 and choose Insert > Module.
  3. Paste the code into the new module.
  4. Press F8 to run it.

Use a macro to publish custom forms

Option Explicit

Sub PublishForm()

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)
   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:

  1. Open a new Post form in Forms Designer.
  2. Click View code and paste this code into the code window.
  3. 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.

Create a custom form to publish a form
Add a command button and run the form to test it.

Option Explicit
       	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" ) 
	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)
   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
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)


  1. Rajesh says

    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

    • Diane Poremsky says

      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.

Leave a Reply

Please post long or more complicated questions at OutlookForums by

If the Post Comment button disappears, press your Tab key.