If this is your first visit, be sure to check out the FAQ by clicking the link above. You may have to register before you can post: click the register link above to proceed. To start viewing messages, select the forum that you want to visit from the selection below. |
|
|
Thread Tools | Display Modes |
#12
|
|||
|
|||
Word mailmerge - Visual Basic experts please help!
I think I have overcome the Tools/References problem, but now I have another one: - I get an compile error message telling me that End of Statement was expected, highlighting FileName in the statement to which I have added 'Set objMMMD =' Set objMMMD = objApp.Documents.Open FileName:=strDocName, ConfirmConversions:=False, _ ReadOnly:=False, AddToRecentFiles:=False _ , PasswordDocument:="", _ PasswordTemplate:="", Revert:=False, WritePasswordDocument:="", _ WritePasswordTemplate:="", XMLTransform:="" Murray Peter Jamieson;359803 Wrote: [color=blue][i] That is probably because the Word Object library has not been referenced via the Tools|References option in Access VBA. However, the original author may have avoided that deliberately because when you reference a library, the reference is to a specific version of Word. You can typically work around that using the following instead (you just don't see the autocomplete Help in the VBA editor that you would otherwise get) Dim objMMMD As Object -- Peter Jamieson http://tips.pjmsn.me.uk "Murray Muspratt-Rouse" wrote in message ...- Thank you Doug for referring me to Peter Jamieson's advice. I have immediately run in to a problem - it does not like 'objMMMD As Word.Document' telling me 'User-defined type not defined' and suggesting that it might be in a properly registered object or type library. Did I misunderstand Peter's advice? Was I meant to change objMMMD to something else? Murray Doug Robbins - Word MVP;359552 Wrote:- Actually, I did know what the code was doing, but did not understand why. However, I suggest that you follow the advice given by Peter Jamieson and use Dim objMMMD As Word.Document ' ' ' Set objMMMD = objApp.Documents.Open FileName:=strDocName, 'etc. ' ' ' ' then when you want to close the mail merge main document, instead of having to ' work out which window it is in, you can do objMMMD.Close SaveChanges:=False ' ' then Set objMMMD = Nothing -- Hope this helps. Please reply to the newsgroup unless you wish to avail yourself of my services on a paid consulting basis. Doug Robbins - Word MVP "Murray Muspratt-Rouse" wrote in message ... I agree with Doug about the code he does not understand - since I am not the original author of this code and do not speak VBA any way I have been struggling to find my way to add new function to the application. The merge document is selected by the user from an Access table in which the full path to the file is stored, so what the code that we cannot understand does is to strip off the path to the document from strDocName: - Dim intSplitName As Integer Dim intLength As Integer intLength = Len(strDocName) intSplitName = InStrRev(strDocName, "\", , vbTextCompare) strDocName = Right(strDocName, intLength - intSplitName) objApp.Windows(strDocName).Activate objApp.ActiveWindow.Close SaveChanges:=wdDoNotSaveChanges So perhaps what the last line does is to shut the new document, since the original merge document is displayed. I have tried commenting out this code but that only results in an error. I will try changing ActiveWindow in the last line to strDocName! Many thanks for your time and trouble Murray - +-------------------------------------------------------------------+ +-------------------------------------------------------------------+ -- Murray Muspratt-Rouse - +-------------------------------------------------------------------+ +-------------------------------------------------------------------+ -- Murray Muspratt-Rouse |
#13
|
|||
|
|||
Word mailmerge - Visual Basic experts please help!
This time at execution the error message on "Dim objMMMD As Word.Document" was 'User-defined type not defined'. Does this mean I am missing something else? A 'type' library? Murray Peter Jamieson;359914 Wrote: [color=blue][i] My apologies- the syntax for the Open has to change to the "function" style where the parameter list is surrounded by braces, e.g. Set objMMMD = objApp.Documents.Open(FileName:=strDocName) -- Peter Jamieson http://tips.pjmsn.me.uk "Murray Muspratt-Rouse" wrote in message ...- I am very grateful to Peter for his advice - this morning I realised that I should have googled objMMMD. When I did that I found some of his postings on the web and started looking for Microsoft Office 12.0 Object Library, Trying to reference it showed it to be missing, so I tried to find its name and location. What I saw was cut off at c:\Program Files\Microsoft Office\Office 12\M - and I could not make the pop up any wider! I have tried Dim objMMMD As Object - the result was a compile error with a syntax error on Set objMMMD = objApp.Documents.Open FileName:=strDocName etc. I must locate the Object Library and regioster it, I think. Murray Peter Jamieson;359803 Wrote:- That is probably because the Word Object library has not been referenced via the Tools|References option in Access VBA. However, the original author may have avoided that deliberately because when you reference a library, the reference is to a specific version of Word. You can typically work around that using the following instead (you just don't see the autocomplete Help in the VBA editor that you would otherwise get) Dim objMMMD As Object -- Peter Jamieson http://tips.pjmsn.me.uk "Murray Muspratt-Rouse" wrote in message ...- Thank you Doug for referring me to Peter Jamieson's advice. I have immediately run in to a problem - it does not like 'objMMMD As Word.Document' telling me 'User-defined type not defined' and suggesting that it might be in a properly registered object or type library. Did I misunderstand Peter's advice? Was I meant to change objMMMD to something else? Murray Doug Robbins - Word MVP;359552 Wrote:- Actually, I did know what the code was doing, but did not understand why. However, I suggest that you follow the advice given by Peter Jamieson and use Dim objMMMD As Word.Document ' ' ' Set objMMMD = objApp.Documents.Open FileName:=strDocName, 'etc. ' ' ' ' then when you want to close the mail merge main document, instead of having to ' work out which window it is in, you can do objMMMD.Close SaveChanges:=False ' ' then Set objMMMD = Nothing -- Hope this helps. Please reply to the newsgroup unless you wish to avail yourself of my services on a paid consulting basis. Doug Robbins - Word MVP "Murray Muspratt-Rouse" wrote in message ... I agree with Doug about the code he does not understand - since I am not the original author of this code and do not speak VBA any way I have been struggling to find my way to add new function to the application. The merge document is selected by the user from an Access table in which the full path to the file is stored, so what the code that we cannot understand does is to strip off the path to the document from strDocName: - Dim intSplitName As Integer Dim intLength As Integer intLength = Len(strDocName) intSplitName = InStrRev(strDocName, "\", , vbTextCompare) strDocName = Right(strDocName, intLength - intSplitName) objApp.Windows(strDocName).Activate objApp.ActiveWindow.Close SaveChanges:=wdDoNotSaveChanges So perhaps what the last line does is to shut the new document, since the original merge document is displayed. I have tried commenting out this code but that only results in an error. I will try changing ActiveWindow in the last line to strDocName! Many thanks for your time and trouble Murray - +-------------------------------------------------------------------+ +-------------------------------------------------------------------+ -- Murray Muspratt-Rouse -- +-------------------------------------------------------------------+ +-------------------------------------------------------------------+ -- Murray Muspratt-Rouse - +-------------------------------------------------------------------+ +-------------------------------------------------------------------+ -- Murray Muspratt-Rouse |
#14
|
|||
|
|||
Word mailmerge - Visual Basic experts please help!
See Peter's previous message in which he says to use
Set objMMMD = objApp.Documents.Open (FileName: = strDocName, etc ) Probably all that you really need of that command is: Set objMMMD = objApp.Documents.Open (FileName: = strDocName, AddToRecentFiles:=False ) And that is on the assumption that you do not want the document to be added to the list of most recently used files. If that is not an issue, you can simply use Set objMMMD = obj.App.Documents.Open(strDocName) -- Hope this helps. Please reply to the newsgroup unless you wish to avail yourself of my services on a paid consulting basis. Doug Robbins - Word MVP "Murray Muspratt-Rouse" wrote in message ...[color=blue][i] I think I have overcome the Tools/References problem, but now I have another one: - I get an compile error message telling me that End of Statement was expected, highlighting FileName in the statement to which I have added 'Set objMMMD =' Set objMMMD = objApp.Documents.Open FileName:=strDocName, ConfirmConversions:=False, _ ReadOnly:=False, AddToRecentFiles:=False _ , PasswordDocument:="", _ PasswordTemplate:="", Revert:=False, WritePasswordDocument:="", _ WritePasswordTemplate:="", XMLTransform:="" Murray Peter Jamieson;359803 Wrote: That is probably because the Word Object library has not been referenced via the Tools|References option in Access VBA. However, the original author may have avoided that deliberately because when you reference a library, the reference is to a specific version of Word. You can typically work around that using the following instead (you just don't see the autocomplete Help in the VBA editor that you would otherwise get) Dim objMMMD As Object -- Peter Jamieson http://tips.pjmsn.me.uk "Murray Muspratt-Rouse" wrote in message ...- Thank you Doug for referring me to Peter Jamieson's advice. I have immediately run in to a problem - it does not like 'objMMMD As Word.Document' telling me 'User-defined type not defined' and suggesting that it might be in a properly registered object or type library. Did I misunderstand Peter's advice? Was I meant to change objMMMD to something else? Murray Doug Robbins - Word MVP;359552 Wrote:- Actually, I did know what the code was doing, but did not understand why. However, I suggest that you follow the advice given by Peter Jamieson and use Dim objMMMD As Word.Document ' ' ' Set objMMMD = objApp.Documents.Open FileName:=strDocName, 'etc. ' ' ' ' then when you want to close the mail merge main document, instead of having to ' work out which window it is in, you can do objMMMD.Close SaveChanges:=False ' ' then Set objMMMD = Nothing -- Hope this helps. Please reply to the newsgroup unless you wish to avail yourself of my services on a paid consulting basis. Doug Robbins - Word MVP "Murray Muspratt-Rouse" wrote in message ... I agree with Doug about the code he does not understand - since I am not the original author of this code and do not speak VBA any way I have been struggling to find my way to add new function to the application. The merge document is selected by the user from an Access table in which the full path to the file is stored, so what the code that we cannot understand does is to strip off the path to the document from strDocName: - Dim intSplitName As Integer Dim intLength As Integer intLength = Len(strDocName) intSplitName = InStrRev(strDocName, "\", , vbTextCompare) strDocName = Right(strDocName, intLength - intSplitName) objApp.Windows(strDocName).Activate objApp.ActiveWindow.Close SaveChanges:=wdDoNotSaveChanges So perhaps what the last line does is to shut the new document, since the original merge document is displayed. I have tried commenting out this code but that only results in an error. I will try changing ActiveWindow in the last line to strDocName! Many thanks for your time and trouble Murray - +-------------------------------------------------------------------+ +-------------------------------------------------------------------+ -- Murray Muspratt-Rouse - +-------------------------------------------------------------------+ +-------------------------------------------------------------------+ -- Murray Muspratt-Rouse |
#15
|
|||
|
|||
Word mailmerge - Visual Basic experts please help!
While thanking Peter and Doug for their advice I have to say that I have a major problem - I am not sure what objMMMD is. Does it stand for Mail Merge Main Document or something like that? If so is it meant to be used to identify the document set up with merge fields, so as to make it possible to close it without closing the result of the merge or whatever? If I am right then I think I understand what I must do to use it in the VBA code. Also, because the References pop-up only shows me the first character of the module name (C:\Program Files\Common Files\Microsoft Office\OFFICE12\M) I do not whether one of the 12 dlls i can see is the right one! Murray Doug Robbins - Word MVP;360024 Wrote: [color=blue][i] See Peter's previous message in which he says to use Set objMMMD = objApp.Documents.Open (FileName: = strDocName, etc ) Probably all that you really need of that command is: Set objMMMD = objApp.Documents.Open (FileName: = strDocName, AddToRecentFiles:=False ) And that is on the assumption that you do not want the document to be added to the list of most recently used files. If that is not an issue, you can simply use Set objMMMD = obj.App.Documents.Open(strDocName) -- Hope this helps. Please reply to the newsgroup unless you wish to avail yourself of my services on a paid consulting basis. Doug Robbins - Word MVP "Murray Muspratt-Rouse" wrote in message ...[color=blue][i] I think I have overcome the Tools/References problem, but now I have another one: - I get an compile error message telling me that End of Statement was expected, highlighting FileName in the statement to which I have added 'Set objMMMD =' Set objMMMD = objApp.Documents.Open FileName:=strDocName, ConfirmConversions:=False, _ ReadOnly:=False, AddToRecentFiles:=False _ , PasswordDocument:="", _ PasswordTemplate:="", Revert:=False, WritePasswordDocument:="", _ WritePasswordTemplate:="", XMLTransform:="" Murray Peter Jamieson;359803 Wrote: That is probably because the Word Object library has not been referenced via the Tools|References option in Access VBA. However, the original author may have avoided that deliberately because when you reference a library, the reference is to a specific version of Word. You can typically work around that using the following instead (you just don't see the autocomplete Help in the VBA editor that you would otherwise get) Dim objMMMD As Object -- Peter Jamieson http://tips.pjmsn.me.uk "Murray Muspratt-Rouse" wrote in message ...- Thank you Doug for referring me to Peter Jamieson's advice. I have immediately run in to a problem - it does not like 'objMMMD As Word.Document' telling me 'User-defined type not defined' and suggesting that it might be in a properly registered object or type library. Did I misunderstand Peter's advice? Was I meant to change objMMMD to something else? Murray +-------------------------------------------------------------------+ +-------------------------------------------------------------------+ -- Murray Muspratt-Rouse |
#16
|
|||
|
|||
Word mailmerge - Visual Basic experts please help!
objMMMD is just a "label" assigned to a document object which by the command
Set objMMMD = objApp.Documents.Open (FileName: = strDocName, etc ) is being set to the document with the file name of strDocName, which I believe is your mailmerge main document. having done that, you can refer to that document by the label that is assigned to the object. There is nothing special about the MMMD other than it conveys some meaning as you have deduced to the use of a person reading the code You could just as well have used: Dim doc as Object Set doc = objApp.Documents.Open (FileName: = strDocName, etc ) but then doc does not convey as much intelligence to the user, other than it probably refers to a document, but which one. -- Hope this helps. Please reply to the newsgroup unless you wish to avail yourself of my services on a paid consulting basis. Doug Robbins - Word MVP "Murray Muspratt-Rouse" wrote in message ...[color=blue][i] While thanking Peter and Doug for their advice I have to say that I have a major problem - I am not sure what objMMMD is. Does it stand for Mail Merge Main Document or something like that? If so is it meant to be used to identify the document set up with merge fields, so as to make it possible to close it without closing the result of the merge or whatever? If I am right then I think I understand what I must do to use it in the VBA code. Also, because the References pop-up only shows me the first character of the module name (C:\Program Files\Common Files\Microsoft Office\OFFICE12\M) I do not whether one of the 12 dlls i can see is the right one! Murray Doug Robbins - Word MVP;360024 Wrote:[color=green][i] See Peter's previous message in which he says to use Set objMMMD = objApp.Documents.Open (FileName: = strDocName, etc ) Probably all that you really need of that command is: Set objMMMD = objApp.Documents.Open (FileName: = strDocName, AddToRecentFiles:=False ) And that is on the assumption that you do not want the document to be added to the list of most recently used files. If that is not an issue, you can simply use Set objMMMD = obj.App.Documents.Open(strDocName) -- Hope this helps. Please reply to the newsgroup unless you wish to avail yourself of my services on a paid consulting basis. Doug Robbins - Word MVP "Murray Muspratt-Rouse" wrote in message ... I think I have overcome the Tools/References problem, but now I have another one: - I get an compile error message telling me that End of Statement was expected, highlighting FileName in the statement to which I have added 'Set objMMMD =' Set objMMMD = objApp.Documents.Open FileName:=strDocName, ConfirmConversions:=False, _ ReadOnly:=False, AddToRecentFiles:=False _ , PasswordDocument:="", _ PasswordTemplate:="", Revert:=False, WritePasswordDocument:="", _ WritePasswordTemplate:="", XMLTransform:="" Murray Peter Jamieson;359803 Wrote: That is probably because the Word Object library has not been referenced via the Tools|References option in Access VBA. However, the original author may have avoided that deliberately because when you reference a library, the reference is to a specific version of Word. You can typically work around that using the following instead (you just don't see the autocomplete Help in the VBA editor that you would otherwise get) Dim objMMMD As Object -- Peter Jamieson http://tips.pjmsn.me.uk "Murray Muspratt-Rouse" wrote in message ...- Thank you Doug for referring me to Peter Jamieson's advice. I have immediately run in to a problem - it does not like 'objMMMD As Word.Document' telling me 'User-defined type not defined' and suggesting that it might be in a properly registered object or type library. Did I misunderstand Peter's advice? Was I meant to change objMMMD to something else? Murray +-------------------------------------------------------------------+ +-------------------------------------------------------------------+ -- Murray Muspratt-Rouse |
#17
|
|||
|
|||
Word mailmerge - Visual Basic experts please help!
Doug, thank you for confirming my guess! I have in fact used 'Dim objMMD As Object' as Peter recommended - the result of a merge that should have produced 3 letters was that I got only one. For the moment I intend to leave things as they are (without the objMMD code), so that users will finish the merge with the function provided by Word 2007, unless, of course, there is a solution for the problem I have described! Murray Doug Robbins - Word MVP;360424 Wrote: [color=blue][i] objMMMD is just a "label" assigned to a document object which by the command Set objMMMD = objApp.Documents.Open (FileName: = strDocName, etc ) is being set to the document with the file name of strDocName, which I believe is your mailmerge main document. having done that, you can refer to that document by the label that is assigned to the object. There is nothing special about the MMMD other than it conveys some meaning as you have deduced to the use of a person reading the code You could just as well have used: Dim doc as Object Set doc = objApp.Documents.Open (FileName: = strDocName, etc ) but then doc does not convey as much intelligence to the user, other than it probably refers to a document, but which one. -- Hope this helps. Please reply to the newsgroup unless you wish to avail yourself of my services on a paid consulting basis. Doug Robbins - Word MVP "Murray Muspratt-Rouse" wrote in message ...- While thanking Peter and Doug for their advice I have to say that I have a major problem - I am not sure what objMMMD is. Does it stand for Merge Main Document or something like that? If so is it meant to be used to identify the document set up with merge fields, so as to make it possible to close it without closing the result of the merge or whatever? If I am right then I think I understand what I must do to use it in the VBA code. Also, because the References pop-up only shows me the first character of the module name (C:\Program Files\Common Files\Microsoft Office\OFFICE12\M) I do not whether one of the 12 dlls i can see is the right one! Murray Doug Robbins - Word MVP;360024 Wrote:- See Peter's previous message in which he says to use Set objMMMD = objApp.Documents.Open (FileName: = strDocName, etc ) Probably all that you really need of that command is: Set objMMMD = objApp.Documents.Open (FileName: = strDocName, AddToRecentFiles:=False ) And that is on the assumption that you do not want the document to be added to the list of most recently used files. If that is not an issue, you can simply use Set objMMMD = obj.App.Documents.Open(strDocName) -- Hope this helps. Please reply to the newsgroup unless you wish to avail yourself of my services on a paid consulting basis. Doug Robbins - Word MVP "Murray Muspratt-Rouse" wrote in message ...[color=blue][i] I think I have overcome the Tools/References problem, but now I have another one: - I get an compile error message telling me that End of Statement was expected, highlighting FileName in the statement to which I have added 'Set objMMMD =' Set objMMMD = objApp.Documents.Open FileName:=strDocName, ConfirmConversions:=False, _ ReadOnly:=False, AddToRecentFiles:=False _ , PasswordDocument:="", _ PasswordTemplate:="", Revert:=False, WritePasswordDocument:="", _ WritePasswordTemplate:="", XMLTransform:="" Murray Peter Jamieson;359803 Wrote: That is probably because the Word Object library has not been referenced via the Tools|References option in Access VBA. However, the original author may have avoided that deliberately because when you reference a library, the reference is to a specific version of Word. You can typically work around that using the following instead (you just don't see the autocomplete Help in the VBA editor that you would otherwise get) Dim objMMMD As Object -- Peter Jamieson http://tips.pjmsn.me.uk "Murray Muspratt-Rouse" wrote in message ...- Thank you Doug for referring me to Peter Jamieson's advice. I have immediately run in to a problem - it does not like 'objMMMD As Word.Document' telling me 'User-defined type not defined' and suggesting that it might be in a properly registered object or type library. Did I misunderstand Peter's advice? Was I meant to change objMMMD to something else? Murray- +-------------------------------------------------------------------+ +-------------------------------------------------------------------+ -- Murray Muspratt-Rouse - +-------------------------------------------------------------------+ +-------------------------------------------------------------------+ -- Murray Muspratt-Rouse |
#18
|
|||
|
|||
Word mailmerge - Visual Basic experts please help!
Murray,
Can you post back with the complete code as you now have it. -- Hope this helps. Please reply to the newsgroup unless you wish to avail yourself of my services on a paid consulting basis. Doug Robbins - Word MVP "Murray Muspratt-Rouse" wrote in message ...[color=blue][i] Doug, thank you for confirming my guess! I have in fact used 'Dim objMMD As Object' as Peter recommended - the result of a merge that should have produced 3 letters was that I got only one. For the moment I intend to leave things as they are (without the objMMD code), so that users will finish the merge with the function provided by Word 2007, unless, of course, there is a solution for the problem I have described! Murray Doug Robbins - Word MVP;360424 Wrote:[color=green][i] objMMMD is just a "label" assigned to a document object which by the command Set objMMMD = objApp.Documents.Open (FileName: = strDocName, etc ) is being set to the document with the file name of strDocName, which I believe is your mailmerge main document. having done that, you can refer to that document by the label that is assigned to the object. There is nothing special about the MMMD other than it conveys some meaning as you have deduced to the use of a person reading the code You could just as well have used: Dim doc as Object Set doc = objApp.Documents.Open (FileName: = strDocName, etc ) but then doc does not convey as much intelligence to the user, other than it probably refers to a document, but which one. -- Hope this helps. Please reply to the newsgroup unless you wish to avail yourself of my services on a paid consulting basis. Doug Robbins - Word MVP "Murray Muspratt-Rouse" wrote in message ...- While thanking Peter and Doug for their advice I have to say that I have a major problem - I am not sure what objMMMD is. Does it stand for Merge Main Document or something like that? If so is it meant to be used to identify the document set up with merge fields, so as to make it possible to close it without closing the result of the merge or whatever? If I am right then I think I understand what I must do to use it in the VBA code. Also, because the References pop-up only shows me the first character of the module name (C:\Program Files\Common Files\Microsoft Office\OFFICE12\M) I do not whether one of the 12 dlls i can see is the right one! Murray Doug Robbins - Word MVP;360024 Wrote:- See Peter's previous message in which he says to use Set objMMMD = objApp.Documents.Open (FileName: = strDocName, etc ) Probably all that you really need of that command is: Set objMMMD = objApp.Documents.Open (FileName: = strDocName, AddToRecentFiles:=False ) And that is on the assumption that you do not want the document to be added to the list of most recently used files. If that is not an issue, you can simply use Set objMMMD = obj.App.Documents.Open(strDocName) -- Hope this helps. Please reply to the newsgroup unless you wish to avail yourself of my services on a paid consulting basis. Doug Robbins - Word MVP "Murray Muspratt-Rouse" wrote in message ... I think I have overcome the Tools/References problem, but now I have another one: - I get an compile error message telling me that End of Statement was expected, highlighting FileName in the statement to which I have added 'Set objMMMD =' Set objMMMD = objApp.Documents.Open FileName:=strDocName, ConfirmConversions:=False, _ ReadOnly:=False, AddToRecentFiles:=False _ , PasswordDocument:="", _ PasswordTemplate:="", Revert:=False, WritePasswordDocument:="", _ WritePasswordTemplate:="", XMLTransform:="" Murray Peter Jamieson;359803 Wrote: That is probably because the Word Object library has not been referenced via the Tools|References option in Access VBA. However, the original author may have avoided that deliberately because when you reference a library, the reference is to a specific version of Word. You can typically work around that using the following instead (you just don't see the autocomplete Help in the VBA editor that you would otherwise get) Dim objMMMD As Object -- Peter Jamieson http://tips.pjmsn.me.uk "Murray Muspratt-Rouse" wrote in message ...- Thank you Doug for referring me to Peter Jamieson's advice. I have immediately run in to a problem - it does not like 'objMMMD As Word.Document' telling me 'User-defined type not defined' and suggesting that it might be in a properly registered object or type library. Did I misunderstand Peter's advice? Was I meant to change objMMMD to something else? Murray- +-------------------------------------------------------------------+ +-------------------------------------------------------------------+ -- Murray Muspratt-Rouse - +-------------------------------------------------------------------+ +-------------------------------------------------------------------+ -- Murray Muspratt-Rouse |
#19
|
|||
|
|||
Word mailmerge - Visual Basic experts please help!
Here is the code as it is now. The merge document is displayed and the user can then finish the merge. Option Compare Database Public lngMyEmpID As Long Public datDate1 As Date Public datDate2 As Date Public datDate3 As Date Sub OpenWordDoc(strDocName As String, strLetterDescription As String, strFormName As String) On Error Resume Next DoCmd.OpenQuery "qrydeleteMergeTablerows" 'Load data to MergeTable with a query that collects the required data after update If strFormName = "Volunteers" Then If strLetterDescription = "REFERENCE REQUEST" Then DoCmd.OpenQuery ("qryUpdateRefereeLetterDate") DoCmd.OpenQuery ("qryReferees") Else If strLetterDescription = "Referee chaser" Then DoCmd.OpenQuery ("qryUpdateRefereeChaserDate") DoCmd.OpenQuery ("qryRefereechaser") Else DoCmd.OpenQuery ("qryVolunteer") End If End If Else DoCmd.OpenQuery ("qryClient") End If Dim objApp As Object Dim strCurrentFileName As String strCurrentFileName = CurrentDb.Name 'Opens the document Set objApp = CreateObject("Word.Application") objApp.Visible = False 'Dim objMMMD As Object 'Set objMMMD = objApp.Documents.Open(FileName:=strDocName) ' objApp.ChangeFileOpenDirectory "C:\Temp\" objApp.Documents.Open FileName:=strDocName, ConfirmConversions:=False, _ ReadOnly:=False, AddToRecentFiles:=False _ , PasswordDocument:="", _ PasswordTemplate:="", Revert:=False, WritePasswordDocument:="", _ WritePasswordTemplate:="", XMLTransform:="" 'Format:=wdOpenFormatAuto ' "C:\Documents and Settings\mike\My Documents\Mind\MIB.mdb", _ 'Data Source=C:\Documents and Settings\mike\My Documents\Mind\MIB.mdb objApp.ActiveDocument.MailMerge.OpenDataSource Name:= _ strCurrentFileName, _ ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _ AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _ WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _ Connection:= _ "Provider=Microsoft.Jet.OLEDB.4.0;Password="""";Us er ID=Admin;Date Source=strCurrentFileName;Mode=Read;Extended Properties="""";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDBatabase Password="""";Jet OLE" _ , SQLStatement:="SELECT * FROM `mergetable`", SQLStatement1:="", _ SubType:=wdMergeSubTypeAccess With objApp.ActiveDocument.MailMerge .Destination = wdSendToNewDocument .SuppressBlankLines = True With .DataSource .FirstRecord = .ActiveRecord .LastRecord = .ActiveRecord End With .Execute Pause:=False End With Dim intSplitName As Integer Dim intLength As Integer intLength = Len(strDocName) intSplitName = InStrRev(strDocName, "\", , vbTextCompare) strDocName = Right(strDocName, intLength - intSplitName) objApp.Windows(strDocName).Activate objApp.ActiveWindow.Close SaveChanges:=wdDoNotSaveChanges 'objMMMD.Close SaveChanges:=False 'Set objMMMD = Nothing 'objApp.Documents.Open strDocName objApp.Visible = True objApp.Activate End Sub I really do appreciate the help you give! Murray Doug Robbins - Word MVP;360676 Wrote: [color=blue][i] Murray, Can you post back with the complete code as you now have it. -- Hope this helps. Please reply to the newsgroup unless you wish to avail yourself of my services on a paid consulting basis. Doug Robbins - Word MVP "Murray Muspratt-Rouse" wrote in message ...- Doug, thank you for confirming my guess! I have in fact used 'Dim objMMD As Object' as Peter recommended - the result of a merge that should have produced 3 letters was that I got only one. For the moment I intend to leave things as they are (without the objMMD code), so that users will finish the merge with the function provided by Word 2007, unless, of course, there is a solution for the problem I have described! Murray Doug Robbins - Word MVP;360424 Wrote:- objMMMD is just a "label" assigned to a document object which by the command Set objMMMD = objApp.Documents.Open (FileName: = strDocName, etc ) is being set to the document with the file name of strDocName, which I believe is your mailmerge main document. having done that, you can refer to that document by the label that is assigned to the object. There is nothing special about the MMMD other than it conveys some meaning as you have deduced to the use of a person reading the code You could just as well have used: Dim doc as Object Set doc = objApp.Documents.Open (FileName: = strDocName, etc ) but then doc does not convey as much intelligence to the user, other than it probably refers to a document, but which one. -- Hope this helps. Please reply to the newsgroup unless you wish to avail yourself of my services on a paid consulting basis. Doug Robbins - Word MVP "Murray Muspratt-Rouse" wrote in message ...- While thanking Peter and Doug for their advice I have to say that I have a major problem - I am not sure what objMMMD is. Does it stand for Merge Main Document or something like that? If so is it meant to be used to identify the document set up with merge fields, so as to make it possible to close it without closing the result of the merge or whatever? If I am right then I think I understand what I must do to use it in the VBA code. Also, because the References pop-up only shows me the first character of the module name (C:\Program Files\Common Files\Microsoft Office\OFFICE12\M) I do not whether one of the 12 dlls i can see is the right one! Murray Doug Robbins - Word MVP;360024 Wrote:- See Peter's previous message in which he says to use Set objMMMD = objApp.Documents.Open (FileName: = strDocName, etc ) Probably all that you really need of that command is: Set objMMMD = objApp.Documents.Open (FileName: = strDocName, AddToRecentFiles:=False ) And that is on the assumption that you do not want the document to be added to the list of most recently used files. If that is not an issue, you can simply use Set objMMMD = obj.App.Documents.Open(strDocName) -- Hope this helps. Please reply to the newsgroup unless you wish to avail yourself of my services on a paid consulting basis. Doug Robbins - Word MVP "Murray Muspratt-Rouse" wrote in message ...[color=blue][i] I think I have overcome the Tools/References problem, but now I have another one: - I get an compile error message telling me that End of Statement was expected, highlighting FileName in the statement to which I have added 'Set objMMMD =' Set objMMMD = objApp.Documents.Open FileName:=strDocName, ConfirmConversions:=False, _ ReadOnly:=False, AddToRecentFiles:=False _ , PasswordDocument:="", _ PasswordTemplate:="", Revert:=False, WritePasswordDocument:="", _ WritePasswordTemplate:="", XMLTransform:="" Murray Peter Jamieson;359803 Wrote: That is probably because the Word Object library has not been referenced via the Tools|References option in Access VBA. However, the original author may have avoided that deliberately because when you reference a library, the reference is to a specific version of Word. You can typically work around that using the following instead (you just don't see the autocomplete Help in the VBA editor that you would otherwise get) Dim objMMMD As Object -- Peter Jamieson http://tips.pjmsn.me.uk "Murray Muspratt-Rouse" wrote in message ...- Thank you Doug for referring me to Peter Jamieson's advice. I have immediately run in to a problem - it does not like 'objMMMD As Word.Document' telling me 'User-defined type not defined' and suggesting that it might be in a properly registered object or type library. Did I misunderstand Peter's advice? Was I meant to change objMMMD to something else? Murray- +-------------------------------------------------------------------+ +-------------------------------------------------------------------+ -- Murray Muspratt-Rouse -- +-------------------------------------------------------------------+ +-------------------------------------------------------------------+ -- Murray Muspratt-Rouse - +-------------------------------------------------------------------+ +-------------------------------------------------------------------+ -- Murray Muspratt-Rouse |
#20
|
|||
|
|||
Word mailmerge - Visual Basic experts please help!
Try the following (watch out for line breaks that may occur in the wrong
place.) I haven't really looked at the If... Else...End If manipulations of the Access data at the beginning to see if there is anything wrong with it, only at the Word part of the code. Sub OpenWordDoc(strDocName As String, strLetterDescription As String, strFormName As String) Dim objApp As Object Dim objMMMD As Object Dim strCurrentFileName As String On Error Resume Next DoCmd.OpenQuery "qrydeleteMergeTablerows" 'Load data to MergeTable with a query that collects the required data after update If strFormName = "Volunteers" Then If strLetterDescription = "REFERENCE REQUEST" Then DoCmd.OpenQuery ("qryUpdateRefereeLetterDate") DoCmd.OpenQuery ("qryReferees") Else If strLetterDescription = "Referee chaser" Then DoCmd.OpenQuery ("qryUpdateRefereeChaserDate") DoCmd.OpenQuery ("qryRefereechaser") Else DoCmd.OpenQuery ("qryVolunteer") End If End If Else DoCmd.OpenQuery ("qryClient") End If strCurrentFileName = CurrentDb.Name 'Opens the document Set objApp = CreateObject("Word.Application") objApp.Activate Set objMMMD = objApp.Documents.Open(FileName:=strDocName) With ObjMMMD .MailMerge.OpenDataSource Name:= _ strCurrentFileName, _ ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _ AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _ WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _ Connection:= _ "Provider=Microsoft.Jet.OLEDB.4.0;Password="""";Us er _ ID=Admin;Date Source=strCurrentFileName;Mode=Read; _ Extended Properties="""";Jet OLEDB:System database=""""; _ Jet OLEDB:Registry Path="""";Jet OLEDBatabase Password="""";Jet OLE", _ SQLStatement:="SELECT * FROM `mergetable`", SQLStatement1:="", _ SubType:=wdMergeSubTypeAccess .Destination = wdSendToNewDocument .SuppressBlankLines = True With .DataSource FirstRecord = .ActiveRecord LastRecord = .ActiveRecord End With .Execute Pause:=False .Close wdDoNotSaveChanges End With End Sub -- Hope this helps. Please reply to the newsgroup unless you wish to avail yourself of my services on a paid consulting basis. Doug Robbins - Word MVP "Murray Muspratt-Rouse" wrote in message ...[color=blue][i] Here is the code as it is now. The merge document is displayed and the user can then finish the merge. Option Compare Database Public lngMyEmpID As Long Public datDate1 As Date Public datDate2 As Date Public datDate3 As Date Sub OpenWordDoc(strDocName As String, strLetterDescription As String, strFormName As String) On Error Resume Next DoCmd.OpenQuery "qrydeleteMergeTablerows" 'Load data to MergeTable with a query that collects the required data after update If strFormName = "Volunteers" Then If strLetterDescription = "REFERENCE REQUEST" Then DoCmd.OpenQuery ("qryUpdateRefereeLetterDate") DoCmd.OpenQuery ("qryReferees") Else If strLetterDescription = "Referee chaser" Then DoCmd.OpenQuery ("qryUpdateRefereeChaserDate") DoCmd.OpenQuery ("qryRefereechaser") Else DoCmd.OpenQuery ("qryVolunteer") End If End If Else DoCmd.OpenQuery ("qryClient") End If Dim objApp As Object Dim strCurrentFileName As String strCurrentFileName = CurrentDb.Name 'Opens the document Set objApp = CreateObject("Word.Application") objApp.Visible = False 'Dim objMMMD As Object 'Set objMMMD = objApp.Documents.Open(FileName:=strDocName) ' objApp.ChangeFileOpenDirectory "C:\Temp\" objApp.Documents.Open FileName:=strDocName, ConfirmConversions:=False, _ ReadOnly:=False, AddToRecentFiles:=False _ , PasswordDocument:="", _ PasswordTemplate:="", Revert:=False, WritePasswordDocument:="", _ WritePasswordTemplate:="", XMLTransform:="" 'Format:=wdOpenFormatAuto ' "C:\Documents and Settings\mike\My Documents\Mind\MIB.mdb", _ 'Data Source=C:\Documents and Settings\mike\My Documents\Mind\MIB.mdb objApp.ActiveDocument.MailMerge.OpenDataSource Name:= _ strCurrentFileName, _ ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _ AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _ WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _ Connection:= _ "Provider=Microsoft.Jet.OLEDB.4.0;Password="""";Us er ID=Admin;Date Source=strCurrentFileName;Mode=Read;Extended Properties="""";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDBatabase Password="""";Jet OLE" _ , SQLStatement:="SELECT * FROM `mergetable`", SQLStatement1:="", _ SubType:=wdMergeSubTypeAccess With objApp.ActiveDocument.MailMerge Destination = wdSendToNewDocument SuppressBlankLines = True With .DataSource FirstRecord = .ActiveRecord LastRecord = .ActiveRecord End With Execute Pause:=False End With Dim intSplitName As Integer Dim intLength As Integer intLength = Len(strDocName) intSplitName = InStrRev(strDocName, "\", , vbTextCompare) strDocName = Right(strDocName, intLength - intSplitName) objApp.Windows(strDocName).Activate objApp.ActiveWindow.Close SaveChanges:=wdDoNotSaveChanges 'objMMMD.Close SaveChanges:=False 'Set objMMMD = Nothing 'objApp.Documents.Open strDocName objApp.Visible = True objApp.Activate End Sub I really do appreciate the help you give! Murray Doug Robbins - Word MVP;360676 Wrote:[color=green][i] Murray, Can you post back with the complete code as you now have it. -- Hope this helps. Please reply to the newsgroup unless you wish to avail yourself of my services on a paid consulting basis. Doug Robbins - Word MVP "Murray Muspratt-Rouse" wrote in message ...- Doug, thank you for confirming my guess! I have in fact used 'Dim objMMD As Object' as Peter recommended - the result of a merge that should have produced 3 letters was that I got only one. For the moment I intend to leave things as they are (without the objMMD code), so that users will finish the merge with the function provided by Word 2007, unless, of course, there is a solution for the problem I have described! Murray Doug Robbins - Word MVP;360424 Wrote:- objMMMD is just a "label" assigned to a document object which by the command Set objMMMD = objApp.Documents.Open (FileName: = strDocName, etc ) is being set to the document with the file name of strDocName, which I believe is your mailmerge main document. having done that, you can refer to that document by the label that is assigned to the object. There is nothing special about the MMMD other than it conveys some meaning as you have deduced to the use of a person reading the code You could just as well have used: Dim doc as Object Set doc = objApp.Documents.Open (FileName: = strDocName, etc ) but then doc does not convey as much intelligence to the user, other than it probably refers to a document, but which one. -- Hope this helps. Please reply to the newsgroup unless you wish to avail yourself of my services on a paid consulting basis. Doug Robbins - Word MVP "Murray Muspratt-Rouse" wrote in message ...- While thanking Peter and Doug for their advice I have to say that I have a major problem - I am not sure what objMMMD is. Does it stand for Merge Main Document or something like that? If so is it meant to be used to identify the document set up with merge fields, so as to make it possible to close it without closing the result of the merge or whatever? If I am right then I think I understand what I must do to use it in the VBA code. Also, because the References pop-up only shows me the first character of the module name (C:\Program Files\Common Files\Microsoft Office\OFFICE12\M) I do not whether one of the 12 dlls i can see is the right one! Murray Doug Robbins - Word MVP;360024 Wrote:- See Peter's previous message in which he says to use Set objMMMD = objApp.Documents.Open (FileName: = strDocName, etc ) Probably all that you really need of that command is: Set objMMMD = objApp.Documents.Open (FileName: = strDocName, AddToRecentFiles:=False ) And that is on the assumption that you do not want the document to be added to the list of most recently used files. If that is not an issue, you can simply use Set objMMMD = obj.App.Documents.Open(strDocName) -- Hope this helps. Please reply to the newsgroup unless you wish to avail yourself of my services on a paid consulting basis. Doug Robbins - Word MVP "Murray Muspratt-Rouse" wrote in message ... I think I have overcome the Tools/References problem, but now I have another one: - I get an compile error message telling me that End of Statement was expected, highlighting FileName in the statement to which I have added 'Set objMMMD =' Set objMMMD = objApp.Documents.Open FileName:=strDocName, ConfirmConversions:=False, _ ReadOnly:=False, AddToRecentFiles:=False _ , PasswordDocument:="", _ PasswordTemplate:="", Revert:=False, WritePasswordDocument:="", _ WritePasswordTemplate:="", XMLTransform:="" Murray Peter Jamieson;359803 Wrote: That is probably because the Word Object library has not been referenced via the Tools|References option in Access VBA. However, the original author may have avoided that deliberately because when you reference a library, the reference is to a specific version of Word. You can typically work around that using the following instead (you just don't see the autocomplete Help in the VBA editor that you would otherwise get) Dim objMMMD As Object -- Peter Jamieson http://tips.pjmsn.me.uk "Murray Muspratt-Rouse" wrote in message ...- Thank you Doug for referring me to Peter Jamieson's advice. I have immediately run in to a problem - it does not like 'objMMMD As Word.Document' telling me 'User-defined type not defined' and suggesting that it might be in a properly registered object or type library. Did I misunderstand Peter's advice? Was I meant to change objMMMD to something else? Murray- +-------------------------------------------------------------------+ +-------------------------------------------------------------------+ -- Murray Muspratt-Rouse -- +-------------------------------------------------------------------+ +-------------------------------------------------------------------+ -- Murray Muspratt-Rouse - +-------------------------------------------------------------------+ +-------------------------------------------------------------------+ -- Murray Muspratt-Rouse |
Thread Tools | |
Display Modes | |
|
|