How to set the default suggested filename to be displayed by the Save As dialog the first time a user saves a new document

Article originally contributed by Dave Rado with updates from Ibrahim Elnazak and Greg Chapman

In a document that hasn't yet been saved, if you select File + Properties, type a Title, and click OK, the title will be displayed as the suggested file name in the Save As dialog the first time the document is saved.

However, due to a VBA bug, using:

ActiveDocument.BuiltInDocumentProperties(wdPropertyTitle) = "My title"

doesn't work (it doesn't affect the default SaveAs filename); and the FileProperties dialog isn't directly accessible via VBA.

However, the following does the trick (with thanks to Ibby who first came up with this workaround):

With Dialogs(wdDialogFileSummaryInfo)
    .Title = "My Title"
     .Execute
End With

Important gotcha: Although this method does support long filenames, unfortunately it doesn't support delimiters such as underscore. If you set the title to My_Title, (as one does), the suggested filename will be My.doc. If you would like this behaviour to be changed, I hope you'll contact http://support.microsoft.com/contactus/ .

(You could get round this by intercepting the FileSave, FileSaveAll and FileSaveAs commands, and by writing an AutoClose macro to intercept the event of the user closing the document and being asked if they want to save changes, but that would be very kludgy indeed, whereas setting the Document Title is simplicity itself, provided you don't need it to support delimiters).

In the meantime, here's a work-around to the work-around by Greg Chapman that ... well... works around it :-)

Sub ChangeProps()

'change properties
    If Documents.Count > 0 Then
         Set dlgProp = Dialogs(wdDialogFileSummaryInfo)
         ' Establish title, subject, author, and keywords values
         dlgProp.Title = MakeADocTitle("XXXX Form Options Specs.doc")
         dlgProp.Subject = strTitle
         dlgProp.Author = "Company Name"
         dlgProp.Keywords = strKeywords

         ' Set the values
         dlgProp.Execute

         ' Show the dialog for testing purposes
         dlgProp.Show
    End If

End Sub
Function MakeADocTitle(ByVal strTitle As String) As String

arrSplit = Split(strTitle, " ")

MakeADocTitle = arrSplit(0)
For I = 1 To UBound(arrSplit)
    MakeADocTitle = MakeADocTitle & Chr(95) & arrSplit(I)
Next I

MakeADocTitle = MakeADocTitle
End Function

See also: Getting help with calling Word's built-in dialogs using VBA (and why doing so can be much more useful than you'd think).