Macro sự kiện để thay đổi tiêu đề Excel - Mẹo Excel

Mục lục

Donna từ Missouri hỏi:

Bạn có bất kỳ ý tưởng nào về cách tôi có thể lấy đường dẫn nơi tài liệu được lưu được chỉ ra trong đầu trang hoặc chân trang - hoặc bất kỳ nơi nào trong tài liệu. Tôi có thể lấy tên tệp bằng & f nhưng tôi không thể tìm ra cách thực hiện đường dẫn.

Trước hết, tôi hiểu rằng Microsoft đã thêm chức năng này vào Excel XP và tôi cung cấp kudo cho họ vì đây là một vấn đề thường gặp. Bất kỳ độc giả nào đã nâng cấp lên Office XP sẽ không cần các kỹ thuật trong mẹo của tuần này để giải quyết vấn đề này, nhưng chúng vẫn hữu ích để giải quyết các vấn đề khác.

Giải pháp cho mẹo này là một loại macro đặc biệt được gọi là macro xử lý sự kiện. Chúng tôi sẽ kiểm soát ngắn gọn Excel mỗi khi nó chuẩn bị in sổ làm việc của chúng tôi và thêm đường dẫn hiện tại vào tiêu đề.

Nhiều người dùng Excel đã ghi lại các macro đơn giản. Các macro được lưu trữ trong một mô-đun có tên là Module1 hoặc Module2 và trở thành một phần của dự án của bạn. Hôm nay, tôi sẽ thảo luận về macro xử lý sự kiện. Các macro này nằm trên một mô-đun mã đặc biệt được liên kết với mỗi trang tính hoặc sổ làm việc.

Các mẹo trước đây chẳng hạn như mẹo Nhập thời gian Excel Không có Dấu hai chấm đã xử lý sự kiện Worksheet_Change. Mẹo hôm nay yêu cầu chúng ta thêm một số mã vào sự kiện BeforePrint của Workbook.

Mã được thêm vào một sự kiện sẽ được chạy bất cứ khi nào sự kiện đó được "kích hoạt". Trong trường hợp này, bất kỳ lúc nào sổ làm việc Excel được in, trước khi bắt đầu in, Excel sẽ chuyển quyền kiểm soát sang mã VBA và cho phép bất kỳ điều gì bạn có thể chỉ định trong mã VBA tự động xảy ra trước khi in.

Tôi sẽ giả sử bạn chưa quen với macro xử lý sự kiện. Tôi sẽ hướng dẫn chính xác cách đến đúng nơi để nhập macro này.

Tôi có một sổ làm việc có tên 'Tip055 Sample.xls'. Với sổ làm việc được tải trong Excel, tôi sẽ nhấn alt = "" + F11 để bắt đầu trình chỉnh sửa cơ bản trực quan. Giao diện mặc định của trình chỉnh sửa như được hiển thị bên phải. Ở bên trái, bạn thường thấy ngăn Dự án được xếp chồng lên trên ngăn Thuộc tính. Hầu hết phía bên phải của màn hình bao gồm Ngăn mã. Nếu bạn không có macro nào trong sổ làm việc của mình, ngăn mã của bạn sẽ có màu xám như được hiển thị ở bên phải.

Tôi đã thêm các từ script in nghiêng màu xanh lam vào hình ảnh để xác định ba ngăn - bạn sẽ không thấy những từ này trong ví dụ của mình.

Điều quan trọng là bạn có thể thấy Ngăn dự án trong trình soạn thảo VB. Nếu dạng xem của bạn về trình soạn thảo VB không bao gồm ngăn dự án, hãy nhấn Ctrl + R để xem Ngăn dự án. Hoặc, nhấp vào biểu tượng thanh công cụ được hiển thị bên dưới:

Ngăn dự án sẽ hiển thị một dự án cho mọi sổ làm việc Excel đang mở và mọi Phần bổ trợ được cài đặt. Bấm vào dấu cộng màu xám bên cạnh tên sổ làm việc của bạn để mở rộng dự án cho sổ làm việc của bạn. Sau đó, nhấp vào dấu cộng màu xám bên cạnh thư mục Đối tượng Microsoft Excel để mở rộng thư mục đối tượng. Bây giờ bạn sẽ thấy một mục nhập cho mọi trang tính và một mục nhập có tên ThisWorkbook.

Bấm chuột phải vào mục nhập cho ThisWorkbook và chọn Mã Chế độ xem từ menu bật lên.

Bây giờ bạn có thể sẽ có một ngăn mã màu trắng lớn trống chiếm phía bên phải của màn hình. Có hai danh sách thả xuống ở đầu ngăn mã sẽ cho biết (Chung) và (Khai báo).

  • Từ menu thả xuống bên trái, chọn Workbook.
  • Trình đơn thả xuống bên phải hiện được điền với tất cả các sự kiện có thể lập trình được liên kết với sổ làm việc. Ở đây có các sự kiện sẽ chạy mã bất kỳ lúc nào sổ làm việc được mở, kích hoạt, hủy kích hoạt, v.v. Hôm nay, chúng ta muốn viết mã trong sự kiện BeforePrint, vì vậy hãy chọn BeforePrint từ menu thả xuống bên phải.

Lưu ý rằng mỗi khi bạn chọn nội dung nào đó từ menu thả xuống bên phải, trình soạn thảo VBA sẽ ghi dòng mã đầu và dòng mã kết thúc vào mô-đun mã cho bạn. Lần đầu tiên thay đổi menu thả xuống bên trái thành Workbook, bạn có thể nhận được phần đầu của chương trình con Workbook_Open theo mặc định. Nếu bạn không viết một thủ tục Workbook_Open, bạn nên xem xét việc xóa thủ tục trống này.

Bây giờ, hãy viết mã VBA. Có một số biến hữu ích mà bạn có thể sử dụng.

  • ActiveWorkbook.Path sẽ trả về đường dẫn của sổ làm việc. Nó có thể giống như "C: My Documents MrExcel".
  • ActiveWorkbook.FullName sẽ trả về đường dẫn và tên tệp của sổ làm việc. Nó có thể giống như "C: My Documents MrExcel Tip055 Sample.xls".

Bạn có thể gán biến này là một trong một trong 6 vị trí sau:

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

Dưới đây là ba macro mẫu có thể có.

Macro này sẽ có thêm đường dẫn và tên tệp làm chân trang bên phải của trang tính đang hoạt động:

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

Macro này sẽ có thêm đường dẫn làm tiêu đề bên trái của Sheet1 và làm chân trang giữa của Sheet2:

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

Nếu bạn có xu hướng sử dụng tùy chọn "Toàn bộ Sổ làm việc" khi in, phiên bản này sẽ thêm tên đầy đủ làm chân trang giữa cho tất cả các trang tính:

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

Làm theo một trong những ví dụ này hoặc tạo một trong những ví dụ của riêng bạn. Khi bạn hoàn tất, hãy đóng trình chỉnh sửa VBA bằng Tệp> Đóng và Quay lại Microsoft Excel.

Bất cứ khi nào bạn in trang tính, mã sẽ chạy và chèn đường dẫn hiện tại vào đầu trang hoặc chân trang thích hợp mà bạn đã chỉ ra trong mã VBA.

Một số lưu ý và lưu ý:

  • Người dùng mới làm quen với Excel sẽ ít biết rằng mã này nằm trong sổ làm việc. Khi họ mở sổ làm việc, họ có thể nhận được cảnh báo bảo mật rằng tệp chứa macro, nhưng sẽ không có cảnh báo khi mã VBA đánh dấu bất cứ thứ gì họ có làm chân trang trung tâm và đặt tên đường dẫn ở đó. Điều này có thể dẫn đến chứng ợ nóng. Hãy tưởng tượng 5 năm kể từ bây giờ ai đó đang sử dụng sổ làm việc của bạn và người quản lý mới muốn tên tệp chuyển từ chân trang giữa sang chân trang bên phải. Người này có thể biết cách thay đổi thủ công cài đặt trong File> PageSetup, nhưng nếu họ không biết mã ở đó, điều đó sẽ khiến họ gặp rắc rối vì mã liên tục thay đổi chân trang của họ trở lại.

    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

    Khi một lỗi xảy ra trong macro, các sự kiện sẽ không bao giờ được bật lại. Khi điều này xảy ra, có rất ít cảnh báo. Nếu bạn nghi ngờ rằng trình xử lý sự kiện của bạn không được thực thi, hãy chuyển đến trình chỉnh sửa cơ bản trực quan. Nhấn Ctrl + g để hiển thị một ngăn ngay lập tức. Trong ngăn ngay lập tức, nhập:

    Print Application.EnableEvents

    và nhấn enter. Nếu bạn thấy rằng điều này được đặt thành Sai, thì hãy nhập dòng sau vào ngăn ngay lập tức:

    Application.EnableEvents = True

    và nhấn enter.

Cảm ơn Donna vì một câu hỏi tuyệt vời. Trong quá trình giải thích câu trả lời, đó là một cơ hội tuyệt vời để mở rộng khái niệm về Trình xử lý sự kiện trong VBA.

thú vị bài viết...