【问题标题】:Get return value of Word macro function called from Excel macro获取从 Excel 宏调用的 Word 宏函数的返回值
【发布时间】:2020-08-25 21:18:09
【问题描述】:

我正在做一个 Excel 宏来获取 Word 文件的第一个表格(基本上是表格的标题)之前的第一段的文本。

我的 Excel 宏如下:

Sub Main()

    Set applicationWord = CreateObject("Word.Application")
    Set documentWord = applicationWord.Documents.Open(Filename:="C:\Users\...\my_word.docm", ReadOnly:=True)
    applicationWord.Visible = True
    applicationWord.Activate
    applicationWord.Run "GetFirstString"

    Set documentWord = Nothing
    Set applicationWord = Nothing

End Sub

我们不能像任何其他编程语言一样编写str = applicationWord.Run "GetFirstString" 来将返回字符串保存在变量中。 在我的Word文件my_word.docm中,我有以下宏GetFirstString

Function GetFirstString() As String

    GetFirstString = ActiveDocument.Tables(1).Range.Previous(Unit:=wdParagraph, Count:=1)
    
End Sub

这是一个原型。我想这样做是因为我想用从指定文件夹的每个 Word 文件中提取的文本编写一个 Excel 文件。我从 Excel 中尝试了以下宏,以查看是否能够使用 Paragraph 对象从 Word 文件中读取文本,但出现错误,此代码不适用于无法识别方法成员的 Excel VBA。

Private Sub ExtractionPrototype()

    Dim applicationWord As Object
    Dim documentWord As Object

    Set applicationWord = GetObject(, "Word.Application")
    applicationWord.Visible = True
    Set documentWord = applicationWord.Documents.Open(cheminDossierReparation)
    
    MsgBox documentWord.Tables(1).Range.Previous(Unit:=wdParagraph, Count:=1)

    documentWord.Close savechanges:=False

End Sub

有没有办法将值从 Word 宏返回到 Excel 宏? “Run 方法返回被调用宏返回的任何内容” 文档中写道,但是这个值到底是什么以及如何获取它?

【问题讨论】:

    标签: excel vba ms-word


    【解决方案1】:

    您的 ExtractionPrototype 例程不起作用的唯一原因是您使用了常量值 wdParagraph,它是 WdUnits 枚举的一部分,它没有在 Excel 中定义。要么用它的值 4 替换它,要么在你的例程中用这个值将它声明为一个常量。

    “我们不能写str = applicationWord.Run "GetFirstString"

    正确,因为您错过了告诉 VBA 您期望返回值的括号。所以你写str = applicationWord.Run("GetFirstString")

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-08
      • 2020-11-09
      • 2018-11-12
      • 1970-01-01
      • 1970-01-01
      • 2012-01-29
      • 1970-01-01
      • 2021-01-26
      相关资源
      最近更新 更多