Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.10.2009, 12:24   #1
paratruper17
Пользователь
 
Регистрация: 13.10.2009
Сообщений: 11
По умолчанию Поиск и копирование текста.

Добрый день, уважаемые форумчане. Пишу достаточно объемную программу по работе с однотипными текстовыми документами и для полного счастья не хватает еще чуть-чуть. А именно:
Однотипный документ представляет из себя следующую последовательность
Процедура №1 "Название"
Цель процедуры: "Цель"
Участники: ""
Входные данные:вход1, вход2, вход3.... и т.д.
Порядок выполнения процедуры:
"Далее идет описание последовательности выполнения процедуры"
Процедура №2 "Название"
далее все идет как и в первой процедуре

Необходимо сделать выборку входных данных (вход1,вход2,вход3) во всех процедурах и помещать каждый в отдельную ячейку создаваемой таблицы
Буду очень признателен, если поможете.
paratruper17 вне форума Ответить с цитированием
Старый 13.10.2009, 20:41   #2
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Уточните условие: о какой таблице идет речь, где она создается? На каком языке нужно написать программу?
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 14.10.2009, 10:14   #3
paratruper17
Пользователь
 
Регистрация: 13.10.2009
Сообщений: 11
По умолчанию

Цитата:
Сообщение от viter.alex Посмотреть сообщение
Уточните условие: о какой таблице идет речь, где она создается? На каком языке нужно написать программу?
1)Таблица создается в новом документе doc. Таблица должна состоять из 2-х столбцов, а кол-во строк должно быть равно кол-ву найденных входов.
2) Язык VBA
paratruper17 вне форума Ответить с цитированием
Старый 14.10.2009, 12:07   #4
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию Макрос №1

Попробуйте так.
Код:
Sub FindAndCopy()
  Dim oCurrDoc As Document: Set oCurrDoc = ActiveDocument 'Текущий документ
  Dim oNewDoc As Document 'Новый документ
  Dim oNewDocTbl As Table 'Таблица в новом документе, в которую будем вносить данные
  Dim oNewDocRng As Range 'Диапазон нового документа, в который будем вставлять таблицу
  Dim sInputData As String 'строка входных данных
  Dim arInputs 'Массив, в который будем преобразовывать строку входных данных
  Dim i As Integer 'Счетчик цикла
  
  Const INPUTDATA = "Входные данные:"
  'Добавляем новый документ
  Set oNewDoc = Documents.Add
  Set oNewDocRng = oNewDoc.Range
  
  'Начинаем поиск
  With oCurrDoc.Range.Find
    .Text = INPUTDATA
    While .Execute
      'Текст абзаца, в котором нашли строку «Входные данные:»
      sInputData = .Parent.Paragraphs(1).Range.Text
      'Убираем из строки знак абзаца, обрамляющие пробелы и «Входные данные:»
      sInputData = Trim(Replace(Replace(sInputData, INPUTDATA, ""), ChrW(13), ""))
      'строку преобразовываем в массив
      arInputs = Split(sInputData, ", ")
      'Перемещаем диапазон для вставки таблицы в конец документа
      oNewDocRng.SetRange oNewDoc.Range.End, oNewDoc.Range.End
      'Добавляем таблицу
      Set oNewDocTbl = oNewDoc.Tables.Add(oNewDocRng, 1, 2)
      'Заполняем таблицу значениями
      For i = 0 To UBound(arInputs)
        With oNewDocTbl
          .Cell(i + 1, 1).Range.Text = arInputs(i)
          'Если не последний элемент массива, то добавляем в таблицу строку
          If i <> UBound(arInputs) Then .Rows.Add
        End With
      Next i
      'Вставляем абзац в конец документа, чтобы разделять таблицы
      oNewDoc.Range.InsertParagraphAfter
    Wend
  End With
End Sub
Лучше день потерять — потом за пять минут долететь!©

Последний раз редактировалось viter.alex; 14.10.2009 в 13:33.
viter.alex вне форума Ответить с цитированием
Старый 14.10.2009, 12:56   #5
paratruper17
Пользователь
 
Регистрация: 13.10.2009
Сообщений: 11
По умолчанию

Огромное Вам спасибо!
paratruper17 вне форума Ответить с цитированием
Старый 14.10.2009, 13:32   #6
paratruper17
Пользователь
 
Регистрация: 13.10.2009
Сообщений: 11
По умолчанию

Еще есть небольшой вопросик. Как преобразовать код так, чтобы входы заполнялись в одну таблицу а не в отдельную? (чтобы в создающемся документе была единая таблица без разбиений по процедурам)
paratruper17 вне форума Ответить с цитированием
Старый 14.10.2009, 13:48   #7
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию Макрос №2

Вот так изменить:
Код:
Sub FindAndCopy()
  Dim oCurrDoc As Document: Set oCurrDoc = ActiveDocument 'Текущий документ
  Dim oNewDoc As Document 'Новый документ
  Dim oNewDocTbl As Table 'Таблица в новом документе, в которую будем вносить данные
  Dim oNewDocRng As Range 'Диапазон нового документа, в который будем вставлять таблицу
  Dim sInputData As String 'строка входных данных
  Dim arInputs 'Массив, в который будем преобразовывать строку входных данных
  Dim i As Integer 'Счетчик цикла
  
  Const INPUTDATA = "Входные данные:"
  'Добавляем новый документ
  Set oNewDoc = Documents.Add
  Set oNewDocRng = oNewDoc.Range
  
  'Перемещаем документ в конец документа
  oNewDocRng.SetRange oNewDoc.Range.End, oNewDoc.Range.End
  'Добавляем таблицу
  Set oNewDocTbl = oNewDoc.Tables.Add(oNewDocRng, 1, 2)
  
  'Начинаем поиск
  With oCurrDoc.Range.Find
    .Text = INPUTDATA
    While .Execute
      'Текст абзаца, в котором нашли строку «Входные данные:»
      sInputData = .Parent.Paragraphs(1).Range.Text
      'Убираем из строки знак абзаца, обрамляющие пробелы и «Входные данные:»
      sInputData = Trim(Replace(Replace(sInputData, INPUTDATA, ""), ChrW(13), ""))
      'строку преобразовываем в массив
      arInputs = Split(sInputData, ", ")
      If oNewDocTbl.Rows.Count > 1 Then oNewDocTbl.Rows.Add
      'Заполняем таблицу значениями
      For i = 0 To UBound(arInputs)
        With oNewDocTbl
          .Cell(.Rows.Count + i, 1).Range.Text = arInputs(i)
          'Если не последний элемент массива, то добавляем в таблицу строку
          If i <> UBound(arInputs) Then .Rows.Add
        End With
      Next i
    Wend
  End With
End Sub
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 14.10.2009, 13:53   #8
paratruper17
Пользователь
 
Регистрация: 13.10.2009
Сообщений: 11
По умолчанию

Большое спасибо! Я Ваш должник!
paratruper17 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование текста из Memo bulkin2000 Компоненты Delphi 3 30.04.2012 14:03
Копирование текста в файл bookkc Общие вопросы Delphi 2 18.06.2009 23:57
Копирование текста столбцами CoDeR Общие вопросы Delphi 5 31.07.2008 19:07
Поиск и копирование текста из консольного окна Mago Паскаль, Turbo Pascal, PascalABC.NET 8 25.07.2008 15:04
Копирование текста ячейки 2 цветов WIC Microsoft Office Excel 3 24.09.2007 13:32