Reply
 
Thread Tools Display Modes
  #1   Report Post  
 
Posts: n/a
Default WinWord on a web server

Hi,


Am working on a mail merge web application which generates documents
and saves them. Being a rookie in Mail Merge and Word Automation, have
to thank MVPs and other Google Groups Users for helping me solve quite
a few problems and I have recently moved my app to prod.


However, the app throws a few erratic errors which am not able to
reproduce in order to fix them. Request help in this regard as I feel
like am hitting against a wall as its now a prod issue.


A couple of errors are such:


1. The message filter indicated that the application is busy.
2. The remote server machine does not exist or is unavailable.


Am using VB 6.0 and Microsoft Word Library 9.0 on Win2K Server. The
following is the code I have. The GenerateDoc function takes an
instance of Word Application object and does the mail merge from a data
source while at the same time putting placeholders into documents for
form text fields. The doFindReplace Function replaces the placeholders
after merging the document document with a data source.


The above stated errors are thrown from the doFindReplace function.
Also, can someone please explain to me as to how WinWord manages
concurrency while its running on a server(invoked through a COM
component) for use in a web application.


Dim objWordApp As Word.Application
Set objWordApp = New Word.Application


Private Function GenerateDoc( ByVal strFileName as String,
ByRef objWordApp As Word.Application,
ByVal strDocToGenPath as String,
ByRef vError As Variant) As Boolean
On Error GoTo ErrHandler


Dim objBaseTemplate As Word.Document
Dim objGenDoc As Word.Document
Dim frmField As FormField
Dim strFieldText() As String
Dim iCount As Integer
Dim blnFormFieldsFlag As Boolean


blnFormFieldsFlag = False


Set objBaseTemplate = objWordApp.Documents.Add(Template:=strFileName,
Visible:=True)


objBaseTemplate.ActiveWindow.Visible = True


objBaseTemplate.MailMerge.OpenDataSource strDataSource


objBaseTemplate.MailMerge.Destination = wdSendToNewDocument


objBaseTemplate.MailMerge.SuppressBlankLines = True


If objBaseTemplate.MailMerge.fields.Count = 0 Then
objBaseTemplate.Protect wdAllowOnlyFormFields, True, strPassword
objBaseTemplate.SaveAs FileName:=strDocToGenPath


objBaseTemplate.Close
Set objBaseTemplate = Nothing
Else


For Each frmField In objBaseTemplate.FormFields
If frmField.Type = wdFieldFormTextInput Then


' Redim array to hold contents of text field.
ReDim Preserve strFieldText(1, iCount + 1)


' Place content and name of field into array.
strFieldText(0, iCount) = frmField.Result
strFieldText(1, iCount) = frmField.Name


' Select the form field.
frmField.Select


' Replace it with placeholder text.
objBaseTemplate.Application.Selection.TypeText "" & strFieldText(1,
iCount) & "PlaceHolder"


' Increment icount
iCount = iCount + 1
blnFormFieldsFlag = True
End If
Next frmField


objBaseTemplate.MailMerge.Execute


If blnFormFieldsFlag = True Then
doFindReplace iCount, frmField, strFieldText(), objGenDoc
End If


objBaseTemplate.Saved = True
objBaseTemplate.Close
Set objBaseTemplate = Nothing


Set objGenDoc = objWordApp.ActiveDocument


objGenDoc.Protect wdAllowOnlyFormFields, True, strPassword
objGenDoc.SaveAs FileName:=strDocToGenPath


objGenDoc.Close
Set objGenDoc = Nothing
End If


GenerateDoc = True
Exit Function
ErrHandler:
LogError strFunction, Err.Number, Err.Description & " - (Doc Id " &
CStr(strFileName) & ") ", Err.source
GenerateDoc = False
Err.Clear


If Not objBaseTemplate Is Nothing Then
objBaseTemplate.Close


Set objBaseTemplate = Nothing
End If


If Not objGenDoc Is Nothing Then
objGenDoc.Close
Set objGenDoc = Nothing
End If
End Function


Private Function doFindReplace(iCount As Integer, frmField As
FormField, fFieldText() As String, ByRef objWordDoc As Word.Document)
As Boolean
On Error GoTo ErrHandler:


Dim intLoop As Integer
Dim strFunction As String
Dim fField As FormField


strFunction = "doFindReplace"


' Go to top of document.
Selection.HomeKey Unit:=wdStory


' Initialize Find.
Selection.Find.ClearFormatting


With Selection.Find
..Forward = True
..Wrap = wdFindContinue
..Format = False
..MatchCase = False
..MatchWholeWord = False
..MatchWildcards = False
..MatchSoundsLike = False
..MatchAllWordForms = False


' Loop form fields count.
For intLoop = 0 To iCount


' Execute the find.


Do While .Execute(FindText:="" & fFieldText(1, intLoop) _
& "PlaceHolder") = True

' Replace the placeholder with the form field.
Set fField = Selection.FormFields.Add _
(Range:=Selection.Range, Type:=wdFieldFormTextInput)


' Restore form field contents and bookmark name.
fField.Result = fFieldText(0, intLoop)
fField.Name = fFieldText(1, intLoop)
Loop


' Go to top of document for next find.
Selection.HomeKey Unit:=wdStory


Next
End With


doFindReplace = True
Exit Function
ErrHandler:
LogError strFunction, Err.Number, Err.Description, Err.source
Err.Clear
doFindReplace = False
End Function


Any help in this regard is highly appreciated. Thanks in advance.
Vimal

Reply
Thread Tools
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
how to correct winword has caused an error in winword.exe shoeman Microsoft Word Help 1 January 12th 05 09:16 PM
Getting mapped on the server Christy Microsoft Word Help 1 January 3rd 05 07:00 PM
How to fix an KRNL386.EXE error in Winword? Pat Microsoft Word Help 0 December 7th 04 08:15 PM
Mailmerging data from SQL Server tables Bod Mailmerge 2 December 5th 04 07:29 PM
WinWord self closing glitch. TacoBob Microsoft Word Help 1 November 24th 04 03:56 PM


All times are GMT +1. The time now is 03:30 PM.

Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright ©2004-2024 Microsoft Office Word Forum - WordBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Word"