In Consultation Report.dot, I have a subroutine:
Public Sub FaxCopyList2(Optional strFileName As String = "")
...
I would like to call FaxCopyList2 from another document, Visit Summary.doc:
FaxCopyList2 ActiveDocument.FullName
I tried:
Application.Run "FaxCopyList2", ActiveDocument.FullName
but I get: "Object doesn't support this property or method."
The subroutine name FaxCopyList2 is unique to Consultation Report.dot and the document opened using Consultation Report.dot will have different names.
MS Word 2003
How do I do this? TIA
Microsoft WordMicrosoft OfficeMicrosoft Applications
I tried:
Application.Run "'Consultation Report.dot'!Module1.FaxCopyList2" , ActiveDocument.FullName
The code is in "NewMacros" so I tried:
Application.Run "'Consultation Report.dot'!NewMacros.FaxCopyList2", ActiveDocument.FullName
The name of the document created by Consultation Report.dot is '20140106 Progress Report John Doe.doc' so I also tried:
Application.Run "'20140106 Progress Report John Doe.doc'!NewMacros.FaxCopyList2", ActiveDocument.FullName
All resulted in "Object doesn't support this property or method."
In vba help for Application.Run is the statement "If you specify the document name, your code can only run macros in documents related to the current context— not just any macro in any document."
So I tried setting a reference to Consultation Report.dot in the other document and then running:
Application.Run "'Consultation Report.dot'!NewMacros.FaxCopyList2", ActiveDocument.FullName
I still got "Object doesn't support this property or method."
Rgonzo1971,
>I was able to run a similar code with only the Name of the Sub because it is unique, but only when the dot file was the active document.
I tried that but it didn't work possibly because the dot file is not active document. I suppose I could have code in the second document to make Consultation Report.dot active but then I would have to pass the name of the file to the second document. If I am going to pass data to the second document, I might as well do what I am planning below.
Reg,
>If that doesn't help - is there a reason why you can't put the target procedure in the template for visit summary.doc as well?
The target procedure (FaxCopyList2) gets data from the document so to place a copy of FaxCopyList2 in the second document, I will need to pass that data from Consultation Report.dot to the second document. I have previously discovered I can pass data between two open documents using
ActiveDocument.Variables("VariableName")
So I guess I will do that: pass the data (a string of names and fax numbers) to the second document and run a version of FaxCopyList2 in the second document. It would be easier to just call FaxCopyList2 in Consultation Report.dot from the second document so I'll leave this question open in case someone else knows how to do it while I work the passing data method.
thenelson
ASKER
I tried the suggestions at: http://windowssecrets.com/forums/showthread.php/72715-Application-run-with-variables-(Word-XP)
but still no help. If I try the code:
Application.Run "'Consultation Report.dot'!Module1.FaxCopyList2"
without the argument, I get "Unable to run the specified macro" instead of "Object doesn't support this property or method." So I think your comment about "Variants as arguments rather than strings" is probably accurate if I can get Application.Run to work.
thenelson
ASKER
>If that doesn't help - is there a reason why you can't put the target procedure in the template for visit summary.doc as well?
I suppose your code is in Module1
Open in new window
Regards