Solved

What is the code for making a macro open a template as Document 1 but only when document 1 has not been modified?

Posted on 2006-11-07
7
168 Views
Last Modified: 2010-04-30
Good Day Experts,

I have placed a button/macro in our Normal.dot template that will open another shared template that is for a letterhead.  When the letterhead button/macro is clicked, a whole new Word Document is opened(document 2).  I'd like that to happen ONLY when Document 1 has already been modified, if document 1 has not been modified then I'd like document 1 to be the letter head template that is opened.  this is what is used for the letterhead button/macro:

Sub Letterhead()
    Application.Documents.Add "s:\word templates\ltrhead.dot"
End Sub

Thanks,

Ellsworth
0
Comment
Question by:ellsworth2000
  • 4
  • 3
7 Comments
 
LVL 76

Expert Comment

by:GrahamSkan
Comment Utility
Best to check if it's there as well:

Sub Letterhead()
    Dim doc As Document
    For Each doc In Application.Documents
        If doc.Name = "Document1" Then
            If doc.Saved Then
                Exit Sub
            End If
        End If
    Next doc
    Application.Documents.Add "s:\word templates\ltrhead.dot"
End Sub
0
 

Author Comment

by:ellsworth2000
Comment Utility
Hi GrahamSkan,

I pasted that code into my Normal.dot file and it  disabled my letterhead button.  I click the button and nothing happens.  Do you have any Ideas What is wrong?

Thanks,

Ellsworth
0
 

Author Comment

by:ellsworth2000
Comment Utility
GrahamSkan,

You don't know of a way to make the name of the macro have a space between Letter and Head do you?

Thanks,

Ells
0
How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

 
LVL 76

Accepted Solution

by:
GrahamSkan earned 500 total points
Comment Utility
It will certainly run differently form a previous macro of that name. It checks to see if there is a document called Document1. If there is, and its .Saved property is true (that is, there are no changes to save) then nothing will happen.

However, I think I misunderstood your requirement. You require Document1 to be a document that would be as if it were created by file/new. That is surprisingly difficult. Why don't you just close the Document1, and create a new document anyway?

Sub Letterhead()
    Dim Doc As Document
    For Each Doc In Application.Documents
        If Doc.Name = "Document1" Then
            If Doc.Saved Then
                Doc.Close
            End If
        End If
    Next Doc
    Application.Documents.Add "s:\word templates\ltrhead.dot"
End Sub

A macro name cannot contain spaces. Why do you think that you need it to?

0
 

Author Comment

by:ellsworth2000
Comment Utility
Oh I don't think we need to have spaces in the name of the macro though, it would be more pleasing to the eye if there were spaces between words when the cursor is hovering over the macro button and the Name is displayed.

Lol...(I hope you don't hate me for being picky)The recent code changes opens the Letterhead template in a single document but it changes to Document 2.  Is it possible to make the code open the letterhead template in document 1 but still have only one document open if no changes have been made to document 1?

Many Thanks GrahamSkan,

Ells
0
 
LVL 76

Expert Comment

by:GrahamSkan
Comment Utility
You can use an under score.
What sort of macrobutton? I just tried hovering over a MacroButton field and nothing popped up. With other button types, you can usually control the tooltip text independently.

I did say that it was difficult to retain the Document1 name. Perhaps I should have said that there are several methods, none entirely satisfactory. That's the reason I asked why you wanted to do it

The only way to change a document name in Word is to do a Save As. Obviously a second occurence of the operation would find a pre-existing file of that name. Should that be overwritten? Also the name DocumentN is a good visible indication to the user that  document has never been saved.

This code involves attaching the template, then opening it as a document, copying the text from it to the blank document, then closing the template.

Sub Letterhead()
    Dim Doc As Document
    Dim TemplateDoc As Document
    Const strTemplateName = "s:\word templates\ltrhead.dot"
    For Each Doc In Application.Documents
        If Doc.Name = "Document1" Then
            If Doc.Saved Then
                Doc.AttachedTemplate = strTemplateName
                Set TemplateDoc = Documents.Open(strTemplateName)
                TemplateDoc.Content.Copy
                Doc.Content.Paste
                TemplateDoc.Close False
                Exit Sub
            End If
        End If
    Next Doc
    Application.Documents.Add strTemplateName
End Sub


( I'm off to bed. It's past midnight here.)
0
 

Author Comment

by:ellsworth2000
Comment Utility
Many Thanks to you GrahmSkan.  I think I'm going to use that second revision being that it works best.

Thanks again,

Ellsworth
0

Featured Post

Highfive + Dolby Voice = No More Audio Complaints!

Poor audio quality is one of the top reasons people don’t use video conferencing. Get the crispest, clearest audio powered by Dolby Voice in every meeting. Highfive and Dolby Voice deliver the best video conferencing and audio experience for every meeting and every room.

Join & Write a Comment

Introduction In a recent article (http://www.experts-exchange.com/A_7811-A-Better-Concatenate-Function.html) for the Excel community, I showed an improved version of the Excel Concatenate() function.  While writing that article I realized that no o…
Article by: Martin
Here are a few simple, working, games that you can use as-is or as the basis for your own games. Tic-Tac-Toe This is one of the simplest of all games.   The game allows for a choice of who goes first and keeps track of the number of wins for…
Get people started with the process of using Access VBA to control Outlook using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Microsoft Outlook. Using automation, an Access applic…
This lesson covers basic error handling code in Microsoft Excel using VBA. This is the first lesson in a 3-part series that uses code to loop through an Excel spreadsheet in VBA and then fix errors, taking advantage of error handling code. This l…

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

14 Experts available now in Live!

Get 1:1 Help Now