Solved

Error 462 using Word within Visual Basic to print envelop

Posted on 2003-11-03
6
763 Views
Last Modified: 2010-08-05
Here is the code:  
Receive error 462 when trying to print envelops using Word within VB 6.

Public Sub PrintEnvelopes()
    '**Error Handling***
    On Error GoTo ErrHandler
    Dim sSource As String
    sSource = "PrintEnvelopes"
    '**Error Handling***
   
    Dim i                       As Integer
   
    Dim oApp                    As Word.Application
    Dim oDoc                    As Word.Document
    Dim oWordTemplate           As Word.Document
   
    Dim oListItem               As ListItem
    Dim sDefenseAttyKey         As String
    Dim sDefenseAttyID          As String
    Dim oNode                   As MSXML2.IXMLDOMNode
    Dim oSection                As Word.Section
    Dim iSectionCount           As Integer
    Dim aAllSections()          As Boolean
   
    Dim sDefenseAttyName        As String
    Dim sTemp                   As String
    Dim sDefenseAttyAddress     As String
   
    Dim strMessage              As String
    Dim sFileName               As String
 
    Set oApp = GetCurrentWordInstance
    If oApp Is Nothing Then
         Set oApp = New Word.Application
    End If

    ' There must be an ACTIVE WORD document, to print envelope(s).
    Set oDoc = oApp.Documents.Add(msWordTemplate, False, wdNewBlankDocument, True)
    With oDoc
        If oDoc.ProtectionType <> wdNoProtection Then
            iSectionCount = oDoc.Sections.Count
            ReDim aProtectedSections(1 To iSectionCount)
            For i = 1 To iSectionCount
                aProtectedSections(i) = oDoc.Sections(i).ProtectedForForms
            Next i
            .Unprotect
        End If
        'Clear out the contents
        oDoc.Content.Delete
        oDoc.Activate
    End With
   'Set Envelope = CreateObject(Word.Envelope)
    i = 0
    Screen.MousePointer = vbHourglass
    For Each oListItem In lvSelect(LV_SELECTED).ListItems
        i = i + 1
        sDefenseAttyKey = oListItem.Key
        sDefenseAttyID = Replace(sDefenseAttyKey, S_ID, S_BLANK)
        Set oNode = GetXMLSingleNodeByXpath(moDocInfoDom, "//DefenseAttorney/Attorney[EmployeeID='" & sDefenseAttyID & "']")
        If oNode Is Nothing Then
            Err.Raise CUSTOM_ERR_NO_LOAD_WITNESS_XML, sSource, CUSTOM_ERR_NO_LOAD_WITNESS_XML_DESC
            Exit Sub
        End If
        'Get Witness Name and Address
        sDefenseAttyName = GetNameFMLS(oNode)
        sDefenseAttyAddress = GetAddressAAACSZWithLineFeedsA(oNode)
        sTemp = sDefenseAttyName & vbCr & sDefenseAttyAddress
        ActiveDocument.Envelope.PrintOut False, Address:=sTemp
    Next
   
    'Save the word template and delete it, so that user doesn't see the word document and freak out
    sFileName = CreateSubDocName()
    If gsWordDocumentsPath <> S_BLANK Then
       sFileName = gsWordDocumentsPath & "\" & sFileName
    End If
    oDoc.SaveAs sFileName
    oDoc.Close
    Kill sFileName
    Screen.MousePointer = vbDefault
   
    If i = 1 Then
        strMessage = "1 envelope printed"
    Else
        strMessage = i & " envelopes printed"
    End If
    MsgBox strMessage
   
CleanUp:
    Set oDoc = Nothing
    Screen.MousePointer = vbDefault
    If gbWordLaunchedByThisApp Then oApp.Quit
    Set oApp = Nothing
    Exit Sub
ErrHandler:
    If Err.Number = "462" Then
        MsgBox "Close this window. Save Case. Close CAIS. Try again to print envelope."
       
        sFileName = CreateSubDocName()
        If gsWordDocumentsPath <> S_BLANK Then
            sFileName = gsWordDocumentsPath & "\" & sFileName
        End If
        oDoc.SaveAs sFileName
        oDoc.Close
        Kill sFileName
        GoTo CleanUp
    End If
    Err.Raise Err.Number, sSource, Err.Description
    GoTo CleanUp
 
 
End Sub
0
Comment
Question by:dolphins_9
  • 3
6 Comments
 
LVL 5

Expert Comment

by:dc197
ID: 9674211
You mustn't run word in the background.
If you close a second instance of word, ALL instances (including the one inside your VB prog) are killed.

You can open a word doc but not close it.
This is a bug with Word.
0
 
LVL 5

Accepted Solution

by:
dc197 earned 250 total points
ID: 9674231
I would also use the following binding:


   Dim oApp                    As NEW  Word.Application
   Dim oDoc                    As Word.Document    
   Set oDoc = oApp.Documents.Add(msWordTemplate, False, wdNewBlankDocument, True)



This bypasses the GetCurrentWordInstance and should create a new word instance for each instance of your program.
Remeber to clean up
oDoc.Close
oApp.Quit
Set oApp = nothing
set odoc = nothing
0
 
LVL 5

Expert Comment

by:dc197
ID: 10164640
Dolphins, this is the answer.
I used to use word within my apps at work, but got so {{angry at }} the 462 errors that I do not use word any more.


0

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction While answering a recent question about filtering a custom class collection, I realized that this could be accomplished with very little code by using the ScriptControl (SC) library.  This article will introduce you to the SC library a…
Most everyone who has done any programming in VB6 knows that you can do something in code like Debug.Print MyVar and that when the program runs from the IDE, the value of MyVar will be displayed in the Immediate Window. Less well known is Debug.Asse…
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…
Get people started with the process of using Access VBA to control Excel using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Excel. Using automation, an Access application can laun…

829 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