Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > Вырезать страницу


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

Подскажите кто нибудь, а то с vba  не работал никогда до этого.

Автор: FINANSIST 14.7.2008, 10:27
Код

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

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

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


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

Автор: Cosmologist 14.7.2008, 12:08
FINANSIST и LOPUH - спасибо, но ни один из приведенных примеров не работает

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

Забыл написать что код нужен для русскоязычного Word 2003. Или скажите в какой версии Word делать.

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

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

Автор: LOPUH 14.7.2008, 12:18

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

Естественно, примеры под Excel написаны..  У Ворда другая  объектная модель..

Автор: Cosmologist 14.7.2008, 13:35
да, мой косяк, пардон  smile 

Подскажите тогда, как в Ворде сделать, пожалуйста  smile 

Автор: LOPUH 14.7.2008, 13:51
Вам нужно каждую страницу документа сохранить как отдельный документ и все? или еще какие то действия? Под какими именами сохранять ? Сегодня уже ответить не успею рабочий день заканчивается

Автор: Akina 14.7.2008, 14:13
Итератор для страниц выглядит так:
Код

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

Автор: bilya 14.7.2008, 16:07
Цитата(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


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

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

Еще раз спасибо!

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

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

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

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

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

в итоге сохранение все равно происходит в формате doc, но с расширением .html, что я делаю не так?

Автор: bilya 16.7.2008, 10:45
Так, наверное:
Код

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

P.S. Убрал ndoc, т.к. эта часть работает под With

Автор: Cosmologist 16.7.2008, 11:21
bilya - еще раз спасибо, вы меня конкретно выручили!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)