1

Тема: 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 , и как потом попасть в тоже место где был курсор в первом документе, вставляет в замен всего текста в первый документ.