Модераторы: mihanik

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вырезать страницу, как перебрать все страницы 
V
    Опции темы
Cosmologist
Дата 13.7.2008, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 13.8.2006

Репутация: нет
Всего: 0



Такая задача - надо разбить многостраничный документ на много одностраничных.
Использую такой алгоритм - вырезаю первую страницу, открываю новый документ, вставляю в него содержимое первой страницы, сохраняю его, проверяю количество оставшихся страниц  и повторяю.
Со всеми пунктами все понятно, кроме того как взять первую страницу, пробовал использовать Range или Selection - именно для страницы такой возможности не нашел. 

Подскажите кто нибудь, а то с vba  не работал никогда до этого.
PM MAIL   Вверх
FINANSIST
Дата 14.7.2008, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Статус: Жив
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 11.4.2008
Где: Москва

Репутация: 13
Всего: 23



Код

for each wsheet in activeworkbook.sheets
if wsheet.visible = false and msgbox("Лист " & wsheet.name & " является скрытым! Его тоже обработать?", VBQuestion+VBYesNo,activeworkbook.name) = vbNo then goto 10:
end if

ТВОЙ КОД

10: next wsheet



--------------------
“...Брали корову рыжую одну, отдавать будем корову рыжую одну, чтобы не нарушать отчетности”
Эдуард Успенский, “Каникулы в Простоквашино”
PM MAIL ICQ   Вверх
LOPUH
Дата 14.7.2008, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Растение
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 15.2.2008
Где: Красноярск

Репутация: 3
Всего: 4



Для того, чтобы обратиться коо всем ячейкам листа у  объекта Worksheets  есть свойтво Cells
Код

Worksheets("Лист1").Cells.Select  'Выделяет все ячейки рабочего листа
ActiveSheet.Cells.Copy 'копирует все содержимое активного рабочего листа в буфер обмена


PM MAIL   Вверх
Akina
Дата 14.7.2008, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Речь о странице при печати? обломись тады... ведь деление на страницы зависит от настроек принтера.
Если же речь о том, чтобы каждый лист книги поместить в отдельную книгу - FINANSIST дал канву.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Cosmologist
Дата 14.7.2008, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 13.8.2006

Репутация: нет
Всего: 0



FINANSIST и LOPUH - спасибо, но ни один из приведенных примеров не работает

activeworkbook.sheets - вызывает ошибку
Worksheets - вызывает ошибку

Забыл написать что код нужен для русскоязычного Word 2003. Или скажите в какой версии Word делать.
PM MAIL   Вверх
Akina
Дата 14.7.2008, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Цитата(Cosmologist @  14.7.2008,  13:08 Найти цитируемый пост)
Забыл написать что код нужен для русскоязычного Word 2003.

Так... теперь выкладывай ВСЁ что ты ещё забыл. А то лето, понимаешь, все телепаты в отпуске...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
LOPUH
Дата 14.7.2008, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Растение
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 15.2.2008
Где: Красноярск

Репутация: 3
Всего: 4




Цитата(Cosmologist @  14.7.2008,  17:08 Найти цитируемый пост)
activeworkbook.sheets - вызывает ошибку
Worksheets - вызывает ошибку

Естественно, примеры под Excel написаны..  У Ворда другая  объектная модель..
PM MAIL   Вверх
Cosmologist
Дата 14.7.2008, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 13.8.2006

Репутация: нет
Всего: 0



да, мой косяк, пардон  smile 

Подскажите тогда, как в Ворде сделать, пожалуйста  smile 
PM MAIL   Вверх
LOPUH
Дата 14.7.2008, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Растение
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 15.2.2008
Где: Красноярск

Репутация: 3
Всего: 4



Вам нужно каждую страницу документа сохранить как отдельный документ и все? или еще какие то действия? Под какими именами сохранять ? Сегодня уже ответить не успею рабочий день заканчивается
PM MAIL   Вверх
Akina
Дата 14.7.2008, 14:13 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Итератор для страниц выглядит так:
Код

Dim OnePage As Page
For Each OnePage In ActiveDocument.ActiveWindow.Panes(1).Pages
    ' Perform some action
Next



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
bilya
Дата 14.7.2008, 16:07 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 3.1.2007

Репутация: 1
Всего: 1



Цитата(Akina @  14.7.2008,  11:56 Найти цитируемый пост)
Речь о странице при печати? обломись тады...
Akina, ну зачем же так категорично... Делается запросто через определение HPageBreaks. Проверено. Это про Ехсел
А в Ворде - вот такое (правда, непричесанное) могу предложить:
Код

Sub Example()
  Dim r As Range
  'создаем папку и кладем в нее документ, который будем разбивать
  docPath = "c:\myFolder\myDoc_sourse.doc"
  
  Set nApp = CreateObject("Word.Application")
  Set ndoc = nApp.Documents.Open(docPath)
  b = ndoc.ActiveWindow.Panes(1).Pages.Count
    
  For a = 1 To b
    If a <> 1 Then
        Set ndoc = nApp.Documents.Open(docPath)
    End If
'nApp.Visible = True
    With ndoc
      Set r = .Range(.Content.GoTo(wdGoToPage, wdGoToRelative, a - 1).Start, .Content.End)
      If a <> 1 Then
        .Range(0, r.Start).Text = ""
        Set r = .Range(.Content.GoTo(wdGoToPage, wdGoToRelative, 0).Start, .Content.End)
      End If
      If a <> b Then
      r.Text = ""
    With nApp.Selection
      .EndKey Unit:=wdStory, Extend:=wdMove
      .MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
      .Delete Unit:=wdCharacter, Count:=1
    End With
      End If
      ndoc.SaveAs ("c:\myFolder\myDoc_" & a & ".doc")
      ndoc.Close
      Set ndoc = Nothing
    End With
  Next
      nApp.Quit
      Set nApp = Nothing
End Sub


PM MAIL   Вверх
Cosmologist
Дата 15.7.2008, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 13.8.2006

Репутация: нет
Всего: 0



bilya - спасибо огромное, скрипт отлично работает smile 
Честно говоря, я недооценивал VBA.

Единственное что еще хотел спросить, как сделать сохранение отдельной страницы в .html, а не в .doc?

Еще раз спасибо!
PM MAIL   Вверх
LOPUH
Дата 15.7.2008, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Растение
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 15.2.2008
Где: Красноярск

Репутация: 3
Всего: 4



Цитата(Cosmologist @  15.7.2008,  21:39 Найти цитируемый пост)
Единственное что еще хотел спросить, как сделать сохранение отдельной страницы в .html, а не в .doc?

Вообще то -один вопрос-один топик

PM MAIL   Вверх
Cosmologist
Дата 15.7.2008, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 13.8.2006

Репутация: нет
Всего: 0



LOPUH - вопрос простейший, чего из за него тему открывать и в ней все заново расписывать?

Порылся в MSDN, делаю так:
Код

ndoc.SaveAs "c:\myFolder\myDoc_" & a & ".doc", olHTML

в итоге сохранение все равно происходит в формате doc, но с расширением .html, что я делаю не так?
PM MAIL   Вверх
bilya
Дата 16.7.2008, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 3.1.2007

Репутация: 1
Всего: 1



Так, наверное:
Код

...
      End If
      .SaveAs FileName:="c:\myFolder\myDoc_" & a & ".htm", FileFormat:=wdFormatHTML
      .Close
...
Используйте запись макросов - полезная штука

P.S. Убрал ndoc, т.к. эта часть работает под With
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.1027 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.