Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.09.2015, 00:58   #1
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию поиск разрыва страницы Delphi VBA Excel

не могу понять как узнать номер строки последнего разрыва страницы
пробовал так:

Код:
Ap := CreateOleObject('Excel.Application');
....
i:=Ap.Worksheets.hPageBreaks[Ap.WorkSheets.HPageBreaks.Count].Location.Row;
и так:
Код:
Ap := CreateOleObject('Excel.Application');
....
i:=Ap.Worksheets.hPageBreaks.item[Ap.WorkSheets.HPageBreaks.Count].Location.Row;
если указать в hPageBreaks любой индекс кроме 1 пишет ошибку 'не верный индекс'
может подскажете что??
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Старый 19.09.2015, 10:12   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Так работает?
WorkSheets-это коллекция а не отдельный лист
Код:
i:=Ap.Worksheets[1].hPageBreaks[Ap.WorkSheets[1].HPageBreaks.Count].Location.Row;
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 19.09.2015, 11:11   #3
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

у ексель по листу сразу расставлены горизонтальные и вертикальные разрывы страниц
этот
Код:
Function AtPage(rg As Range) As Long
  Dim i As Long
  i = 1
  Do While rg.Row > HPageBreaks(i).Location.Row
    i = i + 1
  Loop
  AtPage = i
End Function
вернет номер 1-го горизонтального разрыва страницы за rg. в качестве rg передайте последнюю строку с данными на листе.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 19.09.2015, 14:00   #4
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

Цитата:
Сообщение от doober Посмотреть сообщение
Так работает?
WorkSheets-это коллекция а не отдельный лист
Код:
i:=Ap.Worksheets[1].hPageBreaks[Ap.WorkSheets[1].HPageBreaks.Count].Location.Row;
и так тоже пробовал.
П.С. Worksheets в данном случае не обязательно обращаться как к элементу коллекции.
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Старый 19.09.2015, 14:10   #5
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
у ексель по листу сразу расставлены горизонтальные и вертикальные разрывы страниц
этот
Код:
Function AtPage(rg As Range) As Long
  Dim i As Long
  i = 1
  Do While rg.Row > HPageBreaks(i).Location.Row
    i = i + 1
  Loop
  AtPage = i
End Function
вернет номер 1-го горизонтального разрыва страницы за rg. в качестве rg передайте последнюю строку с данными на листе.
вам не кажется что вы не внимательно прочитали в чем проблема?? дело в том что в Delphi
Код:
 HPageBreaks(i).Location.Row //i только единицей
я не могу понять почему так?
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Старый 19.09.2015, 14:22   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

потому что данных на листе на одну печатную страницу
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 19.09.2015, 14:42   #7
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
потому что данных на листе на одну печатную страницу
файл заполняется в цикле после заполнения некоторого количества строк
проверяется какая ячейка последняя на текущей области печати Ap.WorkSheets[1].HPageBreaks.Count - функция выдает как раз таки количество разделителей.

в ручную проверял, на момент выполнения функции минимум 3 области печати заполнены может я где то не понимаю принципов работы Excel ?
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Старый 21.09.2015, 04:27   #8
AndVGri
Форумчанин
 
Регистрация: 10.02.2012
Сообщений: 109
По умолчанию

Проблема может быть в том, что Excel не рассчитывает PageBreaks, если лист (точнее окно) находится в режиме xlNormalView. Сами посудите, при обычной работе, как бы много у вас не было данных на листе, вы не видите пунктирных линий границ страницы в этом режиме - так ведь?
Поэтому переключите отображение, например, в xlPageBreakPreview, или измените настройки принтера. Тогда у вас и появится информация о PageBreaks.
AndVGri вне форума Ответить с цитированием
Старый 22.09.2015, 18:22   #9
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

Цитата:
Сообщение от AndVGri Посмотреть сообщение
Проблема может быть в том, что Excel не рассчитывает PageBreaks, если лист (точнее окно) находится в режиме xlNormalView. Сами посудите, при обычной работе, как бы много у вас не было данных на листе, вы не видите пунктирных линий границ страницы в этом режиме - так ведь?
Поэтому переключите отображение, например, в xlPageBreakPreview, или измените настройки принтера. Тогда у вас и появится информация о PageBreaks.
не подскажете как это сделать??
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Старый 22.09.2015, 18:47   #10
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

Спасибо большое за помощь получилось так для Delphi
Код:
Ap := CreateOleObject('Excel.Application');
....
Ap.ActiveWindow.View:=2;   //2=xlPageBreakPreview
i:=Ap.Worksheets.hPageBreaks.item[Ap.WorkSheets.HPageBreaks.Count].Location.Row;
Ap.ActiveWindow.View:=1;   //1=xlNormalView 
....
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как отличить разрыв страницы от разрыва раздела средствами VBA? Скрипт Microsoft Office Word 2 20.11.2013 08:54
При вставке разрыва - новой страницы перед нумерованным заголовком пустая строка Andrfire Microsoft Office Word 3 14.10.2013 18:11
Поиск на листе Excel (VBA) adlansuliman Microsoft Office Excel 5 09.05.2013 15:05
Как узнать позицию разрыва страницы edikamn Microsoft Office Excel 1 10.09.2010 16:19
Макрос VBA EXCEl - простановка в ячейку номера страницы Обыватель Microsoft Office Excel 1 14.02.2008 12:49