powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Разрывы страниц в Excel
15 сообщений из 40, страница 2 из 2
Разрывы страниц в Excel
    #34090016
sergeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а чем не понравилось мое предложение от 20 октября, может что непонятно, поясню. процедура расчитана на горизонтальные разделители, если есть еще вертикальные, которые тоже нужно двигать, то можно что-то подобное и по ним сделать.

в расчетке должна присутствовать обязательно особенная первая строка, количество остальных строк в расчетке неважно.
в приведенном примере особенностью первой строки является надчеркивание в первой ячейке, т.е. при форматировании установлена линия вверху ячейки. можно сделать проверку на какой-нибудь символ или еще что, главное, чтобы эта особенность была в каждой расчетке.

процедура работает так: каждый горизонтальный разделитель двигается вверх до тех пор, пока не встретится эта особенная строка, тогда там и остается. работает долго, поскольку после каждой установки разделителя ексель производит полный пересчет нижеследующих разделителей.

ps проверку, что одна расчетка не умещается на страницу, не делал.
...
Рейтинг: 0 / 0
Разрывы страниц в Excel
    #34090456
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergeyvgа чем не понравилось мое предложение от 20 октября, может что непонятно, поясню. процедура расчитана на горизонтальные разделители, если есть еще вертикальные, которые тоже нужно двигать, то можно что-то подобное и по ним сделать.

в расчетке должна присутствовать обязательно особенная первая строка, количество остальных строк в расчетке неважно.
в приведенном примере особенностью первой строки является надчеркивание в первой ячейке, т.е. при форматировании установлена линия вверху ячейки. можно сделать проверку на какой-нибудь символ или еще что, главное, чтобы эта особенность была в каждой расчетке.

процедура работает так: каждый горизонтальный разделитель двигается вверх до тех пор, пока не встретится эта особенная строка, тогда там и остается. работает долго, поскольку после каждой установки разделителя ексель производит полный пересчет нижеследующих разделителей.

ps проверку, что одна расчетка не умещается на страницу, не делал.

спасибо за предложение, но мне не это нужно...
ставить разрывы страниц после каждой расчётки я умею... расчётки на лист добавляются поочереди, после добавления каждой расчётки я сразу ставлю разрыв, работает очень быстро между прочим...автоматические разрывы даже не ставлю...мне нужно определять влезет ли 2 расчётки на 1 лист...если влезет то поставить соответствующий разрыв..
...
Рейтинг: 0 / 0
Разрывы страниц в Excel
    #34091134
sergeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
АленочкаДоброе время суток!
Есть лист с расчетными листами сотрудников.
Все расчётки содержат разное количество строк (это кол-во я могу вычислить).
Нужно расставить разрывы страниц так, чтобы по возможности на 1 лист поместилось 2 расчётки, если две расчётки например 1-ая и 2-ая вместе не умещаются, то 1-ую печатать отдельно, а 2-ую попробовать уместить с 3-ей, 3-юю с 4-ой и так далее по нарастающей...

вот твоя первоначальная просьба, я утверждаю, что предложенный алгоритм ей удовлетворяет, я ведь не ставлю разделитель после каждой расчетки, как ты упорно мне втолковываешь, а передвигаю к началу ближайшей расчетки, а уж сколько их на листе получилось, да хоть 10.
...
Рейтинг: 0 / 0
Разрывы страниц в Excel
    #34093088
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
уважаемый, sergeyvg, у меня ваш макрос не делает абсолютно ничего


-----------------------------------------------
А мы тут плюшками балуемся...

Аленочка тм
...
Рейтинг: 0 / 0
Разрывы страниц в Excel
    #34094035
sergeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
необходимо выполнить несколько условий, чтобы макрос что-то делал.

0. так как макрос реальный, то там стоит имя листа "Расч.листки", его необходимо поменять на тот, который у вас.
1. первыя ячейка первых строк расчеток должна иметь надчеркивание, толщина линии не имеет значение. это условие после можно изменить на то, какое вам больше подойдет для поиска первой строки расчеток.
2. макрос должен быть в модуле книги.
3. он начинает работать, если начать печатать или выполнить превью.
...
Рейтинг: 0 / 0
Разрывы страниц в Excel
    #34096014
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergeyvgнеобходимо выполнить несколько условий, чтобы макрос что-то делал.

0. так как макрос реальный, то там стоит имя листа "Расч.листки", его необходимо поменять на тот, который у вас.
1. первыя ячейка первых строк расчеток должна иметь надчеркивание, толщина линии не имеет значение. это условие после можно изменить на то, какое вам больше подойдет для поиска первой строки расчеток.
2. макрос должен быть в модуле книги.
3. он начинает работать, если начать печатать или выполнить превью.

sergeyvg, вы меня извините конечно, но я не настолько дура, чтобы не сделать всё то, о чём вы написали...всё было сделано в точности с вашими текущими рекомендациями
...
Рейтинг: 0 / 0
Разрывы страниц в Excel
    #34096017
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 sergeyvg

ваш макрос независимо от того, откуда я его запускаю и что меняю в условии постоянно расставляет разрывы через одинаковое количество строк (через 56)

и что же тут я неправильно написала по вашему?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Private Sub test()
Dim I As Long, RowUpN As Long, ErrHP As Long, FlagOut As Boolean
If ActiveSheet.Name = "test" Then
  Application.ScreenUpdating = False: ActiveSheet.DisplayPageBreaks = True
  ActiveWindow.View = xlPageBreakPreview: ActiveSheet.ResetAllPageBreaks
  For I =  1  To  10000 
    On Error Resume Next
    RowUpN = ActiveSheet.HPageBreaks(I).Location.Row 'строка с разделителем страницы
    ErrHP = Err.number
    On Error GoTo  0 
    If ErrHP =  0  Then
      FlagOut = False
      Do While Cells(RowUpN,  1 ).Value = "начало" 'Borders(xlEdgeTop).LineStyle = xlNone
        RowUpN = RowUpN -  1 : FlagOut = True
      Loop
      If FlagOut Then ActiveSheet.HPageBreaks.Add Rows(RowUpN)
    Else
      Exit For 'кончились страницы
    End If
  Next I
  ActiveWindow.View = xlNormalView: Application.ScreenUpdating = True
End If
End Sub


-----------------------------------------------
А мы тут плюшками балуемся...

Аленочка тм
...
Рейтинг: 0 / 0
Разрывы страниц в Excel
    #34096749
sergeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
      Do While Cells(RowUpN,  1 ).Value = "начало" 'Borders(xlEdgeTop).LineStyle = xlNone
поправить надо было, как минимум, так:)
Код: plaintext
      Do While Cells(RowUpN,  1 ).Value <> "начало" 'Borders(xlEdgeTop).LineStyle = xlNone
...
Рейтинг: 0 / 0
Разрывы страниц в Excel
    #34099362
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergeyvg
Код: plaintext
      Do While Cells(RowUpN,  1 ).Value = "начало" 'Borders(xlEdgeTop).LineStyle = xlNone
поправить надо было, как минимум, так:)
Код: plaintext
      Do While Cells(RowUpN,  1 ).Value <> "начало" 'Borders(xlEdgeTop).LineStyle = xlNone


ok. согласна. до конца не разобралась. сейчас убедилась в том что макрос действительно работает и делает всё как надо. спасибо большое, за то что у вас хватило терпения и за помощь конечно :-)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Разрывы страниц в Excel
    #35637463
MakarovAlv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Аленочка, зная, что по умолчанию на страницу Excel влезает 56 строк, для каждой следующей расчетки можно определить: хватит ли ей места на текущем листе, либо ее надо перекинуть на следующий. На С# такие методы выглядят сл. образом
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
		/// <summary>
		/// Возвращает флаг: поместяться ли строки на текущей странице, либо 
		/// </summary>
		/// <param name="iCurrRow">Текущая позиция</param>
		/// <param name="constrRow">Количество строк</param>
		/// <returns></returns>
		private static bool rowsFitOnPage(int iCurrRow, int constrRow) {
			return getPageIndex(iCurrRow) == getPageIndex(iCurrRow + constrRow);
		}

		/// <summary>
		/// Получить индекс текущей страницы (50)
		/// </summary>
		/// <param name="currRow">текущая позиция</param>
		/// <returns></returns>
		private static int getPageIndex(int currRow) {
			return CommonUtil.convertToInt(Math.Floor(currRow / (double)PAGE_ROW_COUNT));
		}

		/// <summary>
		/// Пододвинет индекс до ближайшей страницы (50)
		/// </summary>
		/// <param name="currRow">текущая позиция</param>
		/// <returns></returns>
		private static int moveToNextPage(int currRow) {
			int currentHundred = getPageIndex(currRow) + 1;
			return currentHundred * PAGE_ROW_COUNT + 1;
		}

PAGE_ROW_COUNT=56
...
Рейтинг: 0 / 0
Разрывы страниц в Excel
    #35638433
Фотография ICQRobot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
топикастеру,

а с чем связана данная задача? у вас сколько расчеток?

10? 100? 1.000? 10.000?

по всей видимости вы хотите экономить бумагу?

пачку? 10 пачек? 1000 пачек?
...
Рейтинг: 0 / 0
Разрывы страниц в Excel
    #35640196
SoftParanoik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В модуль книги добавляешь

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
Private wCellBegin As Excel.Range
Private wCellEnd As Excel.Range
Private wCellFirst As Excel.Range

Function GetFirstDoc() As Excel.Range
    Set wCellBegin = Nothing
    Set wCellEnd = Nothing
    Set wCellFirst = Nothing
    
    Set GetFirstDoc = Nothing
    
    Set wCellBegin = ActiveSheet.Columns("B").Find("Ðàñ÷¸òíûé ëèñò ñîòðóäíèêà", LookIn:=xlValues, LookAt:=xlPart)
    
    If wCellBegin Is Nothing Then
        Exit Function
    End If
    
    Set wCellFirst = wCellBegin
    
    Set wCellEnd = ActiveSheet.Columns("A").Find("Ïîäïèñü", LookIn:=xlValues, LookAt:=xlWhole)
    
    If wCellEnd Is Nothing Then
        Exit Function
    End If
    
    Set GetFirstDoc = Range(wCellBegin.EntireRow.Cells( 1 ), wCellEnd.EntireRow.Cells( 4 ))
End Function

Function GetNextDoc() As Excel.Range
    Set GetNextDoc = Nothing
    
    If wCellBegin Is Nothing Or wCellEnd Is Nothing Then
        Exit Function
    End If
    
    Set wCellBegin = ActiveSheet.Columns("B").Find("Ðàñ÷¸òíûé ëèñò ñîòðóäíèêà", After:=wCellBegin, LookIn:=xlValues, LookAt:=xlPart)
    
    If wCellBegin.Address = wCellFirst.Address Then
        Exit Function
    End If
    
    Set wCellEnd = ActiveSheet.Columns("A").Find("Ïîäïèñü", After:=wCellEnd, LookIn:=xlValues, LookAt:=xlWhole)
    
    Set GetNextDoc = Range(wCellBegin.EntireRow.Cells( 1 ), wCellEnd.EntireRow.Cells( 4 ))
End Function

Sub SmartPageBreak()
    Dim wPrintArea As String
    Dim wRaschList As Excel.Range

    With ActiveSheet
        Set wRaschList = GetFirstDoc
        
        If wRaschList Is Nothing Then
            Exit Sub
        End If
        
        wPrintArea = .PageSetup.PrintArea
        
        .PageSetup.PrintArea = wRaschList.Address
        
        Application.ScreenUpdating = False
        
        .ResetAllPageBreaks
        
        Do While Not wRaschList Is Nothing
            .PageSetup.PrintArea = Range(.PageSetup.PrintArea, wRaschList).Address
            If ExecuteExcel4Macro("GET.DOCUMENT(50)") >  1  Then
                .HPageBreaks.Add wRaschList.Cells( 1 )
                .PageSetup.PrintArea = wRaschList.Address
            End If
            Set wRaschList = GetNextDoc
        Loop
        
        Application.ScreenUpdating = True
        
        .PageSetup.PrintArea = wPrintArea
    End With
End Sub

Открываешь страницу с расчетными листками и вызываешь макрос.
Успехов!!!
...
Рейтинг: 0 / 0
Разрывы страниц в Excel
    #35640210
SoftParanoik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь за кракозяблы, так правильно

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
Private wCellBegin As Excel.Range
Private wCellEnd As Excel.Range
Private wCellFirst As Excel.Range

Function GetFirstDoc() As Excel.Range
    Set wCellBegin = Nothing
    Set wCellEnd = Nothing
    Set wCellFirst = Nothing
    
    Set GetFirstDoc = Nothing
    
    Set wCellBegin = ActiveSheet.Columns("B").Find("Расчётный лист сотрудника", LookIn:=xlValues, LookAt:=xlPart)
    
    If wCellBegin Is Nothing Then
        Exit Function
    End If
    
    Set wCellFirst = wCellBegin
    
    Set wCellEnd = ActiveSheet.Columns("A").Find("Подпись", LookIn:=xlValues, LookAt:=xlWhole)
    
    If wCellEnd Is Nothing Then
        Exit Function
    End If
    
    Set GetFirstDoc = Range(wCellBegin.EntireRow.Cells( 1 ), wCellEnd.EntireRow.Cells( 4 ))
End Function

Function GetNextDoc() As Excel.Range
    Set GetNextDoc = Nothing
    
    If wCellBegin Is Nothing Or wCellEnd Is Nothing Then
        Exit Function
    End If
    
    Set wCellBegin = ActiveSheet.Columns("B").Find("Расчётный лист сотрудника", After:=wCellBegin, LookIn:=xlValues, LookAt:=xlPart)
    
    If wCellBegin.Address = wCellFirst.Address Then
        Exit Function
    End If
    
    Set wCellEnd = ActiveSheet.Columns("A").Find("Подпись", After:=wCellEnd, LookIn:=xlValues, LookAt:=xlWhole)
    
    Set GetNextDoc = Range(wCellBegin.EntireRow.Cells( 1 ), wCellEnd.EntireRow.Cells( 4 ))
End Function

Sub SmartPageBreak()
    Dim wPrintArea As String
    Dim wRaschList As Excel.Range

    With ActiveSheet
        Set wRaschList = GetFirstDoc
        
        If wRaschList Is Nothing Then
            Exit Sub
        End If
        
        wPrintArea = .PageSetup.PrintArea
        
        .PageSetup.PrintArea = wRaschList.Address
        
        Application.ScreenUpdating = False
        
        .ResetAllPageBreaks
        
        Do While Not wRaschList Is Nothing
            .PageSetup.PrintArea = Range(.PageSetup.PrintArea, wRaschList).Address
            If ExecuteExcel4Macro("GET.DOCUMENT(50)") >  1  Then
                .HPageBreaks.Add wRaschList.Cells( 1 )
                .PageSetup.PrintArea = wRaschList.Address
            End If
            Set wRaschList = GetNextDoc
        Loop
        
        Application.ScreenUpdating = True
        
        .PageSetup.PrintArea = wPrintArea
    End With
End Sub

...
Рейтинг: 0 / 0
Разрывы страниц в Excel
    #35640333
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аленочка,
и много бумаги предполагаете сэкономить? :)
...
Рейтинг: 0 / 0
Разрывы страниц в Excel
    #35640338
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ICQRobotтопикастеру,

а с чем связана данная задача? у вас сколько расчеток?

10? 100? 1.000? 10.000?

по всей видимости вы хотите экономить бумагу?

пачку? 10 пачек? 1000 пачек?

:) не заметил
...
Рейтинг: 0 / 0
15 сообщений из 40, страница 2 из 2
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Разрывы страниц в Excel
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]