Можно ли использовать функции VBA в полевых кодах Word?

У меня есть документ Word с некоторыми функциями. Я хочу получить доступ к этим функциям в полях формул, но это оказалось сложнее, чем предполагалось.

Допустим, у меня есть функция, определенная как

Public Function Area(R As Double) As Double
  Area = 3.14 * R * R
End Function

и что я хочу использовать это в поле, как это

{ = Area(RadiusBookmark) }

Это кажется довольно простым, но я получаю синтаксическую ошибку. Если я опущу параметр, как это

{ = Area }

Я получаю ошибку "неопределенная закладка", которая заставляет меня поверить, что только поля закладки доступны для полей кода формулы.

1 ответ

Word не позволяет вам использовать функции VBA в поле.

Одним из распространенных подходов является использование поля с DocVariableи иметь некоторый VBA, который вызывается нажатием кнопки или событием документа, который устанавливает значение переменной в качестве результата функции, а затем обновляет значение поля.

Сначала добавьте DOCVARIABLE поле для вашего документа:

Моя функция возвращаетDOCVARIABLE MyFuncResult \* MERGEFORMAT"!

Затем добавьте этот VBA:

Option Explicit

Private Function Foo() As String
  Foo = "BAR"
End Function

Public Sub setvar()

  Const MYVAR As String = "MyFuncResult"

  Dim var As Variable

  On Error Resume Next
  Set var = ThisDocument.Variables(MYVAR)
  On Error GoTo 0

  If var Is Nothing Then
    Set var = ThisDocument.Variables.Add(MYVAR)
  End If

  var.Value = Foo

  ThisDocument.Fields.Update

End Sub

И вы должны увидеть содержимое документа как:

Моя функция возвращает "BAR"!

Другие вопросы по тегам