Скопируйте один и тот же элемент управления контентом из Word в Excel несколько раз, используя VBA - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть папка, где я собрал много форм, заполненных многими людьми. Содержание этих форм затем копируется и вставляется в Excel каждую неделю. Код открывает каждый документ Word, присутствующий в папке, и копирует в Excel все элементы управления контентом, содержащиеся в документе Word. На рисунке 1 показан пример того, что делает код.

Что я хотел бы сделать, это несколько раз скопировать «Заголовок» в Excel, как показано на рисунке 2. Я попытался использовать множество различных циклов for. без хороших результатов.

What the code is doing

What I would like to code to do

Найдите в следующем мой код.

Sub GetFormData()
    'Note: this code requires a reference to the Word object model
    Application.ScreenUpdating = False
    Dim wdApp As New Word.Application
    Dim wdDoc As Word.Document
    Dim CCtrl As Word.ContentControl
    Dim FmFld As Word.FormField
    Dim strFolder As String, strFile As String
    Dim WkSht As Worksheet, i As Long, j As Long
    strFolder = GetFolder
    If strFolder = "" Then Exit Sub
    Set WkSht = ActiveSheet
    i = WkSht.Cells(WkSht.Rows.Count, 1).End(xlUp).Row
    strFile = Dir(strFolder & "\*.doc", vbNormal)
    While strFile <> ""
        i = i + 1
        Set wdDoc = wdApp.Documents.Open(Filename:=strFolder & "\" & strFile, AddToRecentFiles:=False, Visible:=False)
        With wdDoc
            j = 0
            For Each CCtrl In .ContentControls
                j = j + 1
                WkSht.Cells(i, j) = CCtrl.Range.Text
                If j = 5 Then
                 j = 0
                 i = i + 1
                End If
            Next
            'For Each FmFld In .FormFields
            '    j = j + 1
             '   WkSht.Cells(i, j) = FmFld.Result
            'Next
        End With
        wdDoc.Close SaveChanges:=False
        strFile = Dir()
    Wend
    wdApp.Quit
    Set wdDoc = Nothing: Set wdApp = Nothing: Set WkSht = Nothing
    Application.ScreenUpdating = True
    ' ------------------------------------------------
    ' ELIMINATE WHITE SPACES
    ' ------------------------------------------------
    Dim LastRowIndex As Integer
    Dim RowIndex As Integer
    Dim UsedRng As Range

    Set UsedRng = ActiveSheet.UsedRange
    LastRowIndex = UsedRng.Row - 1 + UsedRng.Rows.Count
    Application.ScreenUpdating = False

    For RowIndex = LastRowIndex To 1 Step -1
        If Application.CountA(Rows(RowIndex)) = 0 Then
            Rows(RowIndex).Delete
        End If
    Next RowIndex
    ' ------------------------------------------------
    ' INSERT BORDERS
    ' ------------------------------------------------
    Application.ScreenUpdating = True

       Application.ScreenUpdating = False

    Dim lngLstCol As Long, lngLstRow As Long

    lngLstRow = ActiveSheet.UsedRange.Rows.Count
    lngLstCol = ActiveSheet.UsedRange.Columns.Count

    For Each rngCell In Range(Range("A1"), Cells(lngLstRow, lngLstCol))
        If rngCell.Value > "" Then
            rngCell.Select 'Select cells
            With Selection.Borders
                .LineStyle = xlContinuous
                .Weight = xlThin
                .ColorIndex = xlAutomatic
            End With
        End If
    Next

    Application.ScreenUpdating = True

End Sub



Sub Clear()
 Rows("2:" & Rows.Count).ClearContents
 ActiveSheet.Cells.Borders.LineStyle = xlLineStyleNone
End Sub


Function GetFolder() As String
    Dim oFolder As Object
    GetFolder = ""
    Set oFolder = CreateObject("Shell.Application").BrowseForFolder(0, "Choose a folder", 0)
    If (Not oFolder Is Nothing) Then GetFolder = oFolder.Items.Item.Path
    Set oFolder = Nothing
End Function
...