title: Having trouble saving an existing word document
body: <p>I'm trying to save an existing docx file on the desktop after I automate the word document in C#. I'm using the window form to execute my application. I'm able to save the document when there's no same file name exists on the desktop. However when I try to save the same file name again it will give me this error message:</p>
  
  <blockquote>
    <p>You cannot save while the file is in use by another process. Try
    saving the file with a new name. (C:...\Desktop\TempWord.docx)</p>
  </blockquote>
  
  <p>I read it in the <a href="http://msdn.microsoft.com/en-us/library/aa192495%28v=office.11%29.aspx" rel="nofollow">Microsoft website</a>  I'm able to use SaveAs if there's an existing file name, it will automatically override it. </p>
  
  <p>I'm not too sure why this kind of message appears because I did not open any other word document at all when this program is being run. </p>
  
  <p>I'm not too sure how to resolve this problem. Maybe I did something very stupid that I did not see :( </p>
  
  <hr>
  
  <p>This is my code: </p>
  
  <pre><code>using System;
  using System.Collections.Generic;
  using System.ComponentModel;
  using System.Data;
  using System.Drawing;
  using System.Linq;
  using System.Text;
  using System.Windows.Forms;
  using System.Reflection; 
  using Microsoft.Office;
  using Word = Microsoft.Office.Interop.Word;
  using System.Runtime.InteropServices;
  
  
  namespace TestWordAutoWithTemplate
  {
      public partial class Form1 : Form
      {
          public Form1()
          {
              InitializeComponent();
          }
  
          private void butGenerate_Click(object sender, EventArgs e)
          {
  
  
              //OBJECT OF MISSING "NULL VALUE"
              Object oMissing = Missing.Value;
  
              //OBJECTS OF FALSE AND TRUE
              Object oTrue = true;
              Object oFalse = false;
  
              //CREATING OBJECTS OF WORD AND DOCUMENT
              Word.Application oWord = new Word.Application();
              Word.Document oWordDoc = new Word.Document();
  
              //SETTING THE VISIBILITY TO TRUE
              //oWord.Visible = true;
  
              //THE LOCATION OF THE TEMPLATE FILE ON THE MACHINE
              Object oTemplatePath = @"C:\Documents and Settings\YYC\Desktop\TestTemplate.dotx";
  
              //ADDING A NEW DOCUMENT FROM A TEMPLATE
              oWordDoc = oWord.Documents.Add(ref oTemplatePath, ref oMissing, ref oMissing, ref oMissing);
              int iTotalFields = 0; 
  
              foreach (Word.Field myMergeField in oWordDoc.Fields)
              {
                  iTotalFields++;
                  Word.Range rngFieldCode = myMergeField.Code;
                  String fieldText = rngFieldCode.Text;
  
                  // ONLY GETTING THE MAILMERGE FIELDS
                  if (fieldText.StartsWith(" MERGEFIELD"))
                  {
                      // THE TEXT COMES IN THE FORMAT OF
                      // MERGEFIELD  MyFieldName  \\* MERGEFORMAT
                      // THIS HAS TO BE EDITED TO GET ONLY THE FIELDNAME "MyFieldName"
                      Int32 endMerge = fieldText.IndexOf("\\");
                      Int32 fieldNameLength = fieldText.Length - endMerge;
                      String fieldName = fieldText.Substring(11, endMerge - 11);
  
                      // GIVES THE FIELDNAMES AS THE USER HAD ENTERED IN .dot FILE
                      fieldName = fieldName.Trim();
  
                      // **** FIELD REPLACEMENT IMPLEMENTATION GOES HERE ****//
                      // THE PROGRAMMER CAN HAVE HIS OWN IMPLEMENTATIONS HERE
                      if (fieldName == "Name")
                      {
                          myMergeField.Select();
                          //Check whether the control text is empty
                          if (txtName.Text == "")
                          {
                              oWord.Selection.TypeText(" ");
                          }
                          else
                          {
                              oWord.Selection.TypeText(txtName.Text); 
                          }
                      }
                      if (fieldName == "Address")
                      {
                          myMergeField.Select();
                          //Check whether the control text is empty
                          if (txtAddress.Text == "")
                          {
                              oWord.Selection.TypeText(" ");
                          }
                          else
                          {
                              oWord.Selection.TypeText(txtAddress.Text);
                          }
                      }
  
                      if (fieldName == "Age")
                      {
                          myMergeField.Select();
                          // check whether the control text is empty
                          if (txtAge.Text == "")
                          {
                              oWord.Selection.TypeText(" ");
                          }
                          else
                          {
                              oWord.Selection.TypeText(txtAge.Text); 
                          }
                      }
  
                      if (fieldName == "EAddress")
                      {
                          myMergeField.Select();
                          // check whether the control text is empty
                          if (txtEmail.Text == "")
                          {
                              oWord.Selection.TypeText(" ");
                          }
                          else
                          {
                              oWord.Selection.TypeText(txtEmail.Text);
                          }
                      }
  
                      if (fieldName == "Company")
                      {
                          myMergeField.Select();
                          // Check whether the control text is empty
                          if (txtCompany.Text == "")
                          {
                              oWord.Selection.TypeText(" ");
                          }
                          else
                          {
                              oWord.Selection.TypeText(txtCompany.Text);
                          }
                      }
  
                      if (fieldName == "TelNo")
                      {
                          myMergeField.Select();
                          // Check whether the control text is empty
                          if (txtTelephone.Text == "")
                          {
                              oWord.Selection.TypeText(" ");
                          }
                          else
                          {
                              oWord.Selection.TypeText(txtCompany.Text);
                          }
                      }
  
                      if (fieldName == "ODetails")
                      {
                          myMergeField.Select();
                          // Check whether the control text is empty
                          if (txtOther.Text == "")
                          {
                              oWord.Selection.TypeText(" ");
                          }
                          else
                          {
                              oWord.Selection.TypeText(txtOther.Text);
                          }
                      }
  
                  }
              }
  
              oWord.Visible = false;
  
              //Marshal.ReleaseComObject(oWordDoc.Fields);
              //Marshal.ReleaseComObject(oWordDoc);
              //Marshal.;
  
  
              // If you want your document to be saved as docx
              Object savePath = @"C:\Documents and Settings\YYC\Desktop\TempWord.doc";
              //oWordDoc.Save();
              oWordDoc.SaveAs(ref savePath
                  //, 
                  //ref oMissing, 
                  //ref oMissing, 
                  //ref oMissing, 
                  //ref oMissing, 
                  //ref oMissing, 
                  //ref oMissing, 
                  //ref oMissing, 
                  //ref oMissing, 
                  //ref oMissing, 
                  //ref oMissing, 
                  //ref oMissing, 
                  //ref oMissing, 
                  //ref oMissing, 
                  //ref oMissing, 
                  //ref oMissing
                 );
  
  
  
              // Close the Word document, but leave the Word application open.
              // doc has to be cast to type _Document so that it will find the 
              // correct Close method. 
              object doNotSaveChanges = Word.WdSaveOptions.wdDoNotSaveChanges;
              ((Word._Document)oWordDoc).Close(ref doNotSaveChanges, ref oMissing, ref oMissing);
              oWordDoc = null; 
              // word has to be case to type _Application so that it will find 
              // the correct Quit method. 
              ((Word._Application)oWord).Quit(ref doNotSaveChanges, ref oMissing, ref oMissing);
              oWord = null;
              GC.Collect();
  
  
          }
      }
  }
  </code></pre>
  
  <p>I'm not too sure where I did it wrong. </p>
  
  <p>Edit: I put the original code in. </p>