Publish a custom form in another user's mailbox

Last reviewed on June 17, 2013

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

  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()
'from http://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:

  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).
LabelTextbox
Publish form asfname
Template nametname
Usernamerecip
Template typefno

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
' 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 NameGetDefaultFolder(#)
Calendar9
Contacts10
Inbox6
Journal11
Tasks13

More Information

OL98: How to Programmatically Publish a Form MSKB (valid for all versions of Outlook)

Written by

Diane Poremsky
A Microsoft Outlook Most Valuable Professional (MVP) since 1999, Diane is the author of several books, including Outlook 2013 Absolute Beginners Book. She also created video training CDs and online training classes for Microsoft Outlook. You can find her helping people online in Outlook Forums as well as in the Microsoft Answers and TechNet forums.

Please post long or more complicated questions at Outlookforums.

2 responses to “Publish a custom form in another user's mailbox”

  1. Rajesh

    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

Leave a Reply

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