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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.05.2009, 02:47   #1
mamed05
 
Регистрация: 21.05.2009
Сообщений: 4
Лампочка Сохранения каждой главы в отдельный файл

Здравствуйте!
Кто знает есть ли такое дополнение или макрос для Word (желательно для 2007-го), который сохраняет каждую главу из документа в отдельный файл?
mamed05 вне форума Ответить с цитированием
Старый 21.05.2009, 03:05   #2
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Что, разве трудно выделить главу и перетянуть её на рабстол мышью?

Макрос, конечно же, возможен, но стоит ли так запариваться для одного раза?


Готовый макрос есть — в Вопросах и Ответах.

Осталось автоматизировать выделение глав. И об этом тоже есть кое-что готовое, точнее — тут!

Последний раз редактировалось Sasha_Smirnov; 22.05.2009 в 00:47.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 21.05.2009, 03:24   #3
mamed05
 
Регистрация: 21.05.2009
Сообщений: 4
По умолчанию

А париться не надо! Вот поэтому я спрашиваю кто что может предложить уже готовое :-)

Периодически я это делаю, когда закидывая книгу на плеер. А когда книга большая хочется все автоматизировать.
mamed05 вне форума Ответить с цитированием
Старый 21.05.2009, 09:15   #4
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Ну для начала хотелось бы понять, что подразумевается под главой. Макрос написать не сложно.
Алгоритм простой:
  1. Ищем начало первой главы и запоминаем номер символа, с которого оно начинается.
  2. Ищем начало следующей главый. Запоминаем то же самое.
  3. Берем часть документа между запомненными позициями и копируем в новый документ.
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 21.05.2009, 14:53   #5
mamed05
 
Регистрация: 21.05.2009
Сообщений: 4
Восклицание

viter.alex, тогда можно опираться на оглавление.
Но есть другой вариант, который опознает главу по Стилю (если это проще).
Но я в VBA не щарю. нет времени его изучать.
Есть добровольцы кто возьмется за написание такого макроса?
mamed05 вне форума Ответить с цитированием
Старый 21.05.2009, 15:31   #6
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Написать можно. В течение получаса. Дайте файл-пример
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 21.05.2009, 19:12   #7
mamed05
 
Регистрация: 21.05.2009
Сообщений: 4
По умолчанию

Вот, пожалуйста!
Вложения
Тип файла: rar Реальная нереальность.rar (188.1 Кб, 27 просмотров)
mamed05 вне форума Ответить с цитированием
Старый 22.05.2009, 13:30   #8
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Насчет получаса я погорячился. Уложился в час чистого времени. Прежде чем давать код, изложу свои соображеня.
  1. Представленный документ имеет содержание и, благодаря этому, его можно спокойно разбить на главы.
  2. Стилей в оформлении документа я не обнаружил, только отдельное форматирование.
  3. Макрос сделал основываясь на форматировании.
  4. После работы макроса некоторые файлы будут пустыми. Это из-за того, что в тексте есть места с форматированием как у начала главы, но не содержащие текста (приложения, например).
Как он работает. Нужно поставить курсор в начало названия первой главы и запустить макрос. Макрос ищет строки, совпадающие по цвету с текстом, в котором находится курсор. ЭТи строки считаются заголовками. Затем текст, который находится между этими строками, сохраняется в отдельный файл. Комментарии в макросе описывают его работу
Код:
Option Explicit

Sub DivideToChapters()
  'Отключаем обновление экрана
  Application.ScreenUpdating = False
  On Error Resume Next
  'Запоминаем основной документ в переменную
  Dim oMainDoc As Document: Set oMainDoc = ActiveDocument 'Документ с текстом
  'Запоминаем содержимое документа от положения курсора и до конца документа
  Dim oRng As Range: Set oRng = oMainDoc.Range(Selection.Range.Start, oMainDoc.Range.End)
  'Создаем новый документ и запоминаем его переменную. В этот новый документ будет копироваться _
  текст из каждой главы и сохраняться под своим именем
  Dim oNewDoc As Document: Set oNewDoc = Documents.Add
  'Переменные для работы: путь к каталогу, объект для скриптов, счетчик глав, имя главы
  Dim sPath$, FSO, counter%, sName$
  'Путь к каталогу, в который будут сохраняться главы. Имя каталога совпадает с именем файла
  sPath = oMainDoc.Path & Application.PathSeparator & Mid(oMainDoc.Name, 1, InStrRev(oMainDoc.Name, ".") - 1)
  'Создаем каталог на диске
  Set FSO = CreateObject("Scripting.FileSystemObject")
  FSO.CreateFolder sPath
  'Если каталог уже создан, то пропускаем ошибку
  If Err.Number = 5 Then Err.Clear
  Dim iStart&, iEnd& 'Переменные для хранения начала и конца главы
  iStart = oRng.Start
  'Производим поиск в документе по цвету текста. Цвет берем из первого символа после курсора.
  With oRng.Find
    .Font.Color = oMainDoc.Range(iStart, iStart + 1).Font.Color
    'Если текст с таким цветом найден
    While .Execute
      If .Parent.Start <> iStart Then 'Отсекаем строку в которой находится курсор
        counter = counter + 1
        iEnd = .Parent.Start 'Конец главы
        oMainDoc.Range(iStart, iEnd).Copy 'Копируем главу
        oNewDoc.Range.Paste 'Вставляем в новый документ
        oNewDoc.SaveAs sPath & Application.PathSeparator & counter & " " & sName & ".txt", wdFormatText 'Сохраняем как обычный текст
        iStart = iEnd 'Конец предыдущей главы делаем началом следующей
      End If
      sName = Trim(Replace(.Parent.Text, vbCr, "")) 'Название главы
    Wend
    'Сохранение последней главы (до конца документа)
    oMainDoc.Range(iStart, oMainDoc.Range.End).Copy
    oNewDoc.Range.Paste
    oNewDoc.SaveAs sPath & Application.PathSeparator & counter + 1 & " " & sName & ".txt", wdFormatText, addtorecentfiles:=False
  End With
    oNewDoc.Close False 'Закрываем документ
    Application.ScreenUpdating = True: Application.ScreenRefresh 'Обновляем экран
End Sub
Пожелания пишите. Макрос требует доработки.
Лучше день потерять — потом за пять минут долететь!©

Последний раз редактировалось viter.alex; 22.05.2009 в 13:35.
viter.alex вне форума Ответить с цитированием
Старый 22.05.2009, 16:19   #9
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Интересно, на форуме сделают тег VB или я раньше уйду на пенсию?

Последний раз редактировалось Sasha_Smirnov; 22.05.2009 в 23:30.
Sasha_Smirnov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранение текущего листа Excel в отдельный файл IpS Microsoft Office Excel 10 04.10.2008 13:45
Функции сохранения TStringList в Ini-файл Air Свободное общение 0 29.06.2008 22:37
Функции сохранения OutList в Ini-файл Air Свободное общение 0 26.06.2008 17:58
найти минимальный элемент в каждой строке матрицы и записать все минимальные элементы в отдельный массив W_P Помощь студентам 6 28.12.2007 00:24
Проблемма сохранения потоков в файл EvgenMailRu Помощь студентам 1 03.09.2007 13:56