将 Word.Document 传递给子例程

Posted

技术标签:

【中文标题】将 Word.Document 传递给子例程【英文标题】:Pass a Word.Document to a subroutine 【发布时间】:2020-08-10 19:41:04 【问题描述】:

我有一个 Excel 文档,其中已经包含很多代码,这些代码与我在此模块中使用的任何代码都无关。我遇到的问题是将Word.Document 类型的对象传递给一个子例程,该子例程最终会做一些事情来改变那个word 文档。首先,我的代码。

Option Explicit
Public oWordApplication As Word.Application
Public oWordDocument As Word.Document

Sub GenerateWordProposal()
    Set oWordApplication = New Word.Application
    Set oWordDocument = oWordApplication.Documents.Add
    oWordApplication.Visible = True
    oWordDocument.Activate
    PCL_PageLayout (oWordDocument)
    PCL_HeaderFooter (oWordDocument)
End Sub

Sub PCL_PageLayout (theDoc as Word.Document)
    'Nothing here yet.
    Debug.Print "PageLayout code"
End Sub

Sub PCL_HeaderFooter (theDoc as Word.Document)
    'Nothing here yet.
    Debug.Print "HeaderFooter code"
End Sub

所以当我执行这段代码时,我得到的错误是Compile Error: Type mismatch。我什至还没有以任何方式操纵它。我有很多东西打算在这里加入,因为传递给这个子例程的每个文档都需要从一开始就看起来相同。将有其他子例程根据 Excel 表中的信息修改各个文档,但尚未编码。

我在此处和 Google 上进行了搜索,但似乎找不到任何具体涉及将 Word.Document 对象传递给子例程/函数的内容。尝试了byRefbyVal,它们都返回相同的错误。尝试将 sub 的参数更改为类型 Variant 并抛出 Runtime Error 424, Object Required。我在引用中启用了Microsoft Word 16.0 Object Library,它位于优先级列表的底部,是除默认值之外唯一添加的一个。

问题是,我做错了什么? Word.DocumentWord.Application 不能作为参数传递吗?最终,我需要在多个不同的文档上执行这些子例程中的每一个的代码,因此仅在所需的单个值中进行编码并不是真正适用的选项。

【问题讨论】:

尝试删除这个括号PCL_PageLayout (oWordDocument)(以及另一行) - 它们只在函数中需要,并且您将它们用作子例程。 如果您要使用参数来传递文档,则无需将 oWordDocument 声明为公共。而是在 GenerateWordProposal 中声明这些变量。 ***.com/questions/5413765/… 所以事实证明我一直在为最明显的小错误撞墙。感谢 braX 让我知道,对本应简单的事情想得太用力是浪费时间和金钱。先生,您是一位绅士和一位学者。我对此很陌生,所以我可能需要一分钟才能弄清楚如何将您的评论作为解决方案并“投票”您。 另外,请记住,如果您在模块级别(公共/私有)声明此 word 文档,则不需要传递 itas 参数:如果它是公共的,您可以在任何模块,如果它是私有的,您可以在同一模块的任何子例程/函数中访问它 【参考方案1】:

braX 回答:去掉括号

    PCL_PageLayout oWordDocument

【讨论】:

以上是关于将 Word.Document 传递给子例程的主要内容,如果未能解决你的问题,请参考以下文章

如何将哈希传递给子例程?

将两个或多个数组传递给 Perl 子例程

批处理脚本子例程:传递参数

无法通过从两个不同子例程传递给新子例程的值来执行计算:Perl

如何将可分配数组传递给 Fortran 中的子例程

使用函数获取变量的值(将变量从函数传递到子例程)[重复]