Some background...We have a thick client we use for document management. We are able to customize the functionality of the client by writting C/C++ dll's. This code was written over a decade ago for Win XP and Word 2003. We have only recently seen odd problems after being forced to move to Win 7 and Word 2010.
One of the functions in these dll's creates a new thread and launches Word within that new thread. We also pass Word some command line parameters, that being the name of the word template to use (master.dotm) and a function within the template to execute (autonew) when Word starts.
Autonew adds a new document based on the master.dotm template then it closes the template and calls another function called InsertLetter.
Within this function we insert another Word document, the actual content for the letter as Master.dotm doesnt really have any content other than a header and footer. Its within InsertLetter that users very occasionally get the message box "4248 this command is not available because no document is open".
I do not know exactly where in this function this error occurs but I think the actual problem is within the AutoNew function when the document is being created and for some random, un-reproduceable reason this error pops up.
I have not been able to reproduce this on my PC. The version of word is apparently the same and the PC's should be built the same. The only think I can think of is that its a timing issue between master.dotm creating the new document and then getting closed and the InsertLetter function getting called.


Here is the autonew function:


Public Sub AutoNew()

On Error Resume Next

'Create autotextMenu
  Call CreateAutoTextMenu

  'Open a new document based on the Master.dotm template

 If ActiveDocument.Type = wdTypeTemplate Then

  Documents.Add ActiveDocument.Path & "\" & ActiveDocument.Name <---this value is always "Master.dotm"  

 Exit Sub
End If

Documents("master.dotm").Close

'Enable "Letters" toolbar
  CommandBars("Letters").Enabled = True

DoEvents

 Application.ScreenUpdating = False

 System.Cursor = wdCursorWait

 GetData 'Function that populates user data

 HeaderFooter (gsLtrCode)

 If goValues Is Nothing Then
    Set goValues = New clsValues
 End If

InsertLetter

Application.ScreenRefresh

'Display driver info
 Call DriverInfo

System.Cursor = wdCursorNormal

Exit Sub
The code for InsertLetter:



Private Sub InsertLetter()

Dim sLtrName   As String
Dim sTemp      As String
Dim oRng       As Range
Dim tmpStart

sLtrName = gsPath & "Letters\" & gsLtrCode & ".doc"

With ActiveDocument.Bookmarks

'Insert selected letter
 If .Exists("Letter") = True Then
  Selection.GoTo what:=wdGoToBookmark, Name:="Letter"
  Selection.InsertFile FileName:=sLtrName, Range:="",   
  ConfirmConversions:=False, link:=False, attachment:=False   

  'Define gender
  sTemp = Left$(sTemp, 2)

  If .Exists("Sir_Madam") Then
     If CInt(sTemp) > 50 Then
        .Item("Sir_Madam").Range.Text = "Madam"
     Else
        .Item("Sir_Madam").Range.Text = "Sir"
     End If
  End If

  If .Exists("FDate") Then
     gbFDate = True
     Set oRng = ActiveDocument.Bookmarks("FDate").Range
     oRng.Text = Format(Date, "mmmm d, yyyy")   

     'default Today's Date
     .Add Name:="FDate", Range:=oRng
  End If

If .Exists("DDate") Then
     gbDDate = True
     Set oRng = ActiveDocument.Bookmarks("DDate").Range
     oRng.Text = Format(DateAdd("ww", 8, Date), "mmmm d, yyyy")  

     'default +8 weeks
     .Add Name:="DDate", Range:=oRng
  End If      

  If .Exists("CaseID") Then     
     Set oRng = ActiveDocument.Bookmarks("CaseID").Range
     oRng.Text = CaseID
     .Add Name:="CaseID", Range:=oRng
  End If

  If .Exists("SeqNum") Then

     Set oRng = ActiveDocument.Bookmarks("SeqNum").Range
     oRng.Text = LetterSeqNum
     .Add Name:="LetterSeqNum", Range:=oRng
  End If

  If .Exists("SeqNumP1") Then

     Set oRng = ActiveDocument.Bookmarks("SeqNumP1").Range
     oRng.Text = LetterSeqNum
     .Add Name:="LetterSeqNum", Range:=oRng
  End If

  If .Exists("VJ") Then
     .Item("VJ").Range.InsertAfter Trim(gsUserID)

     'The next 2 lines added on Feb 23, 2004
     ActiveDocument.Bookmarks("VJ").Range.Font.Name = "Arial"
     ActiveDocument.Bookmarks("VJ").Range.Font.Size = 10
  End If

  If Left$(gsLtrCode, 5) = "USREC" Then

     If .Exists("DatePlus6w") Then
        Set oRng = ActiveDocument.Bookmarks("DatePlus6w").Range
        oRng.Text = Format(DateAdd("ww", 6, Date), "mmmm d, yyyy")     

        'default + 6 weeks
        sTemp = oRng
        .Add Name:="DatePlus6w", Range:=oRng
     End If

     If .Exists("DatePlus6wF") Then
        Select Case Month(CDate(sTemp))
           Case 1
              sTemp = Day(CDate(sTemp)) & " janvier, " & Year(CDate(sTemp))
           Case 2
              sTemp = Day(CDate(sTemp)) & " février, " & Year(CDate(sTemp))
           Case 3
              sTemp = Day(CDate(sTemp)) & " mars, " & Year(CDate(sTemp))
           Case 4
              sTemp = Day(CDate(sTemp)) & " avril, " & Year(CDate(sTemp))
           Case 5
              sTemp = Day(CDate(sTemp)) & " mai, " & Year(CDate(sTemp))
           Case 6
              sTemp = Day(CDate(sTemp)) & " juin, " & Year(CDate(sTemp))
           Case 7
              sTemp = Day(CDate(sTemp)) & " juillet, " & Year(CDate(sTemp))
           Case 8
              sTemp = Day(CDate(sTemp)) & " août, " & Year(CDate(sTemp))
           Case 9
              sTemp = Day(CDate(sTemp)) & " septembre, " & Year(CDate(sTemp))
           Case 10
              sTemp = Day(CDate(sTemp)) & " octobre, " & Year(CDate(sTemp))
           Case 11
              sTemp = Day(CDate(sTemp)) & " novembre, " & Year(CDate(sTemp))
           Case 12
              sTemp = Day(CDate(sTemp)) & " décembre, " & Year(CDate(sTemp))
        End Select

        Set oRng = ActiveDocument.Bookmarks("DatePlus6wF").Range
        oRng.Text = sTemp
        oRng.Font.Italic = True
        .Add Name:="DatePlus6wF", Range:=oRng
     End If
  End If
Else
    MsgBox "Letter doesn't exist"
End If
End With

PopulateFields

 'Apr 15 begins
 With ActiveDocument.Bookmarks

If .Exists("Encl") = True Then
    Set oRng = ActiveDocument.Range( _
        Start:=ActiveDocument.Bookmarks("Letter").Range.Start, _
        End:=ActiveDocument.Bookmarks("Encl").Range.End)
Else
    Set oRng = ActiveDocument.Range( _
        Start:=ActiveDocument.Bookmarks("Letter").Range.Start, _
        End:=ActiveDocument.Bookmarks("VJ").Range.End)
End If

End With

 With oRng
  .Font.Name = "Arial"
  .Font.Size = 11
 End With

 Exit Sub

End Sub