Как обратиться к полю слова по имени в коде VBA? - PullRequest
1 голос
/ 08 января 2020

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

У меня следующий код:

Sub UpdateField()
  Dim myString As String
  myString = "asdf"
  ActiveDocument.Fields(1).Result.Text = myString
End Sub

Предположим, что имя поля MyField1. Следующий код не будет работать (я получаю ошибку времени выполнения «13»: несоответствие типов ».

Sub UpdateField()
  Dim myString As String
  myString = "asdf"
  ActiveDocument.Fields("MyField1").Result.Text = myString
End Sub

Я создаю поля слова из меню« Файл »>« Информация »>« Дополнительные свойства »>« Пользовательская вкладка ».

Итак, как обращаться к имени поля, когда мы хотим обновить его содержимое?

Ответы [ 2 ]

0 голосов
/ 09 января 2020

Это поля DocProperty. Если вы нажмете Alt + F9, вы увидите поле коды .

A DocProperty поле ссылается (ссылается на) на свойство документа. Свойство Document имеет имя, но оно не «именует» поле. Также невозможно обновить поле DocProperty напрямую, поскольку оно ссылается на свойство документа. Может быть возможно заставить временно отображать что-то еще, но это будет потеряно при каждом обновлении поля.

Чтобы обновить поле DocProperty, необходимо обновить Основное свойство документа. Например

Sub EditDocPropUpdateDocPropertyField()
    Dim doc As Word.Document
    Dim prop As Office.DocumentProperty
    Dim propName As String
    Dim newPropValue As String

    Set doc = ActiveDocument
    propName = "MyField"
    newPropValue = "new value"
    Set prop = doc.CustomDocumentProperties(propName)
    prop.value = newPropValue
    doc.Fields.Update

End Sub
0 голосов
/ 08 января 2020

В VBE, Object Browser - отличный способ узнать, что возможно. Когда я нахожу Word> Field и нажимаю на него, я вижу список членов Field. Имя отсутствует в этом списке. Это означает, что у объекта поля нет свойства Name. Вот почему вы получаете ошибку.

Вы можете обойти это. Одним из способов является создание закладки вокруг рассматриваемого поля. Затем в коде найдите закладку по имени, затем найдите поле по индексу внутри диапазона закладок.

...