Есть ли в VBA макрос для Word, который автоматически изменяет текст в разных местах? - PullRequest
0 голосов
/ 21 апреля 2020

В настоящее время я занимаюсь автоматизацией некоторых файлов слов для моей компании. На данный момент у меня возникли проблемы с автоматизацией определенной части документа. До сих пор я использовал этот код, чтобы автоматически заполнять определенную область, помеченную специальным c текстовым полем (в данном случае; initialen_achternaam):

Sub Document_Open()
ActiveDocument.FormFields("initialen_achternaam").Result = InputBox("Wat zijn de initialen en achternaam van de nieuwe medewerker?", "", "A. de Vries")
End Sub

Этот код, после ответа на поле ввода, автоматически отображает ответ в указанной области. Однако определенные ответы на эти поля ввода должны отображаться в нескольких областях. Кто-нибудь знает как это включить?

Кроме того, я хочу, чтобы определенный абзац зависел от ответа на поле ввода. Итак, скажем, если ответ на вышеупомянутое поле ввода - да, тогда он показывает параграф A, иначе он показывает параграф B. Я не знаю, как написать этот код или как пометить его в документе word, чтобы уточнить позицию пункта.

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

Вам не нужно записывать одни и те же данные в разные поля формы; все, что вам нужно сделать, это настроить документ для использования перекрестных ссылок на внутреннюю закладку первого поля формы (в данном случае 'initialen_achternaam'). Таким образом, вам нужно будет записать каждый элемент данных только один раз. Когда вы закончите запись в поля формы, все, что вам нужно, это одна строка кода:

ActiveDocument.Fields.Update

Что касается изменения вывода в зависимости от того, что вы пишете в поле формы 'initialen_achternaam', например, вы использовать поле IF в документе, закодированном по линиям:

{IF{REF initialen_achternaam}= "Yes" "Text for Yes", "Text for No"}

Примечание: Созданы все пары фигурных скобок (то есть '{}') для приведенного выше примера в самом документе, через Ctrl-F9 (Cmd-F9 на Ma c или, если вы используете ноутбук, вам может понадобиться Ctrl-Fn-F9); Вы не можете просто напечатать их или скопировать и вставить их из этого сообщения. Пространства, представленные в полевой конструкции, являются обязательными.

0 голосов
/ 21 апреля 2020

Иллюстрация предложения PeterT:

Sub Document_Open()
    Dim InputText As String
    InputText = InputBox("Wat zijn de initialen en achternaam van de nieuwe medewerker?", "", "A. de Vries")
    With ActiveDocument
        .FormFields("initialen_achternaam").result = InputText
        .FormFields("formfield2").result = InputText
        .FormFields("formfield3").result = InputText
    End With
End Sub

Вот один из способов отображения альтернативного текста в зависимости от полученного ответа. Введите оба абзаца в текст, оберните каждый абзац в закладке, затем выберите оба и выберите «Формат»> «Шрифт»> «Скрытый». Абзацы исчезнут. Затем используйте этот код для выборочного отображения абзаца:

Public HiddenTextVisibleb As Boolean, HiddenTextPrintsb As Boolean

Sub AutoOpen()
    If Options.PrintHiddenText = True Then
        HiddenTextPrintsb = True
        Options.PrintHiddenText = False
    End If
    If ActiveWindow.View.ShowHiddenText = True Then
        HiddenTextVisibleb = True
        ActiveWindow.View.ShowHiddenText = False
    End If
End Sub

Sub ShowHideParagraphs()
    Dim InputText As String
    InputText = InputBox("Wat zijn de initialen en achternaam van de nieuwe medewerker?", "", "A. de Vries")
    If InputText = "Yes" Or InputText = "yes" Then
        ActiveDocument.Bookmarks("Paragraph1").Range.Font.Hidden = False
    Else
        ActiveDocument.Bookmarks("Paragraph2").Range.Font.Hidden = False
    End If
End Sub

Sub AutoClose()
    If HiddenTextPrintsb = True Then
        Options.PrintHiddenText = True
    End If
    If HiddenTextVisibleb = True Then
        ActiveWindow.View.ShowHiddenText = True
    End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...