将 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
对象传递给子例程/函数的内容。尝试了byRef
和byVal
,它们都返回相同的错误。尝试将 sub 的参数更改为类型 Variant
并抛出 Runtime Error 424, Object Required
。我在引用中启用了Microsoft Word 16.0 Object Library
,它位于优先级列表的底部,是除默认值之外唯一添加的一个。
问题是,我做错了什么? Word.Document
或 Word.Application
不能作为参数传递吗?最终,我需要在多个不同的文档上执行这些子例程中的每一个的代码,因此仅在所需的单个值中进行编码并不是真正适用的选项。
【问题讨论】:
尝试删除这个括号PCL_PageLayout (oWordDocument)
(以及另一行) - 它们只在函数中需要,并且您将它们用作子例程。
如果您要使用参数来传递文档,则无需将 oWordDocument 声明为公共。而是在 GenerateWordProposal 中声明这些变量。
***.com/questions/5413765/…
所以事实证明我一直在为最明显的小错误撞墙。感谢 braX 让我知道,对本应简单的事情想得太用力是浪费时间和金钱。先生,您是一位绅士和一位学者。我对此很陌生,所以我可能需要一分钟才能弄清楚如何将您的评论作为解决方案并“投票”您。
另外,请记住,如果您在模块级别(公共/私有)声明此 word 文档,则不需要传递 itas 参数:如果它是公共的,您可以在任何模块,如果它是私有的,您可以在同一模块的任何子例程/函数中访问它
【参考方案1】:
braX 回答:去掉括号
PCL_PageLayout oWordDocument
【讨论】:
以上是关于将 Word.Document 传递给子例程的主要内容,如果未能解决你的问题,请参考以下文章