I have 2 buttons in a word document for saving, the document is an dotm which runs various macros depending on what the user inputs.
The first button is labelled 'Save as Working Document' and this simply asks the user to choose a filename and saves it as a dotm and works fine.
The second button is 'Save as Final Document' which needs to be a docx.
This second one fails, the only difference is the fileformat part of the statement.
I think I know what the problem is, but don't know what to do. If I save the document manually to a docx format it warns me that I will lose my VBA macros, but that is what I actually want.
So, my question is how do I tell the macro that I don't mind that.
This is the code.
Code:
Private Sub Savetemplate1_Click()
ChangeFileOpenDirectory "M:\Care Plan System\"
Dim myotherfilename As String
Dim myfilename As String
myotherfilename = Options.DefaultFilePath(wdDocumentsPath)
myfilename = InputBox("Enter file name for document " & myfilename)
'MsgBox myfilename
myfilename = myotherfilename + "Care Plan System\" + myfilename
MsgBox myfilename
'ActiveDocument.SaveAs FileName:=myfilename, FileFormat:=wdFormatXMLTemplateMacroEnabled
ActiveDocument.SaveAs FileName:=myfilename, _
FileFormat:=wdFormatXMLDocument
End Sub
The first Saveas is commented, but is just there to show what the code is like that works.
Code:
Application.DisplayAlerts = False
ActiveDocument.SaveAs FileName:=myfilename, FileFormat:=wdFormatXMLDocument
Application.DisplayAlerts = True
"\Care Plan System\"
You probably also don't need:
ChangeFileOpenDirectory "M:\Care Plan System\"
which can be replaced by:
myfilename = "M:\Care Plan System\Care Plan System\" + myfilename
There also doesn't seem to be any point in having '& myfilename' in:
InputBox("Enter file name for document " & myfilename)
as 'myfilename' is empty when the InputBox runs.
Hello Paul
I have now made my code literally a few lines as show at the end as all the rest is just localisation. But, it still fails on the 2nd save wiht run-time error 4198: command failed.
I have to admit I am getting a bit frustrated now.
What I am trying to do is save a .dotm word template as a .docx using the name that the user enters, but I just don't seem to be able to achieve it. At the moment the users have to press save as and select word document, but this seems beyond their very limited ability which is why I thought I would automate it. I also need to keep a .dotm version in case they need to make changes at a later date.
myfilename = InputBox("Enter file name for document " & myfilename)
MsgBox myfilename '(this is just for me to see what I have entered)
ActiveDocument.SaveAs FileName:=myfilename, FileFormat:=wdFormatXMLTemplateMacroEnabled
Application.DisplayAlerts = False
ActiveDocument.SaveAs FileName:=myfilename, FileFormat:=wdFormatXMLDocument
Application.DisplayAlerts = True
Code:
Private Sub Savetemplate1_Click()
Dim myotherfilename As String, myfilename As String
ChangeFileOpenDirectory "M:\Care Plan System\"
myotherfilename = Options.DefaultFilePath(wdDocumentsPath)
myfilename = InputBox("Enter file name for document " & myfilename)
myfilename = myotherfilename + "\Care Plan System\" + myfilename
ActiveDocument.SaveAs FileName:=myfilename, FileFormat:=wdFormatXMLTemplateMacroEnabled
Application.DisplayAlerts = False
ActiveDocument.SaveAs FileName:=myfilename, FileFormat:=wdFormatXMLDocument
Application.DisplayAlerts = True
End Sub
The only differences for my system are that I need to use what for me is a valid ChangeFileOpenDirectory path and that, instead of "\Care Plan System\" I use "\".
Something I have noticed, though, is that you're using ChangeFileOpenDirectory
before
storing wdDocumentsPath. That means the wdDocumentsPath = "M:\Care Plan System\". Perhaps you need to reverse the order of these statements, because what you're getting now is, in effect:
myfilename = "M:\Care Plan System\Care Plan System\" + myfilename
It seems strange that you'd have a subfolder with the same name as its parent.
Also, having stored wdDocumentsPath in myotherfilename, you don't ever restore it:
Options.DefaultFilePath(wdDocumentsPath) = myotherfilename
Of course, that would be futile at the moment, because of the order in which you're using ChangeFileOpenDirectory and storing wdDocumentsPath.
Hello Paul
You are being so helpful and yet I still cannot get mine to work.
I have gone back to basics and created a macro by recording the steps I am taking.
Here is the very simple bit of code, no filenames being input or anything, and yet it still fails for me.
Code:
Private Sub CommandButton1_Click()
ActiveDocument.SaveAs FileName:="M:\Care Plan System\testdoc 1259.docx", _
FileFormat:=wdFormatXMLDocument, LockComments:=False, Password:="", _
AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=False, _
EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, SaveFormsData _
:=False, SaveAsAOCELetter:=False
End Sub