从Word提取数据/控件到Excel

时间:2019-06-19 20:12:38

标签: excel vba ms-word

目前,我有一份Word文档,是一份问卷。

格式(共30个问题):

名称:

1. Question
YES checkbox
NO checkbox
Comments

2. Question
YES checkbox
NO checkbox
Comments

复选框和注释是控件。

我想做的是将复选框提取并注释数据到excel中。例如,

1. Do you spend time under the sun?
YES checkbox is selected
Comments: I spend 2 days out of the week in the sun.

我希望它在excel中显示。

enter image description here

每次运行宏时,都应在现有记录(行)下方添加新信息。

我通常使用Word并将Excel中的数据提取到word中,但是我从未尝试过使用它。

这是我到目前为止提出的:

Sub Macro1()
    Application.ScreenUpdating = False
    Dim lRow As Long, i As Long, j As Long, iCtr As Long, cBox As CheckBox, StrFlNm As String
    With Application.FileDialog(FileDialogType:=msoFileDialogFilePicker)
        SendKeys "%n *.doc ~"
        If .Show = True Then
            StrFlNm = .SelectedItems(1)
        Else
            Exit Sub
        End If
    End With
    Application.Volatile

    For Each cBox In ActiveSheet.CheckBoxes
        If cBox.Value = 1 Then
            iCtr = iCtr + 1
        End If
    Next cBox
    CheckedCount = iCtr
End Sub

可以选择文件,但是什么也没有发生。如果我能确定如何将其应用于一个复选框,那么我应该能够弄清楚剩下的事情。我们将继续更新代码,我已对其进行了无数次更改。

激活了Microsoft Object并运行了新代码。选择文件后,系统会提示我该消息。

enter image description here

1 个答案:

答案 0 :(得分:1)

代码的前半部分只给您一个文件名而已。那时,Excel对文档的内容一无所知。
在这里,您将需要打开文档,为此,您需要引用Word的对象模型。 在“工具-引用”中,选择 Microsoft Word nn对象库
现在,Excel可以使用Word文档。

执行以下操作:

Sub Macro1()
    Dim lRow As Long, i As Long, j As Long, iCtr As Long, cBox As ContentControl, StrFlNm As String

    With Application.FileDialog(FileDialogType:=msoFileDialogFilePicker)
        SendKeys "%n *.doc ~"
        If .Show = True Then
            StrFlNm = .SelectedItems(1)
        Else
            Exit Sub
        End If
    End With

    Application.Volatile

    Dim Doc As Word.Document
    Set Doc = Word.Documents.Open(StrFlNm)
    Debug.Print Doc.Range.ContentControls.Count

    For Each cBox In Doc.Range.ContentControls
        If cBox.Checked Then
            iCtr = iCtr + 1
        End If
    Next cBox
    CheckedCount = iCtr
    Doc.Close
End Sub