语法运行运行VBA宏在Word文件中从Excel与一个参数

oknrviil  于 2023-08-08  发布在  其他
关注(0)|答案(2)|浏览(93)

我很抱歉用这些琐事来麻烦社区,但我被卡住了。我有一个Word文件,其中有宏,我已经在Word文件中测试。宏有一个参数,必须通过它来执行此操作。该参数将向代码发出信号,表明是否已从Word文件调用此宏,现在希望是是否已从Excel调用此宏,在Excel中,它将执行略有不同的操作。
当我不需要在代码中进行这个切换时,stackflow社区为我提供了功能完美的“run”方法:

'objW.Run "'" & d.FullName & "!" & MacroName   'This worked when the Macro did not have any parameters...

字符串
我现在已经尝试了以下7个不同的版本(显然在我注解掉它们之前一次一个),没有一个能用

Callcode = "Excel"
  
   MacroName = "GetCodedData"
   
 'objW.Run "'" & d.FullName & "!" & MacroName , & Callcode 'Version 1
  'objW.Run ("'" & d.FullName & "!" & MacroName ", " & Callcode)  'Version 2
  'objW.Run ("'" & d.FullName & "!" & MacroName, Callcode) 'Version 3
  'objW.Run "'" & d.FullName & "!" & MacroName(Callcode) 'Version 4
  'objW.Run "'" & d.FullName & "!" & MacroName "("Callcode")" 'Version 5
  'objW.Run "'" & d.FullName & "!" & MacroName & "(" & Callcode & ")" 'Version 6
  'objW.Run "'" & d.FullName & "!" & MacroName, varg1:=Callcode 'Version 7


版本1,2,3,5给予编译器错误。版本4给出了运行时错误13(不匹配类型,但我的变量被声明为与宏匹配),版本6给出了“无法运行指定的宏”,版本7给出了错误438。我显然错过了一些明显的东西。

nqwrtyyt

nqwrtyyt1#

你可以使用多个过程而不是一个参数(因为你还没有发布完整的Word代码,那么这可能需要调整以匹配它)

Sub CalledFromExcel()
    GetCodedData "Excel"
End Sub

Sub CalledFromWord()
    GetCodedData "Word"
End Sub

Sub GetCodedData(source As String)
    ' your existing code
End Sub

字符串
然后调整Excel中在Word中运行代码的行以调用CalledFromExcel而不是调用GetCodedData,Word可以调用CalledFromWord(或者您可以省略此操作,Word可以调用GetCodedData并直接传入“Word”)

kq4fsx7k

kq4fsx7k2#

我认为JohnM的解决方案是一个很好的方法。
以下是我在Excel中尝试的内容和结果。
请注意,如果包含sub的文档不是Word中的ActiveDocument,即使是“工作”方法也不起作用-您应该确保情况确实如此。
参见先前:https://stackoverflow.com/a/39543074/478884

Sub TestWordCall()
    Dim wdApp As Word.Application, doc
    Set wdApp = GetObject(, "Word.Application")
    
    Set doc = wdApp.Documents("WordMacro.docm")
    doc.Activate          '<<< if you have other docs open...
    Debug.Print doc.Name
    
    'No argument
    wdApp.Run "Tester"                                 'OK
    wdApp.Run "Module1.Tester"                         'OK
    wdApp.Run "'" & doc.Name & "'!Tester"             'Error: Object doesn't support this property or method
    wdApp.Run "'" & doc.FullName & "'!Tester"          'OK
    wdApp.Run "'" & doc.FullName & "'!module1.Tester"  'OK
    
    'With argument
    wdApp.Run "Tester", "Excel"                         'OK
    wdApp.Run "Module1.Tester", "Excel"                 'OK
    wdApp.Run "'" & doc.FullName & "'!Tester", "Excel"  'Error: Object doesn't support this property or method
    wdApp.Run "'" & doc.FullName & "'!Module1.Tester", "Excel"  'Error: Object doesn't support this property or method
End Sub

字符串
Word宏看起来像这样(在“WordMacro.docm”中的Module 1中)

Sub Tester(Optional arg As Variant)
    If IsMissing(arg) Then arg = "no argument"
    Debug.Print "Ran with '" & arg & "'"
End Sub

相关问题