Макрос події для зміни заголовка Excel - Поради Excel

Зміст

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

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

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

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

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

Попередні поради, такі як підказка «Ввести час Excel без двокрапки», мали справу з подією Worksheet_Change. Сьогоднішня порада вимагає додавання коду до події BeforePrint у книзі.

Код, доданий до події, запускатиметься щоразу, коли ця подія буде "запущена". У цьому випадку в будь-який час, коли книгу Excel надруковано, перед початком друку Excel перемикає контроль на код VBA і дозволяє автоматично виконувати все, що ви можете вказати в коді VBA, перед друком.

Я збираюся припустити, що ви новачок у макросах обробника подій. Я збираюся пройти через те, як саме дістатися до потрібного місця, щоб увійти в цей макрос.

У мене є робоча книга під назвою „Tip055 Sample.xls“. Коли книгу завантажено в Excel, я збираюся натиснути alt = "" + F11, щоб запустити редактор Visual Basic. Вигляд редактора за замовчуванням такий, як показано праворуч. Зліва зазвичай ви бачите область проекту, складену поверх панелі властивостей. Більша частина правої частини екрана включає область коду. Якщо у вашій книзі немає макросів, панель коду буде сірою, як показано праворуч.

Я додав до зображення сині курсивні слова, щоб виділити три панелі - у вашому прикладі ви не побачите їх.

Важливо, щоб ви могли бачити панель проекту в редакторі VB. Якщо у вашому поданні редактора VB немає панелі проекту, натисніть Ctrl + R, щоб переглянути панель проекту. Або натисніть значок панелі інструментів, показаний нижче:

На панелі проекту буде показано проект для кожної відкритої книги Excel та кожного встановленого надбудови. Клацніть сірий плюс біля назви книги, щоб розгорнути проект книги. Потім клацніть сірий плюс поруч із папкою Microsoft Excel Objects, щоб розгорнути папку об’єктів. Тепер ви повинні бачити один запис для кожного робочого аркуша і один запис під назвою ThisWorkbook.

Клацніть правою кнопкою миші запис для ThisWorkbook та виберіть у розкривному меню пункт Перегляд коду.

Тепер у вас, ймовірно, буде велика пуста біла панель коду, що займає праву сторону екрана. У верхній частині панелі коду є два випадаючі меню, на яких буде вказано (Загальне) та (Декларації).

  • У спадному меню ліворуч виберіть Книгу.
  • Правий випадаючий список тепер заповнюється всіма програмованими подіями, пов’язаними з книгою. Тут є події, які запускатимуть код щоразу, коли книгу відкриватимуть, активуватимуть, деактивуватимуть тощо. Сьогодні ми хочемо написати код у події BeforePrint, тому виберіть BeforePrint у правому спадному меню.

Зауважте, що кожного разу, коли ви вибираєте щось із потрібного випадаючого списку, редактор VBA записує для вас початковий і кінцевий рядок коду в модуль коду. Коли ви вперше змінили лівий випадаючий список на Workbook, ви, мабуть, отримали початок підпрограми Workbook_Open за замовчуванням. Якщо ви не збираєтеся писати процедуру Workbook_Open, спробуйте видалити цю порожню процедуру.

Тепер про написання коду VBA. Є кілька корисних змінних, якими ви можете скористатися.

  • ActiveWorkbook.Path поверне шлях до книги. Це може виглядати як "C: My Documents 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 за допомогою меню Файл> Закрити та поверніться до Microsoft Excel.

Щоразу, коли ви друкуєте аркуш, код запускатиметься та вставлятиме поточний шлях у відповідний верхній або нижній колонтитул, який ви вказали в коді VBA.

Деякі примітки та застереження:

  • Початківці користувачі Excel навіть уявлення не мають, що цей код є у книзі. Коли вони відкривають книгу, вони можуть отримати попередження про безпеку, що файл містить макроси, але не буде жодного попередження, коли код VBA вдарить все, що у них було як центральний нижній колонтитул, і розмістить там шлях. Це може призвести до печії. Уявіть, через 5 років хтось користується вашою робочою книгою, а новий менеджер хоче, щоб ім’я файлу перемістилося з центрального нижнього колонтитула в потрібний. Цей користувач може знати, як вручну змінити налаштування у меню Файл> Налаштування сторінки, але якщо він не знає, чи є там код, він призведе до того, що код постійно змінює їх нижній колонтитул.

    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.

Цікаві статті...