Копировать из книги Excel в документ из Word без добавления ссылки - PullRequest
0 голосов
/ 25 января 2020

Я хочу создать макрос проверки орфографии для защищенных документов Word. Я больше знаком с Excel VBA, и я только что создал аналогичный проект для защищенных электронных таблиц, поэтому я попытался следовать той же логике c. Пока мой код копирует слова с ошибками из офисного документа в новую рабочую книгу Excel, а затем запускает проверку орфографии, но у меня возникают проблемы с вставкой нового значения обратно в исходный документ Word. У меня не может быть этого требования «добавления справочной библиотеки», так как она должна быть переносимой и работать без вмешательства конечного пользователя.

Вот что у меня есть:

Sub SpellCheckDoc()

Dim lockedFields As Long
Dim unlockedFields As New Collection
For Each theFields In ActiveDocument.Fields
    If theFields.Locked = True Then
        lockedFields = lockedFields + 1
    Else
        unlockedFields.Add theFields
    End If
Next theFields
If lockedFields = ActiveDocument.Fields.Count Then Exit Sub

'Word
Dim objWord As Object    'Word.Application
Set objWord = GetObject(, "Word.Application")

'Excel
Dim objExcel As Object, objWB As Object
Set objExcel = CreateObject("Excel.Application")
Set objWB = objExcel.Workbooks.Add
objExcel.Visible = True
Set wb = objExcel.ActiveWorkbook
Set ws = wb.Worksheets("Sheet1")

For Each theFields In unlockedFields
    If CheckSpelling(theFields.Result.Text) = False Then
      theFields.Copy ' Select text from Word Doc

'Paste into new workbook and spellcheck
With ws
 .Range("A1").Select
 .Paste
 .Range("A1").CheckSpelling
 .Range("A1").Copy
End With

objWord.theFields.Paste ''' This line doesn't work

    End If
Next theFields
End Sub

1 Ответ

1 голос
/ 25 января 2020

Изменение theFields.Result.Text. Таким образом, вы можете сделать .CheckSpelling в Excel, а затем сделать theFields.Result.Text = .Range("A1").Text

Dim correctSpelling as String

With ws
 .Range("A1").Select
 .Paste
 .Range("A1").CheckSpelling
 correctSpelling = .Range("A1").Text
End With

    theFields.Result.Text = correctSpelling

    End If
Next theFields
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...