是否可以在 Word 字段代码中使用 VBA 函数?

Sve*_*sli 5 vba ms-word fieldcodes

我有一个带有一些功能的 Word 文档。我想在公式字段中访问这些函数,但这比预期的要难。

假设我有一个函数定义为

Public Function Area(R As Double) As Double
  Area = 3.14 * R * R
End Function
Run Code Online (Sandbox Code Playgroud)

并且我想在一个领域中使用它,就像这样

{ = Area(RadiusBookmark) }
Run Code Online (Sandbox Code Playgroud)

这看起来很简单,但我收到一个语法错误。如果我省略参数,像这样

{ = Area }
Run Code Online (Sandbox Code Playgroud)

我收到“未定义书签”错误,这让我相信只有书签可用于公式代码字段。

Thu*_*ame 2

Word 不允许您在字段中使用 VBA 函数。

\n\n

一种常见的方法是使用带有 , 的字段DocVariable,并使用一些由按下按钮或文档事件触发的 VBA,将变量的值设置为函数的结果,然后刷新字段值。

\n\n

DOCVARIABLE首先,向文档添加一个字段:

\n\n
\n

我的函数返回 \xe2\x80\x98 DOCVARIABLE MyFuncResult \\* MERGEFORMAT\xe2\x80\x99!

\n
\n\n

然后添加这个VBA:

\n\n
Option Explicit\n\nPrivate Function Foo() As String\n  Foo = "BAR"\nEnd Function\n\nPublic Sub setvar()\n\n  Const MYVAR As String = "MyFuncResult"\n\n  Dim var As Variable\n\n  On Error Resume Next\n  Set var = ThisDocument.Variables(MYVAR)\n  On Error GoTo 0\n\n  If var Is Nothing Then\n    Set var = ThisDocument.Variables.Add(MYVAR)\n  End If\n\n  var.Value = Foo\n\n  ThisDocument.Fields.Update\n\nEnd Sub\n
Run Code Online (Sandbox Code Playgroud)\n\n

您应该看到文档内容为:

\n\n
\n

我的函数返回 \xe2\x80\x98BAR\xe2\x80\x99!

\n
\n