Страницы: 1
RSS
Нумерация страниц
 
Для распечатки большой таблицы из Excelя в колонтитулах офомляю номера страниц. Это элементарно.  
Внимание, вопрос.  
Можно ли в Excel оформить разрывы страниц, чтоб нумерация шла не с 1, и(или) с разрывами?  
В ворде это все делается на раз-два, но уж больно долго тащить всю таблицу в ворд, да еще редактировать там замучаешься.
 
А еще бы в колонтитуле использовать некоторую динамическую информацию, сидящую в областях, не выводящихся на пеать.  
Попозже подготовлю файл с исходником.
 
Штатных средств для этого , насколько я знаю ,нет. Как вариант : печатать постранично, меняя с помощью VBA значение колонтитула
 
Извините, но если табличка, такая небольшая, страниц на 300-500 выходит в альбомном формате А4, и каждые 2-5 страниц нужно маненько заменить колонтитул...  
А хотелось бы в него автоматом впхивать данные с первой строки, попавшей на данную страницу. И непечатаемого диапазона, естественно.
 
через макрос делай.
 
http://support.microsoft.com/kb/213618/en-us#appliesto  
 
правда коды для excel2000. Но я не думаю что Вам что то из этого подойдет.  
Может попробовать вставлять дополнительные разрывы страниц, вместо листов которые надо пропустить ?
 
{quote}{post}      
With ActiveSheet.PageSetup  
       .PrintTitleRows = "$1:$1"  
       .PrintTitleColumns = ""  
   End With  
   ActiveSheet.PageSetup.PrintArea = "$A$1:$B$263"  
   With ActiveSheet.PageSetup  
       .CenterHeader = "Ñòðàíèöà &P èç &N"  
   End With  
{/post}{/quote}
 
{quote}{login=Марчук}{date=10.02.2009 10:46}{thema=Re: }{post}{quote}{post}      
   With ActiveSheet.PageSetup  
       .PrintTitleRows = "$1:$1"  
       .PrintTitleColumns = ""  
   End With  
   ActiveSheet.PageSetup.PrintArea = "$A$1:$B$263"  
   With ActiveSheet.PageSetup  
       .CenterHeader = "Страница &P из &N"  
   End With  
{/post}{/quote}{/post}{/quote}
 
А можно немножко комментов к макросам, а то я в них сильно не силен.  
И как и где тут прописать номера столбов, из которых берутся данные.
 
{quote}{login=Марчук}{date=10.02.2009 10:46}{thema=Re: }{post}{quote}{post}      
With ActiveSheet.PageSetup  
       .PrintTitleRows = "$1:$1"    - это заголовок который будет печататься на всех листах  
       .PrintTitleColumns = ""  
   End With  
   ActiveSheet.PageSetup.PrintArea = "$A$1:$B$263"   - это область которая выводит на печать  
   With ActiveSheet.PageSetup  
       .CenterHeader = "Страница &P из; &N"  - это колонтитул    
   End With  
{/post}{/quote}{/post}{/quote}  
 
см    
это просто кусок кода, который должен наверное быть в цикле.  
я так подразумеваю что для печати каждой таблицы надо менять заголовок и колонтитул.  
для всего кода нужен и весь Ваш файл и ТЗ и что точно вы хотите видеть.
 
что за глюки :(
 
Наконец то добрался до "закинуть файл".  
Обозначил область печати.  
Хотелось бы чтоб:  
   а) в верхнем колонтитуле появлялись категория защитности и номер квартала из столбцов В и С с первой строки каждой страницы (каждый квартал начинается с новой страницы, в идеале каждая категория в квартале - тоже);  
   б) номер страницы каждого последующего квартала начинался с пропуском одной страницы (последняя стр предыдущего квартала+2)
 
Еще момент, общая шапка таблицы (строки 1-3) сквозная, это я сделал, а вот верхний колонтитул изменяемый, над шапкой.
 
{quote}{login=Pankratd}{date=10.02.2009 01:38}{thema=Re: }{post}Еще момент, общая шапка таблицы (строки 1-3) сквозная, это я сделал, а вот верхний колонтитул изменяемый, над шапкой.{/post}{/quote}  
я думаю сделать фильтр а потом печать с измененным колонтитулом, и так в цикле до конца.  
 
не жди быстро :) как время найду так сразу :)
 
Марчук, спасибо за участие, а если решишь проблему, да еще прокомментируешь, чтоб можно было аналогичные задачи решать, так с меня пиво. Я в Ижевске, налью от души! "Оформляем воздушными шарами" :-)
 
глюк
 
{quote}{login=Марчук}{date=10.02.2009 06:02}{thema=дома еще посмотрю}{post}глюк{/post}{/quote}  
лови коменты внутри
 
Спасибо, Марчук, почти все работает но при этом каждую страницу печатает с 1 номера (нижний колонтитул).
 
{quote}{login=PankratD}{date=11.02.2009 07:21}{thema=Re: Re: дома еще посмотрю}{post}Спасибо, Марчук, почти все работает но при этом каждую страницу печатает с 1 номера (нижний колонтитул).{/post}{/quote}  
 
Добавил. тока извини я там твои данные немного изменил, чтобы посмотреть как разбивка на нескольео страниц поведет себя.
 
Ничего страшного, тот кусочек данных, лишь малая толика, от всего объема обработки. И таблицы не всегда точно такие же. Я и сам, в принципе, в макросе твоем изменения небольшие внес, так что сейчас постараюсь кусок с страницами перекопировать.  
Спасибо! ;))
 
Последний минус, пропуск страницы идет после каждой категории, а надо только в конце каждого квартала. Как я понимаю, в макросе чтото нужно перетащить из внутреннего цикла во внешний, но что?
 
{quote}{login=Pankratd}{date=11.02.2009 12:07}{thema=RERERERE итд}{post}Последний минус, пропуск страницы идет после каждой категории, а надо только в конце каждого квартала. Как я понимаю, в макросе чтото нужно перетащить из внутреннего цикла во внешний, но что?{/post}{/quote}  
Замени код на это :  
 
Sub Макрос1()  
'  
' Макрос1 Макрос  
' Макрос записан 10.02.2009 (Marchuk)  
 
Dim iLastRow As Long  
Dim AllCells As Range, Cell As Range  
Dim NoDupes As New Collection  
Dim NoDupes2 As New Collection  
Dim intPagesCount As Integer  
Dim intPages0 As Integer  
 
On Error Resume Next  
intPages = 1  
intPages0 = 0  
'хотел сделать проверку включен ли автофильтр (не получилось)  
'If Worksheets(1).FilterMode = True Then  
   ActiveSheet.ShowAllData             'показать все строки автофильтра  
'Else  
'    Rows("3:3").Select  
'    Selection.AutoFilter  
'End If  
iLastRow = Cells(Rows.Count, "A").End(xlUp).Row     'находим последнию строку в колонке А  
For Each Cell In Range("B4:B" & iLastRow)  
   NoDupes.Add Cell.Value, CStr(Cell.Value)        'создаем список уникальных значений по колонке В  
Next Cell  
For i = 1 To NoDupes.Count  
   Range("b3").Select  
   Selection.AutoFilter Field:=3  
   Selection.AutoFilter Field:=2, Criteria1:=NoDupes(i)  
   For Each Cell In Range("c4:c" & iLastRow)  
       If Not Cell.EntireRow.Hidden Then                   'проверка если ячейка не скрытая то выполнить условие  
           NoDupes2.Add Cell.Value, CStr(Cell.Value)       'создаем список уникальных значений по колонке C  
       End If  
   Next Cell  
 
   For j = 1 To NoDupes2.Count  
       Range("c3").Select  
       Selection.AutoFilter Field:=3, Criteria1:=NoDupes2(j)  
       intPagesCount = intPagesCount + (Worksheets(1).HPageBreaks.Count + 1) * (Worksheets(1).VPageBreaks.Count + 1)  
       'MsgBox "intPages=" & intPages & " intPagesCount=" & intPagesCount  
       With ActiveSheet.PageSetup  
           .PrintTitleRows = "$1:$3"  
       End With  
       ActiveSheet.PageSetup.PrintArea = "$D$1:$P$" & iLastRow  
       With ActiveSheet.PageSetup  
           .LeftHeader = "Участковоклесничество: Гуринское"  
           .CenterHeader = "Категория защитности " & NoDupes2(j)  
           .RightHeader = "Квартал " & NoDupes(i)  
           '.RightFooter = "&10&P"  
           .CenterFooter = "&[&P+" & intPages0 & "&]"
       End With  
       'это предварительный просмотр, поставь потом апостроф перед строкой.  
       ActiveWindow.SelectedSheets.PrintPreview  
 
       intPages0 = intPages0 + intPagesCount   'исправлено  
 
       'это закоментирована печать , для печати убери апостроф перед строков  
       'ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True  
   intPagesCount = 0  
   Next j  
 
   intPages0 = intPages0 + 1 'добавлено    
 
   Set NoDupes2 = Nothing  
Next i  
End Sub
 
Я так понимаю, если в этой строке кода  
"intPages0 = intPages0 + 1 'добавлено" убрать "+1", то нумерация должна быть сквозная, а у меня, если больше 1 страницы в минимальном цикле, нумерация задваивется.  
А если оставляю все как есть, то местами идет как надо, с перекоком, а местами страницы подря (где весь квартал в 1 странице).  
 
Я там с кодом пытался помудрить, разные варианты пробовал, отправляю кусок с изменениями.
 
здесь убрана +1  
intPages0 = intPages0 + intPagesCount 'исправлено  
 
и добавлена после цикла j  
intPages0 = intPages0 + 1 'добавлено
 
Насколько я понимаю (а я ничего уже не понимаю, к вечеру дурная башка) проблема где-то с определением последнего номнра страницы.
 
{quote}{login=Pankratd}{date=11.02.2009 03:42}{thema=Re: }{post}Насколько я понимаю (а я ничего уже не понимаю, к вечеру дурная башка) проблема где-то с определением последнего номнра страницы.{/post}{/quote}  
ты мой код вставь, там вроде все ок.
 
И так и сяк пробовал уже, ну глючат номера и все тут.    
post_48939 смотри. Не смог добиться ни проскоков правильных ни сплошной нумерации. То проскоки через раз, то в номерах дубли.  
 
PS: С формулами у меня усё у порядке, а вот в макросы ну никак не въеду ;((
 
Доброе утро всем.  
Так и не получается до конца желаемое. И что делает этот кусок кода? Повлияет ли он, если я печатаю с разных листов, а внем указан (1)?  
intPagesCount = intPagesCount + (Worksheets(1).HPageBreaks.Count + 1) * (Worksheets(1).VPageBreaks.Count + 1)  
 
Пока печатаю без нумерации, страницы за второй прогон через принтер.
Страницы: 1
Читают тему
Loading...