Пользовательская форма для заполнения закладок в нескольких документах Word? - PullRequest
0 голосов
/ 24 апреля 2018

Я создал пользовательскую форму в Word, которая автоматически заполняет контракт с именем, адресом и т. Д. Консультанта. Однако у меня есть несколько контрактов, которые я отправляю каждому консультанту, и я хотел бы иметь возможность ввести информацию один рази чтобы он заполнил все контракты.

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

Вот код моей пользовательской формы для одного документа на случай, если он уместен - если бы у меня была такая точная форма, заполняющая несколько документов, это сэкономило бы много времени.

Private Sub CancelButton_Click()
    ConsultantInfo.Hide
End Sub

Private Sub FillButton_Click()
    Dim consultantName1 As Range
    Set consultantName1 = ActiveDocument.Bookmarks("ConsultantName1").Range
    Dim consultantName2 As Range
    Set consultantName2 = ActiveDocument.Bookmarks("ConsultantName2").Range
    Dim consultantName3 As Range
    Set consultantName3 = ActiveDocument.Bookmarks("ConsultantName3").Range
    Dim consultantNameCaps As Range
    Set consultantNameCaps = 
    ActiveDocument.Bookmarks("ConsultantNameCaps").Range
    consultantName1.Text = Me.TextName.Value
    consultantName2.Text = Me.TextName.Value
    consultantName3.Text = Me.TextName.Value
    consultantNameCaps.Text = Me.TextName.Value
    consultantNameCaps.Font.AllCaps = True
    Dim consultantTitle As Range
    Set consultantTitle = ActiveDocument.Bookmarks("ConsultantTitle").Range
    consultantTitle.Text = Me.TextTitle.Value
    Dim consultantAddress1 As Range
    Set consultantAddress1 = 
    ActiveDocument.Bookmarks("ConsultantAddress1").Range
    consultantAddress1.Text = Me.TextAddress1.Value
    Dim consultantAddress2 As Range
    Set consultantAddress2 = 
    ActiveDocument.Bookmarks("ConsultantAddress2").Range
    consultantAddress2.Text = Me.TextAddress2.Value
    Me.Repaint
    ConsultantInfo.Hide
End Sub

Private Sub FillSaveButton_Click()
    Dim consultantName1 As Range
    Set consultantName1 = ActiveDocument.Bookmarks("ConsultantName1").Range
    Dim consultantName2 As Range
    Set consultantName2 = ActiveDocument.Bookmarks("ConsultantName2").Range
    Dim consultantName3 As Range
    Set consultantName3 = ActiveDocument.Bookmarks("ConsultantName3").Range
    Dim consultantNameCaps As Range
    Set consultantNameCaps = 
    ActiveDocument.Bookmarks("ConsultantNameCaps").Range
    consultantName1.Text = Me.TextName.Value
    consultantName2.Text = Me.TextName.Value
    consultantName3.Text = Me.TextName.Value
    consultantNameCaps.Text = Me.TextName.Value
    consultantNameCaps.Font.AllCaps = True
    Dim consultantTitle As Range
    Set consultantTitle = ActiveDocument.Bookmarks("ConsultantTitle").Range
    consultantTitle.Text = Me.TextTitle.Value
    Dim consultantAddress1 As Range
    Set consultantAddress1 = 
    ActiveDocument.Bookmarks("ConsultantAddress1").Range
    consultantAddress1.Text = Me.TextAddress1.Value
    Dim consultantAddress2 As Range
    Set consultantAddress2 = 
    ActiveDocument.Bookmarks("ConsultantAddress2").Range
    consultantAddress2.Text = Me.TextAddress2.Value
    ActiveDocument.SaveAs2 FileName:=ActiveDocument.Path & "\Consulting 
    Agreement Master " & consultantName1, FileFormat:=wdFormatDocument
    ActiveDocument.SaveAs2 FileName:=ActiveDocument.Path & "\Consulting 
    Agreement Master " & consultantName1, FileFormat:=wdFormatPDF
    Me.Repaint
    ConsultantInfo.Hide
End Sub

1 Ответ

0 голосов
/ 25 апреля 2018

Можно связать документы Word с содержимым в закладках другого документа, используя поля IncludeText. Но это означает, что вам нужно сохранить закладки в этом «исходном» документе. Ваш код, как он есть, вероятно, удаляет закладки. Пример того, как вам нужно изменить код, чтобы убедиться, что данные находятся внутри закладки после записи данных в закладку:

Dim doc as Word.Document
Set doc = ActiveDocument
Dim rngConsultantNameCaps As Range
Dim sConsultantNameCaps as String
sConsultantNameCaps = "ConsultantNameCaps"
Set rngConsultantNameCaps = doc.Bookmarks(sConsultantNameCaps).Range
rngConsultantNameCaps.Text = Me.TextName.Value
doc.Bookmarks.Add(sConsultantNameCaps, rngConsultantNameCaps)

Откройте каждый документ (кроме «шаблона данных») и замените каждую закладку на поле:

{ IncludeText "Path and filename" "bookmarkName" }

(Помните, что скобки {} необходимо вставлять с помощью Ctrl + F9 , если вы делаете это вручную.)

Если все документы будут сохранены в одной папке, весь путь не требуется - достаточно имени файла источника. Word автоматически ищет в той же папке исходный файл.

Ссылка также приведет к форматированию символов. Если вы не хотите этого, добавьте переключатель \* CharFormat к коду поля, чтобы он сохранял формат, примененный к первому символу поля:

{ IncludeText "Path and filename" "bookmarkName" \* CharFormat }

Если имеется несколько документов, возможно, было бы даже целесообразно написать макрос для этого: просто зациклите закладки, сохраните имя закладки, вставьте поле в этом диапазоне с именем закладки.

Документы необходимо будет открывать по отдельности позднее, а поля обновлять (это также можно сделать при их печати).

Обратите внимание, что также возможно использовать поле Link, но этот тип поля взаимодействует с использованием OLE, что немного «перебивает» для зеркального отображения «простого» текста.

...