Откройте Word Do c из Excel с помощью VBA, чтобы найти текст Date и заменить его текстом даты из ячейки в Excel - PullRequest
0 голосов
/ 17 января 2020

У меня есть слово do c с текстом, и там также есть текст даты, показывающий этот формат:

text text text 17.01.2020 text text text.

Я хочу заменить вышеуказанный текст даты на ячейку из Excel, которая является также дата, похожая на это 18.01.2020.

Поэтому код VBA должен выполнять следующие действия:

1.Открытое слово do c

2.Найдите текст и замените его на текст из Excel * 1010. *

3.Сохраните Слово до c.

Sub DocSearchandReplace()
Dim wdApp As Object, wdDoc As Object
Set wdApp = CreateObject("word.application")
wdApp.Visible = True
Set wdDoc = wdApp.Documents.Open("C:\sampletest.docx")
With wdDoc.Content.Find
  .Date = "???"
  .Replacement.Cell = "referencing a cell from Excel??"
  .Wrap = wdFindContinue
  .Execute Replace:=wdReplaceAll
End With

wdDoc.Save 'it however always prompt a word warning, how to surpress it?
wdDoc.Close 'it only closes the doc inside Word without closing the whole program.

Set wdApp = Nothing: Set wdDoc = Nothing
End Sub

Я не уверен, что писать в разделах .Date и .Replacement.Cell.

1 Ответ

2 голосов
/ 17 января 2020

Проблема в том, что ваш синтаксис неверен. Свойства .Date и .Replacement.Cell не существуют в объекте Find. Обязательно прочитайте инструкцию найти объект и не придумывайте свойства.

Правильная синтаксис c в соответствии с Поиск и замена текста или форматирование выглядит примерно так:

With wdDoc.Content.Find 
    .ClearFormatting 
    .Text = "17.01.2020" 'your date to replace
    .Replacement.ClearFormatting 
    .Replacement.Text = ThisWorkbook.Worksheets("Sheet1").Range("A1").Text 'read value from sheet1 cell A1
    .Execute Replace:=wdReplaceAll, Forward:=True, Wrap:=wdFindContinue 
End With

Согласно комментарию Cindys, существуют соответствующие символы подстановки в Word аналогично использованию регулярных выражений.

With wdDoc.Content.Find 
    .ClearFormatting 
    .Text = "[0-9]{2}.[0-9]{2}.[0-9]{4}"  'will match ##.##.####
    .MatchWildcards = True 'makes sure the above wildcards are recognized
    .Replacement.ClearFormatting 
    .Replacement.Text = ThisWorkbook.Worksheets("Sheet1").Range("A1").Text 'read value from sheet1 cell A1
    .Execute Replace:=wdReplaceAll, Forward:=True, Wrap:=wdFindContinue 
End With

Поскольку вы используете позднее связывание, вы должны либо определить свои константы Word для перечисления WdFindWrap и WdReplace перед их использованием

Const wdReplaceAll As Long = 2
Const wdFindContinue As Long = 1

или замените их значениями

.Execute Replace:=2, Forward:=True, Wrap:=1

или установите ссылку на Word и используйте привязку eary, чтобы они определялись автоматически.

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