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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 03.11.2007, 11:46   #1
mik
Пользователь
 
Регистрация: 23.10.2007
Сообщений: 12
По умолчанию Как отловить имена таблиц?

Ситуация: Из-за необходимости подбивать итог по каждой странице многостраничной таблицы, приходится для каждой новой страницы создавать новый лист (Sheet). Каждому листу присваивается имя, являющееся фактически номером страницы.

Задача: В оформлении страницы (Page Setup) на каждом листе печатать "Страница Х из Y". То есть отловить количество листов, название которых является числом, подсчитать количество таких страниц, и вставить в оформление каждой страницы общее количество листов.

Дополнительные пожелания: 1. Помимо страниц названия которых - число, есть страницы у которых название - текст. Часть из страниц название которых текст, хотелось бы включить в подсчёт общего количества страниц (можно внести в название не подсчитываемых страниц какой-нибудь признак, по которому их можно будет исключить из подсчёта).
2. Неплохо было бы обнаружить пропуск в номерах страниц и переименовать листы для исправления этой ошибки.
3. Количество листов не постоянно (они добавляются по мере необходимости с присвоением следующего номера имени листа).

Вопрос: Какими средствами и как можно решить эту задачу не вручную?
mik вне форума
Старый 18.11.2007, 17:02   #2
pashulka
Форумчанин
 
Регистрация: 03.11.2006
Сообщений: 524
По умолчанию

Если дело обстоит именно так, как Вы описали, то если на печать/просмотр выводится рабочий лист и его имя это "число", то X - это имя активного рабочего листа, а Y - количество печатных страниц исходной таблицы (* ибо общее количество необходимых листов должно быть равно количеству печатных страниц в таблице)

Впрочем, если это количество* может и не совпадать, то если номера страниц(имена листов) расположены в порядке возрастания, то для создания нужного колонтитула можно воспользоваться следующим событием, которое необходимо скопировать только в модуль ThisWorkbook(ЭтаКнига)

Код:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
    If TypeOf Me.ActiveSheet Is Worksheet Then
       Dim iList As Worksheet
       For Each iList In Me.Worksheets
           If IsNumeric(iList.Name) = True Then _
              iPages& = iPages& + 1
       Next
       With Me.ActiveSheet
            .PageSetup.CenterFooter = _
            "Страница " & .Name & " из " & iPages&
       End With
    End If
End Sub
Что касается дополнительных пожеланий, то:
1. Добавить ещё одну проверку Вы можете и самостоятельно.
2. Такие действия проводятся, как правило, после открытия рабочей книги (хотя их можно и избежать, т.к. правильно пронумеровать листы, не составляет большого труда)
3. В моём примере это учитывается.
pashulka вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как отловить ошибку в своей проге ??? Crazyman Win Api 8 02.09.2008 09:24
Отловить нажатие кнопок Sanek_ntsk Паскаль, Turbo Pascal, PascalABC.NET 2 12.03.2008 17:38
Отловить копирование на листе SAndrus Microsoft Office Excel 4 05.09.2007 12:29
Отловить нажатие левой кнопки мыши на р листе SAndrus Microsoft Office Excel 2 14.07.2007 13:13
Имена хостов :( InseR Работа с сетью в Delphi 1 04.07.2007 12:15