如何使用 VBA 将 Microsoft Word 内容控制字段数据写入文本文件?
How do I write Microsoft Word Content Control field data to a text file using VBA?
我有一个看似微不足道的 VBA 任务。但是,我通常不使用 VBA 并且几乎从不在 Microsoft Word 的上下文中使用。我有一个使用内容控制字段(以及一些 ActiveX 单选按钮)的 Word 表单,需要通过将时间戳和完整的表单条目打印到逗号分隔文件来测试它。当我运行下面的代码:
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
我得到了日期戳,但没有别的。理想情况下,我希望最终打印字段标签及其相应的值:
标记 1 值 1
标记 2 值 2
标记 3 值 3
............
最终所有这些都会打印到数据库中,但此时我只想能够看到数据是如何从表单中产生的,以及我需要如何在加载之前转换它。任何意见是极大的赞赏。谢谢。
从本质上讲,您的问题归结为对 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
上面的代码还导出了内容控件标题和标签,使用 tab-delimiters 而不是逗号。使用 tab-delimiters 允许数据中可能存在逗号。
我想,在某个阶段,您会想要处理多个文档。为此,请参阅:http://www.vbaexpress.com/forum/showthread.php?40406-Extracting-Word-form-Data-and-exporting-to-Excel-spreadsheet&p=257696&viewfull=1#post257696。尽管那里的代码将数据提取到 Excel 工作簿,但基本原理是相同的。
我有一个看似微不足道的 VBA 任务。但是,我通常不使用 VBA 并且几乎从不在 Microsoft Word 的上下文中使用。我有一个使用内容控制字段(以及一些 ActiveX 单选按钮)的 Word 表单,需要通过将时间戳和完整的表单条目打印到逗号分隔文件来测试它。当我运行下面的代码:
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
我得到了日期戳,但没有别的。理想情况下,我希望最终打印字段标签及其相应的值:
标记 1 值 1 标记 2 值 2 标记 3 值 3 ............
最终所有这些都会打印到数据库中,但此时我只想能够看到数据是如何从表单中产生的,以及我需要如何在加载之前转换它。任何意见是极大的赞赏。谢谢。
从本质上讲,您的问题归结为对 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
上面的代码还导出了内容控件标题和标签,使用 tab-delimiters 而不是逗号。使用 tab-delimiters 允许数据中可能存在逗号。
我想,在某个阶段,您会想要处理多个文档。为此,请参阅:http://www.vbaexpress.com/forum/showthread.php?40406-Extracting-Word-form-Data-and-exporting-to-Excel-spreadsheet&p=257696&viewfull=1#post257696。尽管那里的代码将数据提取到 Excel 工作簿,但基本原理是相同的。