如何使用VBA将Microsoft Word内容控件字段数据写入文本文件?

问题描述 投票:0回答:1

我有一个看似微不足道的VBA任务。但是,我通常不使用VBA,并且在Microsoft Word的上下文中几乎不使用VBA。我有一个Word表单,该表单利用了Content Control字段(以及一些ActiveX单选按钮),并且需要通过将时间戳记和完整的表单条目打印到以逗号分隔的文件中进行测试。当我运行以下代码时:

Sub WriteToText()
Dim DataFile As String
Dim StrData As String
Dim CCtrl As ContentControl
Dim bControl_Exists As Boolean

DataFile = "C:\Users\Annabanana\Documents\Data.txt"
StrData = "": Open DataFile For Append As #1
StrData = Format(Now, "DD-MMM-YYYY hh:mm:ss")

With Application.ActiveDocument
    bControl_Exists = .Saved
    For Each CCtrl In ThisDocument.ContentControls
        With CCtrl
            Select Case .Type
                Case Is = wdContentControlCheckBox
                    StrData = StrData & "," & .Checked
                Case wdContentControlDate, wdContentControlDropdownList, wdContentControlComboBox, wdContentControlText
                    StrData = StrData & "," & .Range.Text
                Case Else
            End Select
        End With
    Next
End With
Print #1, StrData: Close #1
End Sub

我得到了日期戳,但没有别的。理想情况下,我最终希望这样打印字段标签及其相应的值:

Tag1 Value1Tag2值2Tag3值3.............

最终所有这些都将打印到数据库,但是在这一点上,我只希望能够看到数据是如何从表单中提取出来的,以及在加载之前如何转换数据。任何意见是极大的赞赏。谢谢。

ms-word word-vba word-contentcontrol
1个回答
0
投票

从本质上讲,您的问题归结于对ThisDocument的滥用。试试:

Sub GetCCtrlData()
Dim CCtrl As ContentControl, StrData As String, DataFile As String
StrData = Format(Now, "DD-MMM-YYYY hh:mm:ss")
DataFile = "C:\Users\" & Environ("UserName") & "\Documents\Data.txt"
For Each CCtrl In ActiveDocument.ContentControls
  With CCtrl
    StrData = StrData & vbTab & .Title & "|" & .Tag & ": "
    Select Case .Type
      Case Is = wdContentControlCheckBox
        StrData = StrData & .Checked
      Case wdContentControlDate, wdContentControlDropdownList, wdContentControlRichText, wdContentControlText
        StrData = StrData & .Range.Text
      Case Else
    End Select
  End With
Next
Open DataFile For Append As #1: Print #1, StrData: Close #1
End Sub

上面的代码还使用制表符而不是逗号来导出内容控件的标题和标签。使用制表符分隔符可以防止数据中出现逗号。

我想在某个阶段,您将要处理多个文档。为此,请参见:http://www.vbaexpress.com/forum/showthread.php?40406-Extracting-Word-form-Data-and-exporting-to-Excel-spreadsheet&p=257696&viewfull=1#post257696。尽管此处的代码将数据提取到Excel工作簿中,但基本原理是相同的。

© www.soinside.com 2019 - 2024. All rights reserved.