Макрос события для изменения заголовка Excel - Советы по Excel

Содержание

Донна из Миссури спросила:

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

Прежде всего, я понимаю, что Microsoft добавила эту функцию в Excel XP, и я предлагаю им похвалу, поскольку это часто задаваемая проблема. Любые читатели, которые уже обновили до Office XP, не нуждаются в методах, описанных в совете этой недели, для решения этой проблемы, но они все равно будут полезны для решения других проблем.

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

Многие пользователи Excel пробовали записывать простые макросы. Макросы хранятся в модуле под названием Module1 или Module2 и становятся частью вашего проекта. Сегодня я собираюсь обсудить макросы обработчика событий. Эти макросы находятся в специальном модуле кода, который связан с каждым листом или книгой.

Предыдущие советы, такие как подсказка "Ввести время в Excel без двоеточия", касались события Worksheet_Change. Сегодняшний совет требует, чтобы мы добавили код в событие BeforePrint Workbook.

Код, добавленный к событию, будет запускаться всякий раз, когда это событие «запускается». В этом случае каждый раз, когда книга Excel печатается, до начала печати Excel передает управление коду VBA и позволяет автоматически выполнять все, что вы можете указать в коде VBA, перед печатью.

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

У меня есть книга под названием «Tip055 Sample.xls». Загрузив книгу в Excel, я собираюсь нажать alt = "" + F11, чтобы перейти к визуальному базовому редактору. Внешний вид редактора по умолчанию показан справа. Слева вы обычно видите панель «Проект», расположенную поверх панели «Свойства». Большая часть правой части экрана включает панель кода. Если в вашей книге нет макросов, панель кода будет серой, как показано справа.

Я добавил к изображению слова сценария синим курсивом, чтобы обозначить три панели - вы не увидите их в своем примере.

Важно, чтобы вы могли видеть панель проекта в редакторе VB. Если ваше представление редактора VB не включает панель проекта, нажмите Ctrl + R, чтобы просмотреть панель проекта. Или щелкните значок панели инструментов, показанный ниже:

На панели проекта будет отображаться проект для каждой открытой книги Excel и каждой установленной надстройки. Щелкните серый плюс рядом с названием книги, чтобы развернуть проект книги. Затем щелкните серый значок плюса рядом с папкой объектов Microsoft Excel, чтобы развернуть папку объектов. Теперь вы должны увидеть одну запись для каждого рабочего листа и одну запись с именем ThisWorkbook.

Щелкните правой кнопкой мыши запись ThisWorkbook и выберите «Просмотреть код» во всплывающем меню.

Теперь у вас, вероятно, будет большая пустая белая панель кода, занимающая правую часть экрана. В верхней части панели кода есть два раскрывающихся списка, в которых указано (Общие) и (Объявления).

  • В раскрывающемся меню слева выберите Книга.
  • Правый раскрывающийся список теперь заполнен всеми программируемыми событиями, связанными с книгой. Здесь есть события, которые запускают код каждый раз, когда книга открывается, активируется, деактивируется и т. Д. Сегодня мы хотим написать код в событии BeforePrint, поэтому выберите BeforePrint в правом раскрывающемся списке.

Обратите внимание, что каждый раз, когда вы выбираете что-то в правом раскрывающемся списке, редактор VBA записывает за вас начальную и конечную строки кода в модуль кода. В первый раз, когда вы измените левый раскрывающийся список на Workbook, вы, вероятно, получите начало подпрограммы Workbook_Open по умолчанию. Если вы не собираетесь писать процедуру Workbook_Open, вам следует подумать об удалении этой пустой процедуры.

Теперь перейдем к написанию кода VBA. Есть несколько полезных переменных, которые вы можете использовать.

  • ActiveWorkbook.Path вернет путь к книге. Это может выглядеть как «C: Мои документы MrExcel».
  • ActiveWorkbook.FullName вернет путь и имя файла книги. Он может выглядеть как «C: My Documents MrExcel Tip055 Sample.xls».

Вы можете назначить этой переменной одну из следующих 6 позиций:

Worksheets("Sheet1").PageSetup.LeftHeader = ActiveWorkbook.FullName Worksheets("Sheet1").PageSetup.CenterHeader = ActiveWorkbook.FullName Worksheets("Sheet1").PageSetup.RightHeader = ActiveWorkbook.FullName Worksheets("Sheet1").PageSetup.LeftFooter = ActiveWorkbook.FullName Worksheets("Sheet1").PageSetup.CenterFooter = ActiveWorkbook.FullName Worksheets("Sheet1").PageSetup.RightFooter = ActiveWorkbook.FullName

Вот три возможных примера макроса.

В этом макросе путь и имя файла будут добавлены в правый нижний колонтитул активного рабочего листа:

Private Sub Workbook_BeforePrint(Cancel As Boolean) ActiveSheet.PageSetup.RightFooter = ActiveWorkbook.FullName End Sub

В этом макросе путь будет добавлен как левый верхний колонтитул Sheet1 и как центральный нижний колонтитул Sheet2:

Private Sub Workbook_BeforePrint(Cancel As Boolean) Worksheets("Sheet1").PageSetup.LeftHeader = ActiveWorkbook.Path Worksheets("Sheet2").PageSetup.CenterFooter = ActiveWorkbook.Path End Sub

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

Private Sub Workbook_BeforePrint(Cancel As Boolean) For Each Sh In ActiveWorkbook.Worksheets Sh.PageSetup.CenterFooter = ActiveWorkbook.FullName Next Sh End Sub

Следуйте одному из этих примеров или создайте свой собственный. Когда вы закончите, закройте редактор VBA с помощью File> Close и вернитесь в Microsoft Excel.

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

Некоторые примечания и предостережения:

  • Начинающие пользователи Excel вряд ли будут иметь представление о том, что этот код находится в книге. Когда они открывают книгу, они могут получить предупреждение системы безопасности о том, что файл содержит макросы, но не будет никакого предупреждения, когда код VBA ударит все, что у них было в качестве нижнего колонтитула, и поместит туда путь. Это может привести к изжоге. Представьте, что через 5 лет кто-то использует вашу книгу, и новый менеджер хочет, чтобы имя файла переместилось из центрального нижнего колонтитула в правый нижний колонтитул. Этот человек может знать, что нужно вручную изменить настройки в File> PageSetup, но если они не знают, что код есть, это приведет их в замешательство, поскольку код постоянно изменяет их нижние колонтитулы обратно.

    It is really unlikely that they will be able to find your code module, but just in case they do, you might want to leave a comment in the code module that directs them back to this website for an explanation.

    You also might want to add a comment to cell A1 reminding yourself that there is an event handler set up to change the print headers.

  • There is a setting within VBA which prevents events from running. If your macro suddenly stops working, t is common to find that something within VBA has turned this setting to prevent the events from running. The common scenario is that a programmer starts a macro with:

    Application.EnableEvents = False '… macro here… Application.EnableEvents = True

    Когда в макросе возникает ошибка, события никогда не включаются снова. Когда это происходит, есть небольшое предупреждение. Если вы подозреваете, что ваши обработчики событий не выполняются, перейдите в редактор Visual Basic. Нажмите Ctrl + g, чтобы сразу открыть панель. На непосредственной панели введите:

    Print Application.EnableEvents

    и нажмите Enter. Если вы обнаружите, что для него установлено значение False, введите следующую строку в ближайшей панели:

    Application.EnableEvents = True

    и нажмите Enter.

Спасибо Донне за отличный вопрос. В процессе объяснения ответа это была прекрасная возможность расширить концепцию обработчиков событий в VBA.

Интересные статьи...