Тема: VBA: Word вставка таблицы в сроку с разделителем, замена в документе
Здравствуйте, идея следующая: из Excel копируем столбец, и в Word надо вставить значения в строку с разделителем например ";". Делаю так, копируем колонку, ставим курсор в ворде куда нужно вставить строку, нажимаем макрос, тот создает новый документ, туда вставляет содержимое буфера обмена как текст и делам замену символа перевода строки на наш разделить, потом копируем всю строчку что получилась, закрываем этот документ без сохранения и в нашь первый документ вставляем новый буфер, в котором отредактирована строка, при помощи макрозаписи и переработки получаю следующий код:
Sub Test ()
Selection.PasteAndFormat (wdFormatPlainText)
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "^p"
.Replacement.Text = "; "
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.WholeStory
Selection.Cut
ActiveWindow.Close wdDoNotSaveChanges
Selection.PasteAndFormat (wdUseDestinationStylesRecovery)
End Sub
все работает отлично, за одним исключением, мельтешит окно создаваемого документа в котором ведем замену.
Решил переработать для точно обращения к документу, а не к активному документу, чтобы новый документ был не видимым, чтобы преобразование было скрытым. получил вот такой код, но он не работает!!! вставляет, копирует, но замена почему то не работает. подскажите в чем проблема.
вот код:
Sub Test2 ()
Dim oWord As Word.Application
Dim oDocument As Word.Document
Dim isDocument As Word.Document
'Получаем доступ к запущенной программе Word.
Set oWord = GetObject(Class:="Word.Application")
'Даём документу Word имя "oDocument", через которое
'будем к нему обращаться в коде. Это нужно
'для удобства написания кода.
Set isDocument = oWord.Documents(oWord.ActiveDocument.Name)
Set oDocument = oWord.Documents.Add
'oDocument.Sections
'Documents.Add Template:="Normal", NewTemplate:=False, DocumentType:=0
oDocument.Content.PasteAndFormat (wdFormatPlainText)
oDocument.Range.WholeStory
oDocument.Range.Find.ClearFormatting
oDocument.Range.Find.Replacement.ClearFormatting
With oDocument.Range.Find
.Text = "^p"
.Replacement.Text = "; "
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
oDocument.Range.Find.Execute Replace:=wdReplaceAll
oDocument.Range.WholeStory
oDocument.Range.Cut
' ActiveWindow.Close wdDoNotSaveChanges
isDocument.Content.PasteAndFormat (wdUseDestinationStylesRecovery)
oDocument.Close wdDoNotSaveChanges
End Sub
побывал Range и Content , и как потом попасть в тоже место где был курсор в первом документе, вставляет в замен всего текста в первый документ.