befaint
|||||||||||||
- Tham gia
- 6/1/11
- Bài viết
- 14,515
- Được thích
- 19,699
Bài 2. Ghi macro
(Danh sách các bài viết về VBA xem ở đây Index - Các bài viết về VBA)
Ghi macro (Record Macro) là một công cụ rất hữu ích trong Excel VBA, nó ghi lại các thao tác thực hiện trên bảng tính Excel.
Bạn chỉ cần ghi lại một tác vụ (một hoặc nhiều thao tác) thực hiện với bảng tính Excel. Tiếp đó, bạn gán nó (assign macro) vào một nút lệnh rồi click nút lệnh đó để lặp lại tác vụ vừa được ghi.
Mặt khác, khi bạn không rõ, không biết tạo một chương trình (tác vụ) cụ thể trong VBA thì bạn hãy sử dụng chức năng ghi macro. Sau khi bạn ghi macro xong, bạn có thể vào cửa sổ VBA để xem chi tiết macro đó.
Tuy nhiên, macro được tạo ra bởi việc ghi macro có nhược điểm. Đó là, macro đó áp dụng cụ thể với trường hợp bạn vừa thao tác và ghi lại, câu lệnh chưa tối ưu, không áp dụng được vùng dữ liệu khác... nên cần phải hiệu chỉnh với mục đích cụ thể.
Cách thực hiện:
- Trên menu Developer, click nút Record Macro.
- Cửa sổ Record Macro hiện ra. Đặt tên cho macro, thiết lập phím tắt để chạy (Run) macro, thiết lập nơi hiệu lực của macro, miêu tả...
Rồi click OK.
- Khi đó chức năng Record Macro bắt đầu hoạt động, nhiệm vụ của bạn khi đó là thực hiện các thao tác cần ghi lại trên bảng tính Excel.
Sau khi thao tác xong, bạn click nút Stop Recording trên menu Developer để kết thúc việc ghi macro.
Ví dụ 1:
Tại Sheet1, ta nhập số thứ tự từ 1 tới 5 vào các ô [A2:A6])
- Để xem code mà macro vừa được ghi lại, bạn vào cửa sổ VBA (nhấn Alt+F11)
- Để gán macro vừa được ghi vào nút lệnh, ta chèn một shape hình chữ nhật rồi assign macro "Macro1" vào.
- Chạy thử Macro1: Xóa vùng dữ liệu ở [A2:A6] rồi click vào nút lệnh vừa tạo.
Ví dụ 2:
Tại Sheet2, cho dữ liệu ở vùng A2:C20, điều kiện lọc theo Mã tại E2, sử dụng chức năng Advanced Filter để lọc kết quả và đặt kết quả lọc được tại H2:I2.
(Danh sách các bài viết về VBA xem ở đây Index - Các bài viết về VBA)
Ghi macro (Record Macro) là một công cụ rất hữu ích trong Excel VBA, nó ghi lại các thao tác thực hiện trên bảng tính Excel.
Bạn chỉ cần ghi lại một tác vụ (một hoặc nhiều thao tác) thực hiện với bảng tính Excel. Tiếp đó, bạn gán nó (assign macro) vào một nút lệnh rồi click nút lệnh đó để lặp lại tác vụ vừa được ghi.
Mặt khác, khi bạn không rõ, không biết tạo một chương trình (tác vụ) cụ thể trong VBA thì bạn hãy sử dụng chức năng ghi macro. Sau khi bạn ghi macro xong, bạn có thể vào cửa sổ VBA để xem chi tiết macro đó.
Tuy nhiên, macro được tạo ra bởi việc ghi macro có nhược điểm. Đó là, macro đó áp dụng cụ thể với trường hợp bạn vừa thao tác và ghi lại, câu lệnh chưa tối ưu, không áp dụng được vùng dữ liệu khác... nên cần phải hiệu chỉnh với mục đích cụ thể.
Cách thực hiện:
- Trên menu Developer, click nút Record Macro.
- Cửa sổ Record Macro hiện ra. Đặt tên cho macro, thiết lập phím tắt để chạy (Run) macro, thiết lập nơi hiệu lực của macro, miêu tả...
Rồi click OK.
- Khi đó chức năng Record Macro bắt đầu hoạt động, nhiệm vụ của bạn khi đó là thực hiện các thao tác cần ghi lại trên bảng tính Excel.
Sau khi thao tác xong, bạn click nút Stop Recording trên menu Developer để kết thúc việc ghi macro.
Ví dụ 1:
Tại Sheet1, ta nhập số thứ tự từ 1 tới 5 vào các ô [A2:A6])
- Để xem code mà macro vừa được ghi lại, bạn vào cửa sổ VBA (nhấn Alt+F11)
- Để gán macro vừa được ghi vào nút lệnh, ta chèn một shape hình chữ nhật rồi assign macro "Macro1" vào.
- Chạy thử Macro1: Xóa vùng dữ liệu ở [A2:A6] rồi click vào nút lệnh vừa tạo.
PHP:
Sub Macro1()
''
'' Macro1 Macro
'' Record Macro
''
'' Keyboard Shortcut: Ctrl+Shift+R
''
Range("A2").Select
ActiveCell.FormulaR1C1 = "1"
Range("A3").Select
ActiveCell.FormulaR1C1 = "2"
Range("A4").Select
ActiveCell.FormulaR1C1 = "3"
Range("A5").Select
ActiveCell.FormulaR1C1 = "4"
Range("A6").Select
ActiveCell.FormulaR1C1 = "5"
Range("A7").Select
End Sub
Ví dụ 2:
Tại Sheet2, cho dữ liệu ở vùng A2:C20, điều kiện lọc theo Mã tại E2, sử dụng chức năng Advanced Filter để lọc kết quả và đặt kết quả lọc được tại H2:I2.
PHP:
Sub Macro2()
''
'' Macro2 Macro
''
Range("B2:C20").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
"E1:E2"), CopyToRange:=Range("H2:I2"), Unique:=False
End Sub