LẬP TRÌNH VBA – EXCEL 1 GIỚI THIỆU CHUNG VBA – Visual Basic for Application là một ứng dụng được nhúng trong Excel để thực hiện các thao tác nhất định VBA thường được dùng để rút ngắn thời gian xử lý.
Trang 1LẬP TRÌNH VBA – EXCEL
1 GIỚI THIỆU CHUNG
VBA – Visual Basic for Application là một ứng dụng được nhúng trong Excel để thực hiện các
thao tác nhất định
VBA thường được dùng để rút ngắn thời gian xử lý công việc của mình, giải quyết các vấn đề thủ công, tối ưu hóa khả năng làm việc và xóa bỏ nhàm chán trong công việc
Bạn có thể dùng VBA để giải quyết rất nhiều công việc khác nhau
Lưu trữ danh sách
Lên kế hoạch
Phân tích dữ liệu
Phát triển các biểu đồ
Tự xây dựng các chương trình ♥
VBA có thể dùng để tạo ra các chương trình (Macro là một ứng dụng của VBA đã được tích hợp để phù hợp hơn với phần lớn người dùng) hoặc các Hàm (Function) tương tự như các hàm có sẵn của Excel
Để bắt đầu lập trình VBA, bạn cần bật được Tab Developer trên thanh công cụ Ribbon của Excel Thao tác như sau
Chuột phải tại vị trí bất kì trên thanh Ribbon
Customize the Ribbon → Tick chọn thẻ Developer
Tab Developer lúc này sẽ hiện trên thanh Ribbon
Tab Developer không chỉ hỗ trợ lập trình VBA thuần túy mà còn hỗ trợ ghi Macro (Macro Recording) - Ứng dụng của lập trình VBA
Trang 22 CÁC CHỨC NĂNG LẬP TRÌNH
2.1 BẮT ĐẦU LẬP TRÌNH
Để mở cửa sổ lập trình Microsoft Visual Basic for Application cho File Excel hiện tại, bạn bấm
tổ hợp phím Alt + F11
Tại cửa sổ VBA, bạn chọn Sheet để thực hiện các thao tác lập trình, một môi trường lập trình sẽ
mở ra bên phải để nhập lệnh
Để bắt đầu một chương trình lập trình, bạn bắt đầu với
Sub ten_chuong_trinh () Khi đó, một lệnh kết thúc sẽ được tự động tạo ra đồng thời
End Sub Tương tự như một chương trình main() ở các ngôn ngữ lập trình khác, lúc này, toàn bộ nội dung lập trình của bạn sẽ nằm gọn trong khung Sub – End Sub
- OPTIONS: Để thay đổi các thông báo hay giao diện của môi trường lập trình theo ý muốn bạn
thực hiện các bước
Tại cửa sổ MVB, menu Tools → Options
Editor: Cài đặt các thông báo
o Auto Syntax Check: Thông báo khi có lỗi cú pháp (Syntax)
o Require Variable Declaration: Hiện dòng Option Explicit ở đầu Module
o Auto List Members: Hiện danh sách các phương thức/thuộc tính dựa trên từ gợi nhắc
o Auto Quick Info: Hiển thị cú pháp của 1 hàm khi có từ gợi nhắc
o Auto Data Tip: Hiển thị danh sách các dữ liệu khi khai báo biến
Editor Format: Cài đặt định dạng và giao diện
o Code Color: Chọn màu chữ, màu nền
o Font: Chọn font chữ theo ý thích
o Size: Chọn kích cỡ chữ theo ý thích
- VBAPRỌECT: Tại cửa sổ MVB, menu Tools → VBAProject Properties → General
VBProject: Để nhận dạng project của bạn trong Window Registry và Object Browser (nó cần có tên duy nhất)
Project Description: Mô tả project trong Type Library
Nếu bạn không muốn người khác xem Code của mình, bạn có thể thực hiện khóa lại bằng Tab Protection của cửa sổ Project Properties
Lock Project: Khóa code trong module, không cho nhìn thấy và không cho chỉnh sửa (Lock project for viewing)
Password to view project properties: Gõ nội dung mật mã vào Password và xác nhận Password
- SECURITY: Chế độ an toàn, bảo vệ khỏi Virus Chức năng này điều khiển hoạt động của macro (ứng dụng của VBA) cho phép macro hoạt động hoặc không
Trang 3 Tại cửa sổ MVB, menu Tools → Macro → Security → Security Level
Chọn mức độ an toàn
o Very High: Các macro không thể chạy được (trừ macro của Office)
o High: Chỉ những macro được xác nhận mới có thể chạy Để xác nhận macro, bạn phải đăng kí bằng cách Tools → Security → More → Trusted → Publisher
o Medium: Khi mở file có chứa macro, sẽ có cảnh báo, chọn Enable Macros để cho phép
macro hoạt động, ngược lại chọn Diasable Macros (Trường hợp bạn không mở file có Macro những vẫn được cảnh báo → File của bạn đã bị nhiễm VIRUS MACRO)
o Low: Không đặt cảnh báo an toàn cho macro
Khi sử dụng VBA, nên đặt Security ở mức Medium hoặc Low
- ERRORS: Trong quá trình lập trình, nếu có xảy ra lỗi (errors) VBA sẽ kiểm tra và tự sửa lỗi
(Các lỗi cú pháp đơn giản) hoặc báo lỗi ngay lập tức (đổi dòng đang có lỗi sang màu đỏ) để bạn sửa lỗi
Báo lỗi
o Với các lỗi cú pháp cơ bản (viết HOA ↔ viết thường) VBA sẽ không báo lỗi và tự sửa giúp bạn
o Với các lỗi cú pháp phức tạp hơn (Sai chính tả, thiếu từ, thiếu thành phần của hàm,…) VBA sẽ hiện thông báo và chuyển đỏ dòng đang có lỗi
o Với các lỗi Logic hay các lỗi khó phát hiện khác, VBA không thể phát hiện ngay trong quá trình Code được, do đó, khi chạy Debug
Sửa lỗi
o Đối với các lỗi thông báo trong quá trình Code, bạn có thể tiến hành sửa trực tiếp
o Với những lỗi bắt gặp trong quá trình Debug (được bôi nền vàng) bạn có thể chờ kết thúc quá trình Debug và đi đến để sửa lỗi
2.2 CÁC QUY TẮC KHI LẬP TRÌNH
- CÁC ĐỐI TƯỢNG: Trước hết, cần hiểu về các đối tượng có thể thao tác trong Excel để trong
quá trình lập trình VBA không gặp nhiều rắc rối
Workbook: Là đối tượng lớn nhất – Cả file Excel
Worksheet: Là các trang (sheet) trong 1 file Excel
Chart: Là các biểu đồ
Range: Là các vùng hay nhóm ô trong 1 Sheet
Cell: Là đối tượng nhỏ nhất trong Excel – 1 ô
Để gọi tên 1 đối tượng trong VBA, bạn làm như sau
Doi_tuong(“ten_doi_tuong”)
- CÁC PHƯƠNG THỨC: Hay là các hành động có thể thực hiện đối với 1 đối tượng bất kì
trong Excel
Trang 4 Activate: Kích hoạt
Clear: Xóa
Copy: Sao chép
Cut: Cắt
Delete: Xóa nội dung bên trong
Select: Lựa chọn (Bôi đen)
Để thực hiện một phương thức cho một đối tượng trong VBA, bạn nhập theo cú pháp
Doi_tuong(“ten_doi_tuong”).Phuong_thuc
- THUỘC TÍNH: Là các thông số của các đối tượng bên trong Excel Một số thuộc tính cơ bản
ColumnWidth: Độ rộng cột
Font: Phông
Formula: Công thức
Text: Dữ liệu Text
Value: Dữ liệu giá trị (số)
Để thiết lập thuộc tính cho một đối tượng trong VBA, thực hiện theo cú pháp
Doi_tuong(“ten_doi_tuong”).Thuoc_tinh = Thong_so
- BIẾN: Tương tự như các ngôn ngữ lập trình khác, các thao tác trung gian trong VBA được
thực hiện thông qua các biến VBA không bắt buộc khai báo biến (VBA sẽ tự tạo ra biến khi bạn sử dụng chúng lần đầu tiên trong Code của mình) Tuy nhiên, vẫn nên định nghĩa rõ ràng cho từng biến sử dụng Các lưu ý khi khai báo biến
Cách đặt tên
Tên dài tối đa 255 kí tự
Kí tự bắt đầu phải là chữ
Không chứa các kí tự đặc biệt ^; &; (; ); %; $; #; !; ~; +; -; *…
Không đặt trùng với từ khóa của VBA: Print; Sub; End;…
VBA không phân biệt chứ HOA và thường trong tên biến
Khai báo kiểu dữ liệu: Các kiểu dữ liệu của VBA
Byte: Số nguyên dương, 0 – 255
Boolean: Kiểu Logic, True/False
Integer: Số nguyên, -32,768 – 32,767
Long: Số nguyên, -2,147,483,648 – 2,147,483,647
Single: Số, -3.402823E38 – -1.401298E-45 và 1.401298E-45 – 3.402823E38
Curency: Kiểu tiền tệ, -922337203685477.5808 – 922337203685477.5807
Date: Kiểu tời gian, January 1, 100 – December 31, 9999 (Có dấu # ở 2 đầu)
Object: Tham chiếu đến bất kì đối tượng nào
String: Chuỗi, 0 – 65535 kí tự (Đặt trong “ “)
Variant: Kiểu dữ liệu được gán tự động bởi VBA, thay thế được cho mọi kiểu dữ liệu
Trang 5 Khai báo biến số: Để khai báo một biến số có thể thay đổi giá trị trong quá trình lập trình
Dim ten_bien As kieu_du_lieu
Khai báo biến cố định: Để khai báo một hằng số (giá trị không đổi)
Const ten_bien = gia_tri
- MẢNG: Mảng là một kiểu dữ liệu đặc biệt, mảng chứa các biến số được sắp xếp theo một trình
tự nhất định – Mỗi biến số là một phần tử của mảng Mảng có biên trên và biên dưới, các phần
tử trong mảng là liên tục Mảng có 2 loại
Mảng có chiều dài có định: Mảng có số phần tử cố định Cách khai báo
Dim ten_mang (do_dai_chieu_1, do_dai_chieu_2) As kieu_du_lieu
o Độ dài chiều 1/2: Là các số cụ thể
o Kiểu dữ liệu: Là kiểu dữ liệu của các phần tử (biến số) bên trong mảng
o Địa chỉ bắt đầu của mỗi chiều trong mảng là 0
Mảng động: Mảng có số phần tử dao động trong một khoảng Cách khai báo
Dim ten_mang (do_dai_chieu_1, do_dai_chieu_2) As kieu_du_lieu
o Độ dài chiều 1/2: Là khoảng *** to *** (chiều dài tối thiểu và tối đa cố định)
o Kiểu dữ liệu: Là kiểu dữ liệu của các phần tử (biến số) bên trong mảng
Hàm Array: Hàm này sẽ tự động tạo ra mảng với các biến số trong nó Các biến này sẽ tự động được gán kiểu Variant Cú pháp hàm
Dim Array(“bien_1”, “bien_2”…)
o Hàm UBound: trả về phần tử cuối cùng của mảng
o Hàm LBound: trả về phần tử đầu tiên của mảng
- THAM CHIẾU ĐẾN Ô VÀ VÙNG: Đây là các thành phần làm việc chính trong Excel, do
đó, để gán dữ liệu vào Worksheet, bạn cần tham chiếu đến các đối tượng con này Một số phương pháp tham chiếu
Tham chiếu kiểu A1: Kiểu tham chiếu vùng cơ bản nhất Cú pháp
Range(“vung_tham_chieu”) hoặc [vung_tham_chieu]
Tham chiếu bằng Index Numbers: Dành cho tham chiếu ô Cú pháp
Cells(so_hang,so_cot)
Số hàng và số cột: Để tham chiếu nhanh đến cả hàng/cột (thay vì dùng tham chiếu kiểu A1) Cú pháp
Rows(so_hang) và Columns(so_cot)
Đặt tên cho vùng: Một phương pháp để đơn giản hóa phương pháp A1, bằng việc đặt tên
cho một vùng cố định bạn không cần nhớ địa chỉ của vùng mà chỉ cần nhớ tên của vùng đó Bạn có thể thực hiện đặt tên cho vùng đó trước hoặc đặt trong quá trình Code
o Tên được tạo trước: Nếu tên đã được đặt trước và nằm trong 1 Sheet thuộc 1 Workbook
Cú pháp
Trang 6Range(“[ten_Workbook]ten_sheet!ten_vung”) Nếu bạn đang truy cập Sheet và Workbook chứa vùng muốn tham chiếu thì có thể bỏ qua phần tên của 2 đối tượng này
o Tên đặt khi đang Code: Nếu bạn muốn đặt tên cho vùng trong quá trình Code và tham
chiếu đến đó thì thực hiện các bước Workbooks(“ten_Workbook”).Names.Add Name:=”ten_vung”,_
RefersTo:=”=ten_sheet!dia_chi_vung”
Range(“ten_vung”)
Tham chiếu nhiều mảng: Là cách tham chiếu cùng lúc đến nhiều vùng để thực hiện nhanh
Có thể sử dụng cách tham chiếu A1 hoặc theo tên từng vùng Cú pháp
Range(“vung_1,vung_2,…”)
Offset cells: Được dùng để tham chiếu đến các ô TIẾP THEO của ô hiện tại theo một quy tắc chung Phương pháp này không thể quay lại vị trí phái trước Cú pháp
Offset(so_dong_xuong,so_cot_phai) Giá trị so_dong_xuong và so_cot_phai có thể âm
Tham chiếu kiểu R1C1: Thường được sử dụng để tham chiếu đến vùng thực hiện phép tính/công thức Cú pháp
Cong_thuc(R[so_hang_1]C[so_cot_1],R[so_hang_2]C[so_cot_2])
- HỘP THOẠI HELP: Công cụ trợ giúp trong quá trình thao tác và Lập trình
Khi đang Code: Để xem các câu lệnh trong quá trình Code
o Chọn mục cần hỗ trợ
o Ấn phím F1 → Cửa sổ Microsoft Visual Basic Help
Sử dụng với chủ đề cụ thể: Để xem các câu lệnh với một chủ đề đã biết trước
o Trên cửa sổ MVB, menu Help → MVB Help
o Gõ nội dung mà bạn muốn tìm vào ô Search rồi Enter
Trinh duyệt đối tượng (Object Browser): Để xem các đối tượng, phương pháp hay thuộc tính khi bổ sung thêm các hàm số (functions) hay cầu lệnh (statements)
o Tại cửa sổ MVB đang mở, menu View → Object Browser
o Tại khung All Libraries, đổi thành Excel
o Trong vùng Classes → Chọn đối tượng
o Trong vùng Members of ‘***’: Các phương thức (biểu tượng xanh) và thuộc tính (biểu tượng bàn tay chỉ) của đối tượng vừa chọn
Trang 72.3 CÁC NHÓM LỆNH
2.3.1 WITH – END WITH
Dùng để thực hiện nhiều thao tác với nhiều đối tượng đơn lẻ Phương pháp này được dùng với các đối tượng có nhiều thuộc tính Cú pháp
With Phuong_thuc.Doi_tuong .Thuoc_tinh_1 = gia_tri_1 .Thuoc_tinh_2 = gia_tri_2 .Thuoc_tinh_3 = gia_tri_3
…
End With
2.3.2 LỆNH ĐIỀU KIỆN
- IF: Câu lệnh điều kiện đơn giản nhất Cú pháp
If <dieu_kien> Then <cau_lenh_1> [Else <cau_lenh_2>]
Phần Else trong [] là phần tùy chọn, có thể không cần hoặc là dùng nhiều lần Else tùy theo mục đích lập trình Trường hợp dùng nhiều Else thì thay bằng ElseIf và kết thúc bằng End If
- SELECT CASE: Tương tự ElseIf, cấu trúc Select Case cho phép thực hiện thiều câu lệnh khác
nhau Mặt khác, không như If, Select Case cho phép dùng nhiều điều kiện để chọn lọc hơn Cú pháp
Select Case <bieu_thuc_kiem_tra>
[Case <bieu_thuc_1>
<cau_lenh_1>]
[Case <bieu_thuc_2>
<cau_lenh_2>]
… [Case <bieu_thuc_n>
<cau_lenh_n>]
End Select
- XÂY DỰNG ĐIỀU KIỆN: Trường hợp thuật toán cần giải quyết đồng thời nhiều điều kiện,
để kết hợp các điều kiện với nhau (Trong câu lệnh If) có thể sử dụng And hoặc Or
And: Thỏa mãn đồng thời tất cả điều kiện nối với nhau bởi And
Or: Thỏa mãn ít nhất 1 trong các điều kiện nối với nhau bởi Or
2.3.3 HỘP THOẠI
- MESSAGE BOX: Hiển thị hộp thông báo lên trên màn hình Cú pháp
MsgBox(prompt [, buttons] [, title] [, helpfile, context])
prompt: Nội dung lời nhắc của hộp thông báo
buttons: Tùy chọn các nút lựa chọn (Yes/No, OK,…)
title: Nội dung trên đầu hộp thông báo
Trang 8 helpfile: File hỗ trợ
context: Số thứ tự tình huống trong filehelp (chỉ tùy chỉnh nếu chọn filehelp) Các thông điệp trong buttons
vbOKCancel 1 Hiện nút OK và Cancel
vbAbortRetryIgnore 2 Hiện nút Abort, Retry và Ignore vbYesNoCancel 3 Hiện nút Yes, No và Cancel
vbYesNo 4 Hiện nút Yes và No
vbRetryCancel 5 Hiện nút Retry và Cancel
Các loại buttons
vbOK 1 Chọn nút OK vbCancel 2 Chọn nút Cancel vbAbort 3 Chọn nút Abort vbRetry 4 Chọn nút Retry vbIgnore 5 Chọn nút Ignore vbYes 6 Chọn nút Yes vbNo 7 Chọn nút No
Các biểu tượng thông điệp
VbCritical Dùng cho những thông báo lỗi, thất bại
vbQuestion Dùng cho những câu hỏi cần lựa chọn
vbExclamation Dùng cho các thông báo
Trang 9vbInformation Dùng cho các thông báo cung cấp thông tin
vbDefaultButton1 0 Mặc định nút lệnh thứ nhất
vbDefaultButton2 256 Mặc định nút lệnh thứ hai
vbDefaultButton3 512 Mặc định nút lệnh thứ ba
- INPUT BOX: Để người dùng nhập dữ liệu vào Khi dùng phương thức này, một hộp thoại sẽ
hiện ra để bạn vào dữ liệu, chờ người dùng nhập thông tin hoặc bấm OK/Cancel, thông tin nhận được sẽ được gán kiểu String Cú pháp
expression.InputBox(prompt [, title] [, default], [, left], [, top] [helpfile, context] [, type])
prompt: Nội dung lời nhắc của hộp
title: Nội dung trên đầu hộp
left: Khoảng cách từ cạnh trái hộp đến cạnh trái màn hình
top: Khoảng cách từ cạnh trên hộp đến cạnh trên màn hình
helpfile: File trợ giúp
context: Số thứ tự tình huống trong filehelp (chỉ tùy chỉnh nếu chọn filehelp)
type: Số biến đầu vào (nếu bỏ qua, giá trị nhập mặc định là String)
Bảng giá trị cho tham số type
0 Công thức
1 Số
2 Chuỗi (String)
4 Giá trị Logic (True/False)
8 Ô tham chiếu
16 Giá trị lỗi
64 Mảng các giá trị
2.3.4 LỆNH LẶP
Một công cụ đắc lực giúp tối ưu thuật toán, rút ngắn thời gian xử lý cũng như là câu lệnh Một
số kiểu vòng lặp trong VBA
- DO – LOOP: Thực hiện một khối lệnh với số lần lặp cố định Trong đó, biểu thức điều kiện
phải trả về kết quả False (0) hoặc True (khác 0) Cú pháp
Do
<cau_lenh>
Loop
Trang 10Cần một điều kiện If để tạo điểm thoát (Exit) ra khỏi vòng lặp
- DO WHILE – LOOP: Thực hiện một khối lệnh khi thỏa mãn một điều kiện True (khác 0) và
tự lập điểm thoát ra (Exit) khi kết quả điều kiện là False (0) Cú pháp
Do While <dieu_kien>
<cau_lenh>
Loop
- DO – LOOP WHILE: Tương tự DO WHILE – LOOP, những thay đổi vị trí kiểm tra điều kiện
(dẫn đến 1 số khác biệt về điểm thoát ra) Cú pháp
Do
<cau_lenh>
Loop While <dieu_kien>
- DO UNTIL – LOOP: Cũng tương tự với While Cú pháp
Do Until <dieu_kien>
<cau_lenh>
Loop Tương tự với While, chúng ta cũng có DO – LOOP UNTIL
- FOR – NEXT: Cho phép thực hiện vòng lặp với số vòng biết trước Cú pháp
For <bien_dem> = <diem_dau> To <diem_cuoi> [Step <buoc_nhay>]
<cau_lenh>
Next [<bien_dem>]
Biến đếm, điểm đầu, điểm cuối và bước nhảy là các giá trị số Bước nhảy có thể âm hoặc dương, khi bị bỏ trống sẽ mặc định là 1
- FOR EACH – NEXT: Hoạt động tương tự như FOR – NEXT nhưng thực hiện số lần lặp theo
số phần tử của mảng hay một tập hợp (đặc biệt là khi chưa biết số lượng phần tử) Cú pháp
For Each <phan_tu> In <Mang/Tap_hop>
<cau_lenh>
Next <phan_tu>
- EXIT: Để tạo điểm thoát sớm khỏi vòng lặp, hàm, thuộc tính hiện tại hoặc cả chương trình,
bạn chỉ cần dùng hàm Exit phù hợp Các cú pháp
Exit Do Exit For Exit Function Exit Sub Exit Propertiy