Microsoft Access VBA - 从未命名的 Word 表单域导入数据

万能的

我的任务是将 Microsoft Word 表单的内容导入我的 Access 数据库。使用以下从表单触发的 VBA 代码可以正常工作:

Private Sub cmdFileDialog_Click()
  On Error GoTo ErrorHandler
    Dim objDialog As Object
    Dim varFile As Variant
    Dim rec, rec2 As Recordset
    Dim db As Database

    'New Word Document Variables
    Dim appWord As Word.Application
    Dim doc As Word.Document

    Const DEST_TABLE = "ap_behaviour_referrals" 'change to suit
    Const PATH_DELIM = "\"

    Set objDialog = Application.FileDialog(3)
    ' Clear listbox contents.
    Me.fileList.RowSource = ""

With objDialog
    .AllowMultiSelect = False
    ' Set the title of the dialog box.
    .Title = "Please select a behaviour referral to import"
    ' Clear out the current filters, and add our own.
      .Filters.Clear
      .Filters.Add "Microsoft Word Forms", "*.docx"
      .Filters.Add "All Files", "*.*"
    .Show
    If .SelectedItems.Count = 0 Then
        MsgBox "No file selected."
    Else
        For Each varFile In .SelectedItems
            'New docx Variable Actions
            Set appWord = GetObject(, "Word.Application")
            Set doc = appWord.Documents.Open(varFile)

        Next

        Set db = CurrentDb
        Set rec = db.OpenRecordset(DEST_TABLE)

        With rec
            .AddNew
            ' my data
            'preformat the date fields from the form
            Dim unformattedpupildob As String
            Dim formattedpupildob As Date
            unformattedpupildob = doc.FormFields("Text2").Result
            unformattedpupildob = Replace(unformattedpupildob, ".", "/")
            formattedpupildob = Format(unformattedpupildob, "dd/mm/yy")
            'And now insert the record into the table
            !pupil_name = doc.FormFields("Text1").Result
            !pupil_dob = formattedpupildob
            !pupil_yr_grp = doc.FormFields("Text3").Result
            !pupil_submitted_eth = doc.FormFields("Text4").Result
            !pupil_upn = doc.FormFields("Text5").Result
            !pupil_looked_after = doc.FormFields("Text6").Result
            !sen_pre_statement = doc.FormFields("Text7").Result
            !sen_ehcp = doc.FormFields("Text8").Result
            !cat_date_final_ehcp = doc.FormFields("Text9").Result
            !num_exclusion = doc.FormFields("Text10").Result
            !days_exclusion = doc.FormFields("Text11").Result
            !sch_name = doc.FormFields("Text12").Result
            !sch_no = doc.FormFields("Text14").Result
            !contact_name = doc.FormFields("Text13").Result
            !contact_role = doc.FormFields("Text40").Result
            !contact_email = doc.FormFields("Text31").Result
            .Update
            .Close
            MsgBox "File Processing Complete"
        End With
    End If
End With
Set objDialog = Nothing
Me.fileList.RowSource = ""
ExitSub:
    Set rec = Nothing
    Set db = Nothing
    '...and set it to nothing
    Exit Sub
ErrorHandler:
    If Err.Number <> 0 Then
        Msg = "Error # " & Str(Err.Number) & " was generated by " & Err.Source & Chr(13) & "Error Line: " & Erl() & Chr(13) & Err.Description
        MsgBox Msg, , "Error", Err.HelpFile, Err.HelpContext
    End If
    Resume ExitSub
End Sub

除了其中一个字段之外的所有字段都被(严重)添加了书签,因此我可以使用它来获取字段的内容,但是,我遇到了一个未命名的表单字段:

Word 未命名表单域

我需要导入,但我不知道如何在没有命名书签的情况下获取其中的内容。

我无法修改表单,因为它由其他人控制并且分布广泛,但是想知道是否有任何方法可以在不命名的情况下提取该字段的内容?

谢谢!

其他

与其他对象集合一样,您可以通过名称(就像您对其他字段所做的那样)或数字索引来寻址它们。

For i = 1 To doc.FormFields.Count
    Debug.Print i, doc.FormFields(i).Result
Next i

如果您知道其内容,这应该为您提供该字段的索引。

然后!the_answer = doc.FormFields(42).Result在您的代码中使用(42是一个例子!)

编辑:最小工作示例(在 Access 中运行):

Public Sub TestWord()

    Dim oWord As Word.Application
    Dim oDoc As Word.Document
    Dim i As Long

    Set oWord = CreateObject("Word.Application")
    Set oDoc = oWord.Documents.Open("C:\Users\foobar\Documents\Dok1.docx")
    oWord.Visible = True

    For i = 1 To oDoc.FormFields.Count
        Debug.Print i, oDoc.FormFields(i).Name, oDoc.FormFields(i).Result
    Next i

    oDoc.Close
    oWord.Quit

End Sub

直接窗口 (Ctrl+g) 列出所有表单字段及其索引、名称 = 书签和默认文本。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

VBA Microsoft Word

来自分类Dev

Microsoft Access VBA将数据从表单添加到表未绑定的表单

来自分类Dev

Microsoft Access VBA错误461

来自分类Dev

Microsoft Access VBA Datediff 错误

来自分类Dev

将数据从MySQL导入Microsoft Word

来自分类Dev

通过VBA更新Microsoft Word链接项

来自分类Dev

跟踪Microsoft Access VBA代码的困难

来自分类Dev

Microsoft Access VBA INSERT SQL 语句

来自分类Dev

打开错误时的 Microsoft Access VBA

来自分类Dev

如何在Microsoft Access VBA中将字符串转换为实际的表单标签标题?

来自分类Dev

VBA:不允许我更改Microsoft Access中另一个表单的RecordSource

来自分类Dev

Excel VBA - 将书签/表单域交叉引用到 Word

来自分类Dev

使用 VBA 将数据导入 Access

来自分类Dev

如果以链接形式输入数据,Microsoft Access 2013中的VBA标记复选框

来自分类Dev

Microsoft Access创建隐藏表单

来自分类Dev

Microsoft将VBA转移重点从访问转移到Word

来自分类Dev

使用Microsoft Word VBA-宏以添加前导零

来自分类Dev

VBA Microsoft Word 2003 + MsgBox并更改为.doc文件

来自分类Dev

Microsoft将VBA转移重点从访问转移到Word

来自分类Dev

使用Microsoft Word设置和获取变量(无VBA)

来自分类Dev

VBA Microsoft Word 2003 + MsgBox并更改为.doc文件

来自分类Dev

VBA,将光标移到Microsoft Word中页面的开头

来自分类Dev

如何使用Microsoft Word创建Web表单?

来自分类Dev

提取数据并比较Microsoft Access

来自分类Dev

如何将psv数据导入Microsoft Access

来自分类Dev

将数据从Word 2003(Doc)文件导入到Access?

来自分类Dev

如何使用word vba拆分Microsoft Word表格中所有垂直合并的单元格?

来自分类Dev

通过VBA / SQL从Excel App更新Microsoft Access表字段

来自分类Dev

Microsoft Access VBA在计算中使用变量字段

Related 相关文章

  1. 1

    VBA Microsoft Word

  2. 2

    Microsoft Access VBA将数据从表单添加到表未绑定的表单

  3. 3

    Microsoft Access VBA错误461

  4. 4

    Microsoft Access VBA Datediff 错误

  5. 5

    将数据从MySQL导入Microsoft Word

  6. 6

    通过VBA更新Microsoft Word链接项

  7. 7

    跟踪Microsoft Access VBA代码的困难

  8. 8

    Microsoft Access VBA INSERT SQL 语句

  9. 9

    打开错误时的 Microsoft Access VBA

  10. 10

    如何在Microsoft Access VBA中将字符串转换为实际的表单标签标题?

  11. 11

    VBA:不允许我更改Microsoft Access中另一个表单的RecordSource

  12. 12

    Excel VBA - 将书签/表单域交叉引用到 Word

  13. 13

    使用 VBA 将数据导入 Access

  14. 14

    如果以链接形式输入数据,Microsoft Access 2013中的VBA标记复选框

  15. 15

    Microsoft Access创建隐藏表单

  16. 16

    Microsoft将VBA转移重点从访问转移到Word

  17. 17

    使用Microsoft Word VBA-宏以添加前导零

  18. 18

    VBA Microsoft Word 2003 + MsgBox并更改为.doc文件

  19. 19

    Microsoft将VBA转移重点从访问转移到Word

  20. 20

    使用Microsoft Word设置和获取变量(无VBA)

  21. 21

    VBA Microsoft Word 2003 + MsgBox并更改为.doc文件

  22. 22

    VBA,将光标移到Microsoft Word中页面的开头

  23. 23

    如何使用Microsoft Word创建Web表单?

  24. 24

    提取数据并比较Microsoft Access

  25. 25

    如何将psv数据导入Microsoft Access

  26. 26

    将数据从Word 2003(Doc)文件导入到Access?

  27. 27

    如何使用word vba拆分Microsoft Word表格中所有垂直合并的单元格?

  28. 28

    通过VBA / SQL从Excel App更新Microsoft Access表字段

  29. 29

    Microsoft Access VBA在计算中使用变量字段

热门标签

归档