Замена текста в документе Word на значения из книги ексель

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
jaroslav
Сообщения: 45
Зарегистрирован: 07 дек 2009, 13:25

Добрый день.
Как можно заменить в целом документе Word текст типа
Workbooks("Книга1").Sheets("Лист1").Cells(2, 3)
Workbooks("Книга1").Sheets("Лист2").Cells(5, 7)
Workbooks("Книга1").Sheets("Лист3").Cells(1, 2)
и т. д.
на значения из книги ексель:
Workbooks("Книга1").Sheets("Лист1").Cells(2, 3) (например, 10,2)
Workbooks("Книга1").Sheets("Лист2").Cells(5, 7) (например, -5680,0)
Workbooks("Книга1").Sheets("Лист3").Cells(1, 2) (например, 0,0)
и т. д.
Аватара пользователя
Busine2009
Сообщения: 322
Зарегистрирован: 18 июл 2009, 15:34
Контактная информация:

jaroslav
привет, в др. форуме ты спрашивал:
Как заменить жирний текст "тис. грн." на обычний текст "тис. грн."
Надо добавить в код:

Код: Выделить всё

.Find.Replacement.Text = ""
Иначе может быть ситуация, что текст "тис. грн." будет меняться на др. текст.

Если нужна замена по всему документу (основная часть - maindocument), то используй этот код:

Код: Выделить всё

Sub m_1()
With ActiveDocument.Range.Find
  .Text = "тис. грн."
  .Replacement.Font.Bold = False
  .Format = True
  .MatchCase = False
  .MatchWholeWord = False
  .MatchWildcards = False
  .MatchSoundsLike = False
  .MatchAllWordForms = False
  .Execute Replace:=wdReplaceAll
End With
End Sub
Просто меня забанили в том форуме за плохое поведение.
Аватара пользователя
Busine2009
Сообщения: 322
Зарегистрирован: 18 июл 2009, 15:34
Контактная информация:

По поводу этой темы нужны конкретные примеры, т.к. тяжело понять, что надо сделать.
Т.е. в документе Word есть текст:
Workbooks("Книга1").Sheets("Лист1").Cells(2, 3)
Его надо заменить на значение из Excel, находящего в Excel: Workbooks("Книга1").Sheets("Лист1").Cells(2, 3)?
Завтра гляну на работе.
jaroslav
Сообщения: 45
Зарегистрирован: 07 дек 2009, 13:25

Busine2009! Спасибо за ответ в теме "Как заменить жирний текст "тис. грн." на обычний текст "тис. грн."
По поводу темы "Замена текста в документе Word на значения из книги ексель" ты меня правильно понял: в документе Word есть текст:
Workbooks("Книга1").Sheets("Лист1").Cells(2, 3)
Его надо заменить на значение из Excel, находящего в Excel: Workbooks("Книга1").Sheets("Лист1").Cells(2, 3)
Аватара пользователя
Busine2009
Сообщения: 322
Зарегистрирован: 18 июл 2009, 15:34
Контактная информация:

jaroslav
забыл пример взять на работу. Завтра гляну - в выходные.
Аватара пользователя
Busine2009
Сообщения: 322
Зарегистрирован: 18 июл 2009, 15:34
Контактная информация:

jaroslav
нет, не знаю как делать. Вот есть код, может быть его можно как-то переделать:

Код: Выделить всё

Sub m_1()
Dim oExcel As Object
Dim oWorkbook As Object
Dim vАдресЯчейки As String
vАдресЯчейки = Selection.Text
Set oExcel = CreateObject("Excel.Application")
oExcel.Workbooks.Open "E:\_Рабочий стол\Книга1.xls"
Selection.Text = oExcel.Workbooks("Книга1.xls").Sheets("Лист1").Cells(2, 3).Value
oExcel.Workbooks("Книга1.xls").Close
End Sub
Вот эту часть:

Код: Выделить всё

Workbooks("Книга1.xls").Sheets("Лист1").Cells(2, 3)
надо скопировать и вставить из Word. Как это сделать, я не знаю.
jaroslav
Сообщения: 45
Зарегистрирован: 07 дек 2009, 13:25

Busine2009, спасибо
jaroslav
Сообщения: 45
Зарегистрирован: 07 дек 2009, 13:25

Нашел метод замены через ексель.

Код: Выделить всё

With Word.application
With .Selection.Find
    .ClearFormatting
    .Text = "<9_9*9_9>" ' между 9_9 стоит, например, Лист1!C39
    .Replacement.Text = ""
    .MatchWildcards = True
    .Forward = True
    .Wrap = wdFindContinue
End With
While .Selection.Find.Execute
    kk = Replace(.Selection.Text, "9_9", "")
    Sheets("Лист1").Range("A1").Formula = "=" & kk
    .Selection.Find.Replacement.Text = Workbooks(s3).Sheets(1).Range("A1") ' где s3 - имя активной книги ексель
    .Selection.Find.Execute Replace:=1
Wend
End With
Только есть одна проблема: текст: "Лист1!C39" заменяется на значения из книги ексель только 1 раз. Потом ворд в поле Найти ищет это значения, а не .Text = "<9_9*9_9>".
Подскажите, пожалуйста где я ошибся.
Аватара пользователя
Busine2009
Сообщения: 322
Зарегистрирован: 18 июл 2009, 15:34
Контактная информация:

jaroslav
выложи полностью код, а то ты что-то умное придумал, тяжело сообразить.
jaroslav
Сообщения: 45
Зарегистрирован: 07 дек 2009, 13:25

Вот решение вопроса:

Код: Выделить всё

With Word.application
With .Selection.Find
    .ClearFormatting
    .Text = "<9_9*9_9>" ' между 9_9 стоит, например, Лист1!C39
    .Replacement.Text = ""
    .MatchWildcards = True
    .Forward = True
    .Wrap = wdFindContinue
While .Execute
    .Parent.Text = Replace(.Parent.Text, "9_9", "")
    Sheets("Лист1").Range("A1").Formula = "=" & .Parent.Text
    .Parent.Text =  Replace(.Parent.Text, .Parent.Text, Workbooks(s3).Sheets(1).Range("A1"))  ' где s3 - имя активной книги ексель
Wend
End With
End With
Ответить