?
Solved

run subroutine in a different document

Posted on 2014-01-06
8
Medium Priority
?
276 Views
Last Modified: 2014-01-13
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
0
Comment
Question by:thenelson
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 2
  • 2
8 Comments
 
LVL 52

Expert Comment

by:Rgonzo1971
ID: 39759249
Hi,

I suppose your code is in Module1

Application.Run "'Consultation Report.dot'!Module1.FaxCopyList2" , ActiveDocument.FullName

Open in new window

Regards
0
 
LVL 39

Author Comment

by:thenelson
ID: 39759298
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."
0
 
LVL 19

Accepted Solution

by:
regmigrant earned 2000 total points
ID: 39759793
I think application.run expects Variants as arguments rather than strings  - though it doesn't seem to care if the proc/function is local.

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?

Reg
0
Comprehensive Backup Solutions for Microsoft

Acronis protects the complete Microsoft technology stack: Windows Server, Windows PC, laptop and Surface data; Microsoft business applications; Microsoft Hyper-V; Azure VMs; Microsoft Windows Server 2016; Microsoft Exchange 2016 and SQL Server 2016.

 
LVL 52

Expert Comment

by:Rgonzo1971
ID: 39759955
Hi,

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.

Could it be a solution to your problem?

Regards
0
 
LVL 39

Author Comment

by:thenelson
ID: 39762656
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.
0
 
LVL 39

Author Comment

by:thenelson
ID: 39762769
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.
0
 
LVL 39

Author Closing Comment

by:thenelson
ID: 39764824
>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?

That's what I ended up doing.

Thanks!
0
 
LVL 19

Expert Comment

by:regmigrant
ID: 39776196
thanks for following up - sorry I wasn't around to help but glad you got it sorted
0

Featured Post

How Blockchain Is Impacting Every Industry

Blockchain expert Alex Tapscott talks to Acronis VP Frank Jablonski about this revolutionary technology and how it's making inroads into other industries and facets of everyday life.

Question has a verified solution.

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

This article describes how you can use Custom Document Properties to store settings and other information in your workbook so that they will be available the next time you open the workbook.
Ever visit a website where you spotted a really cool looking Font, yet couldn't figure out which font family it belonged to, or how to get a copy of it for your own use? This article explains the process of doing exactly that, as well as showing how…
The view will learn how to download and install SIMTOOLS and FORMLIST into Excel, how to use SIMTOOLS to generate a Monte Carlo simulation of 30 sales calls, and how to calculate the conditional probability based on the results of the Monte Carlo …
Excel styles will make formatting consistent and let you apply and change formatting faster. In this tutorial, you'll learn how to use Excel's built-in styles, how to modify styles, and how to create your own. You'll also learn how to use your custo…

801 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