Professional Documents
Culture Documents
Basic VBA For Excel-Final PDF
Basic VBA For Excel-Final PDF
Basic VBA For Excel-Final PDF
MỤC LỤC
o VB là gì?
o Ứng dụng nền là gì?
o VBA là gì?
o Macro là gì?
o Phân biệt giữa VBA và Macro?
1.1 VB (Visual Basic): là ngôn ngữ lập trình dùng để ràng buộc các đối tượng trong
ứng dụng với nhau thành một hệ thống hợp nhất. Hay cụ thể, Visual Basic giúp người
dùng có thể tạo ra các chương trình ứng dụng có thể thực hiện độc lập.
1.2 Ứng dụng nền: là những ứng dụng được thiết kế theo cấu trúc mở, cho phép
người dùng có thể can thiệp sâu hơn nữa vào bên trong nó bằng các công cụ lập trình,
để giải quyết các bài toán phát sinh mà bản thân ứng dụng đó không dự kiến trước
được. Ví dụ: AutoCad, Excel, Word, PowerPoint, OutLook là những ứng dụng nền.
1.3 VBA (Visual Basic for Application): là một công cụ lập trình cho phép phát triển
nhanh phần mềm và được tích hợp vào trong ứng dụng nền.
1.4 Macro: là một chương trình chứa các tập lệnh thực thi một kịch bản công việc nào
đó.
Khác biệt giữa VBA và Macro:
Ví dụ: VBA = Xăng; Macro = Xe máy
Xăng có thể sử dụng cho nhiều loại động cơ khác nhau, trong đó có xe máy.
Khi xe máy chạy thì nó dùng xăng để làm nhiên liệu. Cũng như, VBA là ứng
dụng nền để chạy Macro.
Hình 1
Hình 2 Hình 3
Hình 4 Hình 5
Hình 6
Hình 7 Hình 8
Hình 9 Hình 10
Hình 11
Cách 5: Chạy Macro từ Menu
B1: Click phải chuột trên Toolbar\Customize the Ribbon
B2: Chọn thẻ Customize Ribbon\ Chọn thẻ Main Tabs\New Tab\Rename New Tab
thành VBA\Rename New Group thành Macro1 (Hình 12)
B3: Chọn thẻ Macros\Chọn Macro1\ Chọn Group Macro1 trong thẻ Main Tabs\ Add
(Hình 13)
B4: Kết quả ta có thanh Menu mới tên VBA\Click vào nút lệnh Macro1 để chạy
Macro1 (Hình 14)
Hình 13
Hình 12
Hình 14
b) Đóng Workbook:
a) Phương thức:
Code:
• Activate (Hoạt động hay hiện hành)
• Clear (Xoá)
• Copy (Sao chép)
• Cut (Cắt bỏ đi)
• Delete (Xoá nội dung trong Range)
• Select (Lựa chọn)
b) Thuộc tính:
Code:
• ColumnWidth
• Font
• Formula
• Text
• Value
Kiểu dữ liệu
Các ví dụ:
1. Ví dụ về Cells
Ví dụ
Public Const Pi = 3.141592654
b) Khai báo biến
liệu>
Ví dụ
Dim BlnA as Boolean
Public BlnB as Boolean
Private BlnC as Boolean
B. Kiểu số nguyên – Byte/Integer/Long
Cú pháp
Byte, Integer, Long đều là các từ khóa khai báo kiểu số nguyên nhưng
chúng chỉ khác nhau về giới hạn giá trị mà biến có thể nhận được.
Ví dụ
Dim LngA as Long
Dim IntB as Integer
C. Kiểu số thực – Single/Double
Ví dụ
Dim DblA as Double
Public Pi as Double
Chú ý :
Các biến kiểu SỐ NGUYÊN và SỐ THỰC nếu không gán giá trị ban
đầu cho biến thì giá trị mặc định ban đầu sẽ bằng 0
D. Kiểu Chuỗi – String
Chuỗi là một hàng các ký tự liên tục nhau, số lượng ký tự trong chuỗi rất
lớn.Trong VBA chuỗi được đặt trong dấu ngoặc kép “ ”. Giá trị mặc định ban
đầu cho biến kiểu chuỗi là một chuỗi rỗng.
Cú pháp
Ví dụ
Dim StrA as String
StrA = “VBA for AutoCad”
E. Kiểu Mảng
Khi trường hợp phải xử lý một loạt các biến tương tự nhau (ví dụ các phần tử
của một ma trận) yêu cầu phải đặt tên khác nhau cho tất cả các biến này thì
sẽ có rất nhiều biến. Vì vậy, ta có thể dùng kiểu mảng để đặt tên chung cho
cả nhóm các phần tử đó, khi nào cần sử dụng từng phần tử nào ta sẽ gọi tên
theo chỉ số của phần tử đó trong mảng.
a) Mảng Tĩnh
Đây là loại mảng có số phần tử không thay đổi trong suốt quá trình hoạt động
của mảng. Mảng này thường được sử dụng khi biết trước số lượng phần tử
của mảng.
Cú pháp
Ví dụ
Dim Myarray(10) as Double
Dim MyArray(1 to 10) as Double
Dim MyArray(1 to 5,1 to 5) as Double
Dim MyArray(1 to n,1 to m) as Variant
b) Mảng Động
Đây là mảng có số lượng phần tử có thể thay đổi trong lúc chương trình hoạt
động. Với mảng động người lập trình không cần biết số lượng phần tử của
mảng.
Cú pháp
Ví dụ
Dim MyArray () as Long ‘Khai báo mảng MyArray là mảng động
ReDim MyArray(1 to 4) as Long ---->Xác định lại kích thước cho mảng
Với một mảng động mà các phần tử đã được gán giá trị khi thay đổi số lượng
phần tử sẽ có hai trường hợp xảy ra.
Toàn bộ giá trị của các phần tử (thuộc mảng trước khi thay đổi) sẽ bị xóa
bỏ và các phần tử của mảng mới sẽ nhận giá trị mặc định.
Toàn bộ giá trị của các phần tử (thuộc mảng trước khi thay đổi) sẽ được
giữ lại nếu thỏa mãn 2 điều kiện sau
o Sử dụng từ khóa ReDim Preserve
o Sự thay đổi kích thước của mảng chỉ được thực hiện ở biên trên của
chiều cuối cùng của mảng nghĩa là các phần tử cần giữa lại giá trị có chỉ số
không đổi khi mảng được thiết lập lại.
Ví dụ
Dim MyArray () as Long ‘Khai báo mảng MyArray là mảng động
ReDim MyArray(1 to 4) as Long ‘Xác định lại kích thước cho mảng
MyArray(1) = 10: MyArray(2) = 20 ‘Gán giá trị cho các phần tử mảng
MyArray(3) = 30: MyArray(4) = 40
ReDim Preserve MyArray(1 to 5) as Long ‘Thay đổi kích thước mảng
MyArray(5) = 50 ‘Gán giá trị cho phần tử mới.
F. Kiểu Variant
Kiểu Variant là một kiểu đặc biệt có thể chứa tất cả các kiểu dữ liệu khác.
Cú pháp
Ví dụ
Dim VarA as Variant
Giải thích:
+ Public: là từ khoá biểu thị phạm vi của hàm, hàm có thể được sử
dụng ở bất kỳ đâu trong tất cả các dự án VBA hiện có. Khi có từ khoá
Public, tên hàm sẽ được hiển thị trong danh sách hàm của Excel.
+ Private: là từ khoá biểu thị phạm vi của hàm, hàm chỉ có thể được
sử dụng bên trong mô-đun có chứa hàm đó. Khi có từ khoá Private,
tên hàm sẽ không được hiển thị trong danh sách hàm của Excel,
nhưng người sử dụng vẫn có thể dùng hàm này trong bảng tính một
cách bình thường.
CHÚ Ý Nếu không khai báo phạm vi cho hàm (từ khoá Public/Private), thì
mặc định, hàm sẽ có phạm vi là Public.
+ Function: là từ khoá báo hiệu bắt đầu một hàm.
+ Tên_hàm: là tên của hàm, cách đặt tên hàm tương tự như cách đặt
tên của biến. Tên_hàm sẽ được sử dụng như là biến trong toàn bộ
hàm, khi hàm kết thúc giá trị trả về của hàm chính là giá trị đã gán
cho biến Tên_hàm cuối cùng.
+ Danh_sách_tham_số: là danh sách các tham số đầu vào của hàm.
Các tham số được phân cách với nhau bằng dấu phẩy.
+ Kiểu_dữ_liệu: quy định kiểu giá trị trả về của hàm. Nếu không quy
định kiểu dữ liệu, hàm sẽ có kiểu dữ liệu mặc định là Variant.
+ Exit Function: là câu lệnh dùng để kết thúc hàm ngay lập tức (cho
dù phía sau câu lệnh này vẫn còn các khối lệnh khác).
+ End Function: là từ khoá báo hiệu kết thúc một hàm.
C. Tạo hàm mới
Ví dụ: Tạo hàm mới thực hiện tính chu vi hình chữ nhật
Các bước thực hiện:
Q
u
a
y trở về màn hình chính của Excel, ta đã cso thể sử dụng hàm Chu_Vi như
các hàm sẵn có của excel
Chú ý: Hàm chỉ đơn giản là trả về một giá trị nào đó; Hàm không
thể thực hiện thao tác làm thay đổi đối tượng.
5.2 Add-in và phân phối các ứng dụng mở rộng
Add-in: đây là các chương trình dạng phụ trợ hoặc tiện ích được thiết kế để cùng
hoạt động với chương trình chính. Mục đích dùng để mở rộng các khả năng cho
chương trình chính. Các chương trình dạng Add-in này có thể do chính người
dùng tạo ra bằng nhiều loại công cụ khác nhau. Không phải chương chính chính
nào cũng chấp nhận Add-in. AutoCAD, MS.Office là hai phần mềm cho phép sử
dụng Add-in điển hình.
A. Ưu điểm khi sử dụng Add-in:
Đơn giản hoá việc sử dụng hàm. Khi sử dụng Add-in, người dùng
không cần thêm tên của WorkBook trước tên hàm.
Ví dụ: Hàm Chu_vi được lưu trong Workbook có tên “Basic
VBA.xlsm” thì khi muốn sử dụng hàm Chu_vi trong WorkBook khác
thì phải dùng như sau:
= Basic VBA.xlsm!Chu_vi(A2:B2)
Nhưng nếu hàm này được lưu trong Add-in thì cách dùng như một hàm
bình thường:
=Chu_vi(A2:B2)
Đơn giản hoá quá trình mở ứng dụng. Mỗi Add-In sau khi đã được cài
đặt sẽ được tự động mở mỗi khi bắt đầu khởi động chương trình Excel.
Trong khi để chạy được hàm chứa trong Macro của WorkbookA thì
phải luôn mở WorkbookA.
Ngăn chặn việc truy cập vào mã lệnh. Khi phân phối ứng dụng dạng
Add-In có đặt chế độ bảo mật bằng mật khẩu, người dùng không thể
xem hoặc thay đổi mã lệnh của ứng dụng.
Add-in chạy ngầm nên người dùng không cần để ý đến nó như Macro
B. Quản lý Add-in
a) Để load một Add-in:
B1: File\ Option\ Add-ins\
trong Manage chọn Excel Add-
ins\Go
B2: Tích vào Add-in\Ok để
chọn
Bỏ tích\OK để dỡ bỏ Add-in
Nhấn Brownse để Load một
Add-in
Chú ý khi xây dựng các ứng dụng dựa trên VBA:
Giao diện càng đơn giản (bất kỳ ai cũng có thể sử dụng) càng hiệu quả.
Càng sử dụng được các tính năng sẵn có của ứng dụng nền thì càng đơn
giản, thân thiện và hiệu quả
Lựa chọn thông minh khi thiết kế giao diện cho chương trình sử dụng VBA
trong Excel:
Sử dụng điều khiển nhúng trực tiếp trên worksheet chẳng hạn như: ListBox
hoặc Command Button;
Sử dụng các hộp thoại thông dụng có sẵn trong Excel;
Tạo các hộp thoại tuỳ biến (UserForm);
Tuỳ biến trình đơn;
Tuỳ biến thanh công cụ;
Tuỳ biến phím tắt.
Điều khiển nhúng trong Worksheet (ActiveX)
Điều khiển nhúng trong Worksheet: là những điều khiển có thể chèn trực tiếp
vào trong worksheet, liên kết trực tiếp với dữ liệu trong các worksheet mà không
cần thêm một đoạn mã lệnh nào khác. Khi cần người dùng có thể hiệu chỉnh các
điều khiển này.
Mở trình đơn Developer\ Trong Tab Control là các công cụ có thể nhúng trong
Worksheet.
Ví dụ Ví dụ
Tên – Ký
Form ActiveX Mô tả
hiệu
Control Control
Image
1 Group Box “Chọn kiểu chữ” chứa 3 Check Box: Chữ Đậm, Chữ Nghiêng,
Gạch chân
1 Group Box “Chọn giới tính” chứa 3 Option Button: Nam, Nữ, Không rõ
1 Button “Thực hiện” thực thi một lệnh (Vd: hiện một thông báo “Button đã
thực thi lệnh”)
Giá trị trả về cho ô Cell link C16 chỉ là thứ tự của ngôn ngữ được lựa chọn trong
danh sách ngôn ngữ. Tiếng Pháp có thứ tự là thứ 2 nên giá trị ô liên kết C16 là 2.
B2: tương tự ta design các điều khiển còn lại như sau:
b) Design Spin Button nhập góc:
Trong Input range\ quét chọn vùng ngôn ngữ chuẩn bị sẵn J2:J10
Trong Cell link ta chọn ô C15 (chỉ dùng để kiểm tra kết quả)
e) B5: Tương tự, ta design cho Group Box, Check Box cho Chọn Kiểu Chữ và
Option Button cho chọn giới tính.
f) B6: Design Button “Thực hiện”
Vào Insert\Form Control\Button\quét chọn vùng đặt Button\ một cửa sổ Assign
Macro hiện ra
Nếu người dùng muốn button này thực thi 1 macro có sẵn thì click chọn macro đó
Nếu muốn thực thi 1 macro mới thì click vào New
Một cửa sổ VBAIDE xuất hiện
Ta viết code để khi Button này được click thì hiện ra thông báo “Button đã thực thi
lệnh”
Ta có kết quả:
BoundColumn: ta điền số 1 là số thứ tự của cột “Số HĐ”, nó sẽ được gán cho
thuộc tính Value của Combo Box khi một phần tử trong Combo Box được chọn.
ColumnCount: Số cột sẽ được hiển thị trong danh sách xổ xuống của Combo Box.
Ta điền là 3 bao gồm cột Số HĐ, Tên Cty, Giá trị HĐ
ColumnHeads: Nếu bằng FALSE, không hiển thị phần tiêu đề của cột trong danh
sách xổ xuống. Nếu bằng TRUE, hiển thị tiêu đề của cột trong danh sách xổ
xuống, và hàng dữ liệu nằm ngay phía trên ListFillRange sẽ được lấy làm tiêu đề
của cột. Ta chọn True
Column Widths: Bề rộng của cột, tính bằng pt. Nếu có nhiều cột thì bề rộng của
mỗi cột sẽ được cách nhau bằng dấu chấm phẩy (;). Ta điền 40;150;60
List Row: là số dòng xổ xuống khi ta nhấn mũi tên. Ta chọn 8 dòng.
LinkedCell: Chọn ô J4 là ô hiện Số HĐ đã chọn
ListFillRange: Chọn D4:D28 là vùng dữ liệu tạo nên các thành phần của Combo
Box.
b) B2: Tạo List Box “Chọn tên công ty”
Chọn Design Mode
Chọn Properties
ListRow: 8
LinkedCell: J16
ListFillRange: D4:D28
ListStyle: 1 – fmListStyleOption là kiểu chọn theo kiểu Chấm tròn Option.
Ta có kết quả:
SmallChange: Chọn 1 là bước nhảy mỗi khi ta nhấn vào mũi tên
LargeChange: Chọn 100 là bước nhảy mỗi khi ta nhấn vào khoảng giữa 2 mũi tên
Tương tự cho SpinButton
d) B4: Tạo Command Button “Select Folder”, “Select File” và Text Box thể
hiện giá trị của Command Button
Chọn Design Mode
Chọn Properties
Vào Insert\ActiveX Control\Command Button
Trong cửa sổ Properties ta điều chỉnh các thông số:
(Name) :cmdFolder/cmdFile
D
ouble Click vào Button “Select File”
Cửa sổ VBAIDE mở ra
Ta viết đoạn code:
Hộp thoại tuỳ biến được tạo ra dựa trên UserForm thông qua VBAIDE. Thông
thường, có thể tạo hộp thoại tuỳ biến theo các bước sau:
1. Tạo mới một UserForm vào trong dự án VBA của Workbook.
2. Viết thủ tục để hiển thị UserForm. Thủ tục này phải được đặt trong một mô-
đun của VBA (chứ không phải đặt trong mô-đun của UserForm)
3. Chèn thêm các điều khiển cần thiết trên UserForm.
4. Điều chỉnh các điều khiển vừa thêm.
5. Viết mã lệnh cho các sự kiện tương ứng của các điều khiển (nếu cần). Các
thủ tục này phải được đặt trong mô-đun của chính UserForm đó.
a) Tạo mới UserForm
B1: Khởi động VBAIDE (nhấn phím ALT+F11),
B2: Insert\UserForm
B3: Nhấn F4 để hiện của sổ Propperties
B4: Để quản lý các User Form ta nên đặt tên ho User Form đó. Trong của sổ
Properties\(Name) đổi tên User Form 1 thành VBA_Sudy.
Muốn hiển thị tiêu đề của User Form: ta vào Caption nhập vào “VBA Study”
Các phương thức của User Form
a) Hiển thị UserForm: thực hiện
phương thức
Show Tên_UserForm.Show [vbModal/ vbModeless]
- VbModal (hoặc 1): luôn tiếp nhận tương tác người dùng với hộp thoại,
người dùng chỉ có thể chuyển hướng tương tác sang nơi khác khi đóng hộp
thoại. Đây là kiểu hiển thị mặc định của hộp thoại.
- VbModeless (hoặc 0): hộp thoại vẫn được hiển thị nhưng người dùng có
thể chuyển hướng tương tác sang nơi khác mà không cần đóng hộp thoại.
b) Ẩn UserForm: gọi phương thức
Hide Tên_UserForm.Hide
c) Quay lại trạng thái trước lệnh cuối cùng được thực hiện trên
UserForm: thực hiện phương thức UndoAction
Tên_UserForm.UndoAction
d) Trả lại trạng thái trước khi thực hiện Undo: thực hiện phương thức
RedoAction
Tên UserForm.RedoAction
Bài tập thực hành:
Tạo UserForm như sau:
- Nếu nút OptionAuto được chọn thì dùng nút RefEdit để chọn 1 danh sách có
sẵn và Insert vào dòng cuối cùng của Sheets(“NameSex”)
- Nếu nút OptionManual được chọn thì cho phép nhập tên, tuổi, giới tính, tổ
bằng tay. Yêu cầu thêm là định dạng Border và tô màu khác nhau giữa dòng
chẵn và dòng lẻ.
Nhấn nút OK để thực thi lệnh và nút Cancel để thoát
Trong Sheets(“NameSex”) tạo 1 nút để hiện UserForm lên.
Cách thực hiện:
B1: Tạo một Workbook mới, Save lại với phần mở rộng file là Excel Macro - Enable
Workbook (*.xlsm).
Tạo sheet mới có tên “NameSex”, một vùng dữ liệu có 4 cột: Name, Sex, Age,
Discipline
B4: trên thanh công cụ, chọn thanh ToolBox và thanh Properties (F4)
B5: tiến hành Design UserForm với các công cụ theo yêu cầu và đặt tên cho mỗi Tool.
Trước khi thoát khỏi chương trình, ta xóa giá trị của TextName và thoát khỏi
UserForm.
4. Double Click vào UserForm
Chọn Command Button vừa tạo\ chọn thanh Properties\ đổi Caption thành
“Show UserForm”
Double Click vào Command Button