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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.04.2010, 23:07   #1
kapitel_bc@ukr.net
Пользователь
 
Регистрация: 31.01.2010
Сообщений: 49
По умолчанию "Нарезка" текста

Уважаемые знатоки. Помогите дописать макрос.
Имеются документы с текстом разбитым по 10 параграфов в каждом,

Параграф1
Текст текст текст…. Текст
Параграф2
Текст текст текст…. Текст
Параграф3
Текст текст текст…. текст
……..
Параграф10
Текст текст текст…. текст
необходимо нарезать текст по параграфам и вставить в файлы в файлы word , например, под именами 01.doc (для Параграфов1), 02.doc (для Параграфов2) и т.д.
¬

Этот макрос выделяет фрагменты

Sub FindWords( _
ByRef strWord1 As String, _
ByRef strWord2 As String)
Dim rng As Range
Static rngTemp As Range

Set rng = ActiveDocument.Content

With rng.Find
.ClearFormatting
.Text = strWord1
.Forward = True
.Wrap = wdFindContinue
.MatchWholeWord = True
.MatchCase = False
.Execute
If .Found = True Then
If rngTemp Is Nothing Then
Set rngTemp = rng
FindWords strWord2, strWord1
Else
rng.SetRange rngTemp.Start, rng. Start
rng.Select
Set rngTemp = Nothing
End If
End If
End With
End Sub
----------------------------------------------------
Sub Параграф1()
FindWords " Параграф1", " Параграф2"
End Sub
--------------------------------------------------
Sub Параграф2()
FindWords " Параграф2", " Параграф3"
End Sub
kapitel_bc@ukr.net вне форума Ответить с цитированием
Старый 30.04.2010, 03:15   #2
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Вы как-то очень хитро подошли к этому вопросу. Вам нужно:
  1. Найти первую строку, которая ограничивает группу абзацев сверху. Запомнить начало следующего за этой строкой абзаца
  2. Найти вторую строку, которая ограничивает группу абзацев снизу. Запомнить конец предыдущего этой строке абзаца
  3. Взять диапазон, ограниченных запомненными значениями начала и конца и скопировать его в буфер
  4. Создать новый документ и вставить содержимое буфера
Поскольку для последней группы абзацев нет строки, ограничивающей группу снизу, то нужно передавать пустую строку и выделять диапазон до конца документа
Примерно так:
Код:
Sub FindWords(ByVal FirstLine As String, ByVal SecondLine As String)
  Dim iStart As Long, iEnd As Long
  
  'Ищем первое слово
  With ActiveDocument.Content.Find
    .Text = FirstLine
    .Execute
    If .Found Then
      iStart = .Parent.Paragraphs.First.Next.Range.Start
    Else
      MsgBox "Не найдено начало группы """ & FirstLine & """.", vbInformation + vbSystemModal
      Exit Sub
    End If
  End With
  
  'Если второе слово не пустое, то ищем его, иначе запоминаем конец документа
  If SecondLine <> "" Then
    With ActiveDocument.Content.Find
      .Text = SecondLine
      .Execute
      If .Found Then
        iEnd = .Parent.Paragraphs.First.Previous.Range.End
      Else
        MsgBox "Не найден конец группы """ & SecondLine & """.", vbInformation + vbSystemModal
        Exit Sub
      End If
    End With
  Else
    iEnd = ActiveDocument.Content.End
  End If
  'Выделяем нужный диапазон
  ActiveDocument.Range(iStart, iEnd).Select
End Sub
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 30.04.2010, 12:02   #3
kapitel_bc@ukr.net
Пользователь
 
Регистрация: 31.01.2010
Сообщений: 49
По умолчанию

Цитата:
Сообщение от viter.alex Посмотреть сообщение
Вы как-то очень хитро подошли к этому вопросу. Вам нужно:[LIST=1][*]Найти первую строку, которая ограничивает группу абзацев сверху. Запомнить начало следующего за этой строкой абзаца
[/color][/CODE]
Александр, здравствуйте.
Все правильно, только в первом нужно: "Найти первую строку, которая ограничивает группу абзацев сверху. Запомнить (но лучше вырезать, что бы не создавал лишней путаницы)" и
Открыть существующий документ и вставить в него соответствующий фрагмент.
Соответствие: Фрагмент который начинается фразой "Параграф1" в 01.doc, фрагмент "Параграф2" - 02.doc и т.д.
kapitel_bc@ukr.net вне форума Ответить с цитированием
Старый 01.05.2010, 17:41   #4
kapitel_bc@ukr.net
Пользователь
 
Регистрация: 31.01.2010
Сообщений: 49
По умолчанию

Всем спасибо! Сам прозрел
kapitel_bc@ukr.net вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать кнопку "Замена" выделенного текста natsik'09 Помощь студентам 4 21.04.2010 20:32
"ОКРВВЕРХ", "ОКР", "ЕСЛИ". Как бы их связать. Каравай Microsoft Office Excel 13 17.02.2010 09:53
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
Оператор амперсанд "&" или число внутри текста dotvz Microsoft Office Excel 2 02.04.2008 14:33