Word Fill VBA в MS Access для различных полей в таблице - PullRequest
1 голос
/ 07 января 2020

Для нашей стороны управления инцидентами в нашей базе данных я пытаюсь создать данные из полей в моей таблице (таблицах) в 149 отчете о расследованиях, шаблоне документа Word, предоставляемом государством ( см. Ссылку здесь ).

Я сделал версию документа, предназначенную только для чтения, чтобы сохранить его целостность путем принудительного сохранения пользователем, и загрузил его с полями текстовой формы с закладками для ссылки (пример: txtcaseintroduction).

Я изменил код, найденный в inte rnet для работы с полями формы, и назначил его кнопке на одной из моих форм, чтобы помочь при создании отчета (ссылка Open изменена в целях безопасности ):

Private Sub cmdPrint_Click()

'Export 149 Report.

Dim appWord As Word.Application

Dim doc As Word.Document

'Avoid error 429, when Word isn't open.

On Error Resume Next

Err.Clear

'Set appWord object variable to running instance of Word.

Set appWord = GetObject(, "Word.Application")

If Err.Number <> 0 Then

'If Word isn't open, create a new instance of Word.

Set appWord = New Word.Application

End If

Set doc = appWord.Documents.Add("Y:\ABC\2018\Case Files\2018 - Incident Forms\OPWDD 149 - Access Database Reference.docx", , True)

With doc
    .FormFields("txtNIMRS").Result = Me.NIMRSID
    .FormFields("txtInternalID").Result = Me.InternalIncidentID
    .FormFields("txtIncidentDate").Result = Me.[IncidentOccurrenceDate]
    .FormFields("txtDiscoverydate").Result = Me.[IncidentReportDate]
    .FormFields("txtCaseIntroduction").Result = Me.CaseIntroduction
    .FormFields("txtIncidentLocation").Result = Me.Location
    .FormFields("txtBackground").Result = Me.BackgroundInfo
    .FormFields("txtProtections").Result = Me.ImmedProtec
    .FormFields("txtQuestion").Result = Me.InvestQuestion
    .FormFields("txtTestName").Result = Me.[TestimonialEvidence]
    .FormFields("txtDocumentaryE").Result = Me.[DocumentaryEvidence]
    .FormFields("txtDemonstrativeE").Result = Me.[DemonstrativeEvidence]
    .FormFields("txtPhysicalE").Result = Me.[PhysicalEvidence]
    .FormFields("txtWSName").Result = Me.[WrittenStatements]
    .FormFields("txtSummary").Result = Me.SummaryEvidence
    .FormFields("txtConclusions").Result = Me.Text409
    .FormFields("txtRecommendations").Result = Me.Text411
    .FormFields("txtInvestigator").Result = Me.Investigator_s__Assigned
    .FormFields("txtdatereport").Result = Me.Investigative_Report_Completion_Date
.Visible = True

.Activate

End With

Set doc = Nothing

Set appWord = Nothing

Exit Sub

errHandler:

MsgBox Err.Number & ": " & Err.Description

End Sub

Работают следующие поля:

 .FormFields("txtNIMRS").Result = Me.NIMRSID
        .FormFields("txtInternalID").Result = Me.InternalIncidentID
        .FormFields("txtIncidentDate").Result = Me.[IncidentOccurrenceDate]
        .FormFields("txtDiscoverydate").Result = Me.[IncidentReportDate]
.FormFields("txtIncidentLocation").Result = Me.Location
        .FormFields("txtBackground").Result = Me.BackgroundInfo
        .FormFields("txtProtections").Result = Me.ImmedProtec
        .FormFields("txtQuestion").Result = Me.InvestQuestion
 .FormFields("txtConclusions").Result = Me.Text409
        .FormFields("txtRecommendations").Result = Me.Text411
.FormFields("txtdatereport").Result = Me.Investigative_Report_Completion_Date

Остальные поля (case introduction, investigator и поля вложений) не работают. Все эти поля существуют в одной таблице. Также отмечается, что введение случая работало, но перестало работать, так как я попытался выяснить больше полей формы для применения к документу и справке. Цель состояла в том, чтобы следователь по существу выполнил всю свою работу в базе данных, а затем экспортировал ее в требуемый формат для отправки в штат.

Мой вопрос : что мне нужно сделать с приведенным выше кодом, чтобы получить функциональные нерабочие поля при заполнении документа Word?

Отвечая на вопросы в комментариях

  • Ошибка не возникает; текстовые поля просто не заполняются, когда я нажимаю кнопку.

  • Поля формы не должны присутствовать в результирующем документе. Они просто "цели" для данных.

1 Ответ

1 голос
/ 23 января 2020

Поскольку поля формы не нужно сохранять в результирующем документе, простейшим подходом было бы просто вставить данные в FormField.Range, который заменит (удалит) поле формы. Весь код может быть написан таким образом, если важна согласованность (как конечный результат выглядит для пользователя), но с точки зрения программирования нет необходимости.

Примечание. Если защита форм активирована, ее необходимо отключить, чтобы этот подход работал

If doc.ProtectionType <> -1 Then doc.Unprotect  '-1 = wdNoProtection

Пример строки кода для строки длиной более 255 символов

.FormFields("txtCaseIntroduction").Range = Me.CaseIntroduction
...