Chạy mã macro khi tệp Excel được mở, đóng hoặc kích hoạt sheets cụ thể trong Excel

Nội dung được viết bởi Trần Văn Huệ

Trong nhiều trường hợp, bạn có thể sử dụng mã VBA để thực hiện các thao tác mà các hàm tích hợp sẵn trong Excel không hỗ trợ. Nhưng bạn đã bao giờ cố gắng chạy macro VBA mỗi khi mở hoặc đóng tệp Excel làm việc chưa? Ở phần này của bài viết, Gitiho sẽ chỉ cho các bạn biết cách chạy mã VBA trong khi mở hoặc đóng tệp Excel mọi lúc.

Chạy mã macro khi mở hoặc đóng tệp Excel

Mã macro trong Excel (sử dụng ngôn ngữ lập trình VBA) được sử dụng để tự động hoá các tác vụ và thao tác dữ liệu trên bảng tính chẳng hạn như lấy dữ liệu từ sheet này sang sheet khác, giúp tiết kiệm thời gian và giảm thiểu công sức lặp lại.

Bước 1: Mở tệp Excel cần thực hiện nhiệm vụ.

Bước 2: Nhấn tổ hợp phím Alt + F11 hoặc chọn mục Visual Basic trong thẻ Developer để mở cửa sổ Microsoft Visual Basic for Applications.

Bước 2: Kích đúng vào ThisWorkbook trong ngăn Project bên trái. 

Chạy mã macro khi tệp Excel đươc mở, đóng hoặc được kích hoạt

Bước 3: Trong cửa sổ mã ở bên phải, chọn Workbook từ danh sách thả xuống bên trái. Lưu ý theo mặc định tùy chọn Open sẽ được hiển thị trong danh sách thả xuống bên phải, nếu không hãy chọn lại và thay đổi thành Open.

Chạy mã macro khi tệp Excel đươc mở, đóng hoặc được kích hoạt
 

Bước 4: Sau đó, sao chép mã của riêng bạn mà không có dòng đầu tiên và dòng cuối cùng, rồi dán vào giữa hai dòng là Private Sub Workbook_Open() và End Sub như hình ảnh hiển thị dưới đây.

Chạy mã macro khi tệp Excel đươc mở, đóng hoặc được kích hoạt
 

Bước 5: Bấm vào nút Save để lưu mã, trong hộp thoại nhắc nhở bật lên, bấm nút No.

Chạy mã macro khi tệp Excel đươc mở, đóng hoặc được kích hoạt

Bước 6: Sau đó, hộp thoại Save as hiển thị, đặt tên cho tệp Excel, chọn nơi lưu và chọn định dạng lưu tệp tại khung Save as type là Excel Macro-Enabled Workbook rồi bấm nút Save để hoàn tất.

Chạy mã macro khi tệp Excel đươc mở, đóng hoặc được kích hoạt
 

Bước 7: Bây giờ mã VBA sẽ chạy trong khi tệp Excel làm việc đang mở hoặc khi đóng lại.

Nếu bạn muốn chạy mã trong khi đóng tệp Excel mỗi lần, hãy chọn Deactiviate từ danh sách thả xuống bên phải trong cửa sổ Code và sao chép mã bạn sẽ chạy và rồi dán vào giữa lệnh Private Sub Workbook_Deactivate() và End Sub.

Xem thêm: Cách tính trung bình các giá trị sau khi tìm kiếm Vlookup trong Excel

Chạy mã macro ngay khi file Excel được kích hoạt 

Trong trường hợp bạn chỉ làm việc với một mã VBA cho một file Excel cố định. Thì thay vì phải chạy mã thủ công mỗi khi mở tệp Excel lên để làm việc, dưới đây Gitiho sẽ hướng dẫn cách chạy mã macro tự động ngay khi bạn chọn hoặc kích hoạt một sheets cụ thể từ tệp Excel. Cách thực hiện như sau:

Bước 1: Mở tệp Excel cần phải chạy mã macro tự động.
 

Bước 2: Kích chuột phải vào tên của sheets mà bạn muốn thực thi macro khi kích hoạt nó.

Bước 3: Trong menu hiển thị chọn tùy chọn View Code.

Bước 4: Trong cửa sổ Microsoft Visual Basic for applications đã mở, sao chép và dán mã dưới đây vào modul trống ở bên phải.

Private Sub Worksheet_Activate()
Call MyMacro
End Sub

Chạy mã macro khi tệp Excel đươc mở, đóng hoặc được kích hoạt
 

Lưu ý : Trong đoạn mã trên, bạn có thể thay đổi tên Mymacro thành của riêng bạn.
 

Bước 5: Sau đó, lưu và đóng cửa sổ mã, bây giờ khi bạn chọn hoặc kích hoạt một sheets cụ thể từ tệp Excel thì mã macro này sẽ được kích hoạt ngay lập tức vô cùng tiện lợi.

Cách chạy mã macro cùng lúc trên nhiều tệp Excel cùng lúc

Ở bài viết này, Gitiho sẽ nói về cách chạy macro trên nhiều tệp Excel làm việc cùng một lúc mà không cần mở chúng. Phương pháp sau có thể giúp bạn giải quyết công việc này trong Excel. Để chạy macro trên nhiều tệp Excel đang được mở cùng lúc, bạn có thể sử dụng mã VBA sau:

Bước 1: Mở các tệp Excel cần thực hiện nhiệm vụ.

Bước 2: Nhấn tổ hợp phím Alt + F11 hoặc chọn mục Visual Basic trong thẻ Developer để mở cửa sổ Microsoft Visual Basic for Applications.

Bước 3:  Truy cập vào menu Insert > Module từ danh sách tùy chọn.

Bước 4: Copy và dán macro sau vào cửa sổ module.

Sub LoopThroughFiles()
    Dim xFd As FileDialog
    Dim xFdItem As Variant
    Dim xFileName As String
    Set xFd = Application.FileDialog(msoFileDialogFolderPicker)
    If xFd.Show = -1 Then
        xFdItem = xFd.SelectedItems(1) & Application.PathSeparator
        xFileName = Dir(xFdItem & "*.xls*")
        Do While xFileName <> ""
            With Workbooks.Open(xFdItem & xFileName)
                'your code here
            End With
            xFileName = Dir
        Loop
    End If
End Sub

Lưu ý : Trong đoạn mã trên, bạn có thể sao chép và dán mã của riêng bạn mà không có tiêu đề Sub và kết thúc trang End Sub. Kết thúc giữa các tập lệnh With Workbooks.Open(xFdItem & xFileName) và End With. Chi tiết xem ảnh ngay dưới đây. 

Chạy mã macro khi tệp Excel đươc mở, đóng hoặc kích hoạt sheets cụ thể trong Excel
 

Bước 5: Sau đó nhấn phím F5 để thực thi mã này và cửa sổ Browse được hiển thị, bạn hãy chọn một thư mục chứa các tệp Excel làm việc đang mở mà bạn muốn áp dụng macro này, như ảnh hiển thị dưới đây. 

Chạy mã macro khi tệp Excel đươc mở, đóng hoặc kích hoạt sheets cụ thể trong Excel
 

Bước 6: Sau cùng bấm nút OK, macro mong muốn sẽ được thực thi cùng một lúc từ tệp Excel đang làm việc này một tệp Excel khác cho đến khi kết thúc. 

Trên đây Gitiho vừa hướng dẫn các bạn cách chạy mã macro khi mở, đóng tệp Excel, khi một sheets trong tệp được chọn, khi bạn kích hoạt một sheets cụ thể trong Excel hoặc có thể cài đặt để chạy mã VBA cho đồng thời nhiều tệp Excel đang mở cùng lúc. Chúc các bạn thành công!

Khóa học phù hợp với bất kỳ ai đang muốn tìm hiểu lại Excel từ con số 0. Giáo án được Gitiho cùng giảng viên thiết kế phù hợp với công việc thực tế tại doanh nghiệp, bài tập thực hành xuyên suốt khóa kèm đáp án và hướng dẫn giải chi tiết. Tham khảo ngay bên dưới!

/5 - ( bình chọn)

/5 - ( bình chọn)

0 thảo luận

@ 2020 - Bản quyền của Công ty cổ phần công nghệ giáo dục Gitiho Việt Nam
Giấy chứng nhận Đăng ký doanh nghiệp số: 0109077145, cấp bởi Sở kế hoạch và đầu tư TP. Hà Nội
Giấy phép mạng xã hội số: 588, cấp bởi Bộ thông tin và truyền thông