Я очень новичок в VBA и мне нужна помощь! У меня есть макрос VB в Excel, который берет данные из документа Word и импортирует их в лист Excel. В настоящее время код в макросе имеет выражение, которое очищает активную таблицу и помещает новые записи. Однако мне нужно только обновить активный лист новыми записями или добавить новые записи. Итак, пытаясь понять, как это сделать в существующем коде.

Вот макрос:

Sub getWordFormData()
Dim wdApp As New Word.Application
Dim myDoc As Word.Document
Dim CCtl As Word.ContentControl
Dim myFolder As String, strFile As String
Dim myWkSht As Worksheet, i As Long, j As Long

myFolder = "C:\Users\zsirotilo\Documents\Retention DB\Interviews"
Application.ScreenUpdating = False

If myFolder = "" Then Exit Sub
Set myWkSht = ActiveSheet
ActiveSheet.Cells.Clear

Range("A1") = "Company Name"
Range("A1").Font.Bold = True
Range("C1") = "Date of Interview"
Range("C1").Font.Bold = True
Range("D1") = "Type of Company by Number(see Case Notes)"
Range("D1").Font.Bold = True

i = myWkSht.Cells(myWkSht.Rows.Count, 1).End(xlUp).Row
strFile = Dir(myFolder & "\*.docx", vbNormal)

While strFile <> ""
i = i + 1

Set myDoc = wdApp.Documents.Open(Filename:=myFolder & "\" & strFile,
AddToRecentFiles:=False, Visible:=False)

With myDoc
j = 0
For Each CCtl In .ContentControls
j = j + 1
myWkSht.Cells(i, j) = CCtl.Range.Text
Next
myWkSht.Columns.ColumnWidth = 25
End With
myDoc.Close SaveChanges:=False
strFile = Dir()
Wend
wdApp.Quit
Set myDoc = Nothing: Set wdApp = Nothing: Set myWkSht = Nothing
Application.ScreenUpdating = True

End Sub

1 ответ1

0

Должно работать, убрав строку ActiveSheet.Cells.Clear , потому что это строка, которая удаляет содержимое ячеек.

Строка i = myWkSht.Cells(myWkSht.Rows.Count, 1).End(xlUp).Row используется, чтобы узнать последнюю строку с контентом, чтобы записать новый контент с этого момента. Так что это будет работать до тех пор, пока в последней строке есть содержимое первого столбца.

Чтобы не читать одни и те же файлы снова и снова, необходимо переместить уже экспортированные файлы в другую папку. Моя идея заключается в следующем:

  1. Создайте папку, например:C:\Users\zsirotilo\Documents\Retention DB\Exported .

  2. Добавьте строку exportedFolder = "C:\Users\zsirotilo\Documents\Retention DB\Exported" после строки, которая определяет переменную myFolder .

  3. После строки myDoc.Close SaveChanges:=False добавьте следующие строки:

        FileCopy myDoc, exportedFolder & "\" & strFile 'copy word file to Exported folder
        Kill myDoc 'deletes the word file
    

Сделайте резервную копию файлов Word на C:\Users\zsirotilo\Documents\Retention DB\Interviews перед тестированием, поскольку это приведет к удалению файлов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .