Создание элементов формы в Access с помощью закладок из документа Word - PullRequest
0 голосов
/ 13 июля 2020

Я пытаюсь создать пользовательский интерфейс в Access, который позволит импортировать любой готовый шаблон документа Word (.dotx), заполнить пустые поля формы с закладками данными из базы данных Access, а затем экспортировать в формате PDF . Я пытаюсь найти способ создать текстовое поле формы доступа для каждой закладки в документе Word, чтобы, когда пользователь хочет использовать программу, он мог сделать это, используя любой готовый файл .dotx независимо от номера закладок, которые он содержит. В настоящее время я не могу решить эту проблему, и я не уверен, что делать дальше, поскольку я новичок в VBA.

Код модуля:


Public Sub Main()
    
    On Error GoTo Trap
    
    Dim strSelectFile As String

    Dim StrTEMPLATE_PATH As String
    StrTEMPLATE_PATH = GetFile
    Dim strFullFileName As String
    Dim strFileName
    strFullFileName = Right(StrTEMPLATE_PATH, Len(StrTEMPLATE_PATH) - InStrRev(StrTEMPLATE_PATH, "\"))
    strFileName = Left(strFullFileName, (InStr(strFullFileName, ".") - 1))

    Dim wApp As Word.Application
    Dim wDoc As Word.Document
    Dim rs As DAO.Recordset
    Dim idx As Long
    
    Dim BkMrkCount

    Set wApp = New Word.Application
    wApp.Visible = False

    Set rs = CurrentDb.OpenRecordset("Detail Report - Individuals")
    If rs.EOF Then GoTo Leave
    
    Dim strClientName As String

    With rs
        .MoveLast
        .MoveFirst
    End With

    For idx = 1 To rs.RecordCount
        Set wDoc = wApp.Documents.Add(StrTEMPLATE_PATH)
        strClientName = rs!ClientName
        With wDoc
            If ActiveDocument.Bookmarks.Exists("FullName1") = True Then
            ActiveDocument.Bookmarks("FullName1").Select
            End If
            .Bookmarks("FullName1").Range.Text = Nz(rs!ClientName, vbNullString)
            .ExportAsFixedFormat "C:\User\FilePath\ExportFolder\" & strClientName & " " & strFileName & ".pdf", wdExportFormatPDF, False, wdExportOptimizeForOnScreen
            .Close wdDoNotSaveChanges
        End With
        Set wDoc = Nothing
        rs.MoveNext
    Next
    
    Exit Sub
    
Leave:
    On Error Resume Next
    If Not rs Is Nothing Then rs.Close
    If Not wDoc Is Nothing Then wDoc.Close wdDoNotSaveChanges
    If Not wApp Is Nothing Then wApp.Quit wdDoNotSaveChanges
    On Error GoTo 0
    Exit Sub

Trap:
    MsgBox Err.Description, vbCritical
    Resume Leave
    
End Sub

Function GetFile() As String
    Dim file As FileDialog
    Dim sItem As String
    Set file = Application.FileDialog(msoFileDialogFilePicker)
    
    With file
        .title = "Select a Folder"
        .allowMultiSelect = False
        If .Show <> -1 Then GoTo NextCode
        sItem = .SelectedItems(1)
    End With
NextCode:
    GetFile = sItem
    Set file = Nothing
End Function

Для большей ясности цель заключается в чтобы пользователь запускал программу из формы доступа, а затем будет сгенерирована новая форма с текстовыми полями / флажками / et c ... для каждой закладки .dotx, а затем пользователь сможет проверить, что форма заполняется правильными данными, а затем экспортируются заполненные файлы .dotx как файлы PDF.

В настоящее время код модуля будет работать правильно только в том случае, если следующий l oop написан для обработки точного количество закладок в .dotx, что, очевидно, представляет собой серьезное ограничение.

L oop:

For idx = 1 To rs.RecordCount
        Set wDoc = wApp.Documents.Add(StrTEMPLATE_PATH)
        strClientName = rs!ClientName
        With wDoc
            If ActiveDocument.Bookmarks.Exists("FullName1") = True Then
            ActiveDocument.Bookmarks("FullName1").Select
            End If
            .Bookmarks("FullName1").Range.Text = Nz(rs!ClientName, vbNullString)
            .ExportAsFixedFormat "C:\User\FilePath\ExportFolder\" & strClientName & " " & strFileName & ".pdf", wdExportFormatPDF, False, wdExportOptimizeForOnScreen
            .Close wdDoNotSaveChanges
        End With
        Set wDoc = Nothing
        rs.MoveNext
    Next

Я все еще очень новичок в SO, если мой вопрос раздражает, я заранее извиняюсь.

...