Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
23 / 23 / 4
Регистрация: 08.04.2013
Сообщений: 150

Ошибка при поиске разрывов страниц на листе

28.05.2014, 14:49. Показов 2212. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.

Передо мной стоит задача: На листе есть несколько таблиц, разделенных друг от друга разрывами страниц(установленных вручную). Мне необходимо отследить автоматические разрывы страниц(которые разделяют таблицы), чтобы продублировать шапку разделенной таблицы.

Суть проблемы:
Написал процедуру:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Sub add_table_headers_after_pagebreak(wsh As Worksheet)
Dim i As Integer 'счетчик разрывов
Dim PBC As Integer
Dim flag As Boolean
Dim rowNumb As Integer
 
 
Do 'проходим страницу несколько раз, пока не будет прохода, не вставляющего шапку(значит, больше необработанных разрывов нет)
    PBC = wsh.HPageBreaks.Count
    flag = False 'флаг вставки шапки
    For i = 1 To PBC
        rowNumb = wsh.HPageBreaks.Item(i).Location.row
        If wsh.Range("a" & CStr(rowNumb)).Text <> "Дата" Then 'значит, разрыв не между таблицами, а внутри одной
            wsh.Rows(rowNumb).Insert Shift:=xlDown  'вставляем строку для шапки
            wsh.Rows(rowNumb).PageBreak = xlPageBreakManual ' заменяем автоматический разрыв на принудительный для точного позиционирования
            Call create_table_header(wsh, wsh.Range("a" & CStr(rowNumb))) 'рисуем шапку
            flag = True
            Exit For 'выходим и прогоняем заново, т.к. расстановка автоматических разрывов могла измениться(как и их количество)
        End If
    Next i
Loop Until flag = False
 
End Sub
Однако при ее выполнении возникает ошибка: Subscript out of range (Error 9).
Причем в момент возникновения ошибки счетчик разрывов = 31, а всего разрывов 37.
Возникло ощущение, что все автоматические разрывы программа просто пропускает(проверил по номерам строк разрывов).

При использовании варианта с For... each ошибка возникает сразу же, как только дело доходит до цикла:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub add_table_headers_after_pagebreak(wsh As Worksheet)
Dim i As Integer
Dim PBC As Integer
Dim flag As Boolean
Dim rowNumb As Integer
Dim CurPB As HPageBreak
 
Do 'проходим страницу несколько раз, пока не будет прохода, не вставляющего шапку(значит, больше необработанных разрывов нет)
    flag = False 'флаг вставки шапки
    For Each CurPB In wsh.HPageBreaks
        rowNumb = CurPB.Location.row
        If wsh.Range("a" & CStr(rowNumb)).Text <> "Дата" Then 'значит, разрыв не между таблицами, а внутри одной
            wsh.Rows(rowNumb).Insert Shift:=xlDown  'вставляем строку для шапки
            wsh.Rows(rowNumb).PageBreak = xlPageBreakManual ' заменяем автоматический разрыв на принудительный для точного позиционирования
            Call create_table_header(wsh, wsh.Range("a" & CStr(rowNumb))) 'рисуем шапку
            flag = True
            Exit For 'выходим и прогоняем заново, т.к. расстановка автоматических разрывов могла измениться(как и их количество)
        End If
    Next CurPB
Loop Until flag = False
 
End Sub
Кто-нибудь знает как можно решить данную проблему?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.05.2014, 14:49
Ответы с готовыми решениями:

Ошибка 424 при поиске значения на листе
Доброго дня всем. Непойму что не так с кодом. Private Sub Knopka10_Click() ' Месячный_отчет Макрос Const ИмяЛиста1 As String...

Подсчет разрывов страниц Excel
Добрый день! Столкнулся с проблемой , после ручного добавления разрыва страницы , он судя по всему не попадает в коллекцию HPageBreaks...

Номера страниц при поиске в нижних колонтитулах
Подскажите, как определить с помощью макроса в документе Word номера страниц, где произошло при поиске, только в нижних колонтитулах,...

9
Модератор
Эксперт MS Access
 Аватар для shanemac51
12231 / 5078 / 814
Регистрация: 07.08.2010
Сообщений: 14,933
Записей в блоге: 4
28.05.2014, 15:16
попробуйте идти с хвоста, с последнего разрыва
1
23 / 23 / 4
Регистрация: 08.04.2013
Сообщений: 150
28.05.2014, 15:35  [ТС]
Попробовал, не помогло. Выдает ошибку на первой же итерации.
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12231 / 5078 / 814
Регистрация: 07.08.2010
Сообщений: 14,933
Записей в блоге: 4
28.05.2014, 15:39
и не понимаю, зачем это надо
продублировать шапку разделенной таблицы.
предположим , у вас 5 таблиц
--хотите их распечатать
--но не хотите начинать каждую с новой страницы
--2-я таблица должна начаться сразу после 1-й(после пары служеюных строк)
--если она не влезет на 1стр, то второй лист следует начать с шапки второй таблицы
--и т.д.
0
23 / 23 / 4
Регистрация: 08.04.2013
Сообщений: 150
28.05.2014, 15:44  [ТС]
Цитата Сообщение от shanemac51 Посмотреть сообщение
и не понимаю, зачем это надо
продублировать шапку разделенной таблицы.
предположим , у вас 5 таблиц
--хотите их распечатать
--но не хотите начинать каждую с новой страницы
--2-я таблица должна начаться сразу после 1-й(после пары служеюных строк)
--если она не влезет на 1стр, то второй лист следует начать с шапки второй таблицы
--и т.д.
Видимо, я плохо объяснил.
мне и нужно печатать каждую на новой странице. Но некоторые таблицы слишком длинные и не влезают в одну страницу, поэтому эксель разбивает таблицу на несколько страниц. В результате чего получается: первая страница идет с шапкой, а остальные-это просто столбики данных без подписи. Вот чтоб такого не было, мне и приходится в месте разбиения снова вставлять шапку.

Цитата Сообщение от shanemac51 Посмотреть сообщение
--если она не влезет на 1стр, то второй лист следует начать с шапки второй таблицы
Вот мне и нужно отследить момент, когда она не влезает на страницу
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12231 / 5078 / 814
Регистрация: 07.08.2010
Сообщений: 14,933
Записей в блоге: 4
28.05.2014, 15:53
В результате чего получается: первая страница идет с шапкой, а остальные-это просто столбики данных без подписи.
я обычно подобные отчеты выдаю через НТМ+WORD и таких проблем не имею

причем режима 2
--каждая таблица с новой страницы
--сплошная печать(иногда на страницу попадает 2-3 таблицы)--когда для себя распечатываю, по-компактнее
1
23 / 23 / 4
Регистрация: 08.04.2013
Сообщений: 150
28.05.2014, 15:57  [ТС]
такой вариант, к сожалению, не подойдет.
Обязательным условием является Excel. Также каждая таблица должна располагаться на отдельном листе.
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12231 / 5078 / 814
Регистрация: 07.08.2010
Сообщений: 14,933
Записей в блоге: 4
28.05.2014, 16:03
тогда порядок может быть такой
--скопировать таблицу на новый лист
--на новом листе убрать все разрывы
--сделать сквозные строки
--возможно имя листа в коллонтитуле
1
 Аватар для SlavaRus
1124 / 237 / 37
Регистрация: 15.03.2010
Сообщений: 728
28.05.2014, 16:20
Можно в цикле менять PageSetup.PrintArea на каждую таблицу и делать сквозные строки.
1
23 / 23 / 4
Регистрация: 08.04.2013
Сообщений: 150
28.05.2014, 16:49  [ТС]
Цитата Сообщение от Kirill R Посмотреть сообщение
такой вариант, к сожалению, не подойдет.
Обязательным условием является Excel. Также каждая таблица должна располагаться на отдельном листе.
неправильно я выразился... Не на "листе", а на странице. Вариант со сквозными строками не подойдет, так как в этом случае под каждую таблицу придется отдельный лист создавать. А таблиц очень много.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.05.2014, 16:49
Помогаю со студенческими работами здесь

Как узнать начало страницы без использования принудительных разрывов страниц
Как узнать начало страницы без использования принудительных разрывов страниц и без создания области печати, если ещё лист пустой? ...

Печать расчетной ведомости без разрывов страниц
Отчет расчетная ведомость. Глав бух просит что бы не было разрывов листов как в 1с по умолчанию: первая страница, затем нет пол листа,...

При большом количестве результатов по запросу в поиске нельзя просмотреть более 50 страниц
При большом количестве результатов по запросу в поиске нельзя просмотреть более 50 страниц. Это как-нибудь обходится ? p.s. Возможно...

Ошибка при поиске
здравствуйте уважаемые експерты,мой сайт www.24skelbimai.lt ,в поиске у меня выдает ,ошибку если ничего ненабирать и нажать на поиск,...

Ошибка при поиске
Записал макрос, код даже не трогал, при попытке запуска выдает ошибку Run time error '91': Object variable or with block variable not...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru