Basic VBA For Excel-Final PDF

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 41

Designing Team - Engineering Department Nguyễn Tấn Hải

MỤC LỤC

MỤC LỤC ................................................................................................................... 1


CHƯƠNG 1: GIỚI THIỆU VỀ VBA........................................................................... 3
1.1 VB (Visual Basic)............................................................................................... 3
1.2 Ứng dụng nền ..................................................................................................... 3
1.3 VBA (Visual Basic for Application) ................................................................... 3
1.4 Macro ................................................................................................................. 3
CHƯƠNG 2: GHI VÀ THỰC HIỆN MACRO ............................................................ 4
2.1 Ghi macro ........................................................................................................... 4
2.2 Thực thi Macro ................................................................................................... 5
CHƯƠNG 3: ĐỐI TƯỢNG LẬP TRÌNH VBA ........................................................... 8
3.1 Các đối tượng (Objects) ...................................................................................... 8
3.2 Các phương thức (Methods) ............................................................................... 8
A. Tập đối tượng WorkBooks ............................................................................... 8
B. Đối tượng WorkBook ....................................................................................... 9
C. Tập đối tượng WorkSheets ............................................................................. 10
D. Đối tượng Range ............................................................................................ 10
CHƯƠNG 4: BIẾN VÀ CÁC KIỂU DỮ LIỆU ......................................................... 14
4.1 Khai báo biến trong VBA ................................................................................. 14
A. Tổng quát ....................................................................................................... 14
B. Cách thức khai báo biến.................................................................................. 14
4.2. Các kiểu dữ liệu cơ bản trong VBA ................................................................. 15
A. Kiểu Logic – Boolean ..................................................................................... 15
B. Kiểu số nguyên – Byte/Integer/Long .............................................................. 15
C. Kiểu số thực – Single/Double ......................................................................... 15
D. Kiểu Chuỗi – String........................................................................................ 16
E. Kiểu Mảng ...................................................................................................... 16
F. Kiểu Variant.................................................................................................... 17
CHƯƠNG 5: TẠO HÀM MỚI VÀ ADD-IN TRONG EXCEL ................................. 18
5.1 Khái niệm về hàm trong Excel .......................................................................... 18
A. Tạo hàm mới bằng VBA................................................................................. 18
B. Cấu trúc hàm .................................................................................................. 18
C. Tạo hàm mới .................................................................................................. 19

Basic VBA for Excel Page 1


Designing Team - Engineering Department Nguyễn Tấn Hải

5.2 Add-in và phân phối các ứng dụng mở rộng ..................................................... 19


A. Ưu điểm khi sử dụng Add-in: ......................................................................... 20
B. Quản lý Add-in ............................................................................................... 21
CHƯƠNG 6: GIAO DIỆN NGƯỜI DÙNG ............................................................... 22
6.1 Ví dụ về Form Control:..................................................................................... 25
6.2. Ví dụ về ActiveX Control ................................................................................ 30
6.3 Hộp thoại tuỳ biến - UserForm ......................................................................... 34

Basic VBA for Excel Page 2


Designing Team - Engineering Department Nguyễn Tấn Hải

CHƯƠNG 1: GIỚI THIỆU VỀ VBA

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.

Basic VBA for Excel Page 3


Designing Team - Engineering Department Nguyễn Tấn Hải

CHƯƠNG 2: GHI VÀ THỰC HIỆN MACRO


2.1 Ghi macro
Macro Recorder là công cụ được Excel cung cấp để hỗ trợ ghi lại code của chuỗi thao
tác mà bạn đã thực hiện.
Để sử dụng được lệnh Record Macro, điều đầu tiên bạn làm là hiện thanh công cụ
Developer của Excel.
→File\Options\Customize Ribbon\Main Tabs\Developer\OK (Excel 2010)
B1: →Record Macro\OK (Hình 2)
B2: Các thao tác bạn muốn thực hiện
Vd: Chọn ô A1 – Điền vào text:”Basic VBA for Excel” – Chọn font chữ In đậm –
Chọn tự động giãn cột (Auto Fit) – Chọn font chữ màu đỏ. (Hình 3)
B3: Chọn Stop Recording\ Macros\Macro1\Edit\Module1\Ta sẽ thấy 1 đoạn code do
Macro Recorder ghi lại. (Hình 4 và 5)

Hình 1

Basic VBA for Excel Page 4


Designing Team - Engineering Department Nguyễn Tấn Hải

Hình 2 Hình 3

Hình 4 Hình 5

2.2 Thực thi Macro


Cách 1: Chạy macro sử dụng bảng điều khiển Macro (Macro dialog box)
Developer\Macros\Macro1\Run (Hình 4)

Cách 2: Dùng phím tắt (shortcut key)


Ở hình 2, ta đã đặt Phím tắt (Shortcut
Key) để chạy macro là “Ctrl + Q/q”
nên để chạy Macro1 ta chỉ cần:
Chọn 1 ô bất kỳ C4, bấm Crtl + q ta
được kết quả như Hình 6

Hình 6

Basic VBA for Excel Page 5


Designing Team - Engineering Department Nguyễn Tấn Hải

Cách 3: Gán Macro vào đối tượng đồ hoạ trong worksheet


B1: Insert\Shapes\Oval
B2: Click phải trên hình Oval chọn Assign_Macro (Hình 7). Cửa sổ Assign Macro
hiện ra, chọn Macro1\OK (Hình 8)
B3: Chọn ô bất kỳ B7, Click vào hình Oval, ta được kết quả như cách 1

Hình 7 Hình 8

Cách 4: Chạy macro từ Quick Access ToolBar


B1: Click phải chuột trên Toolbar\Customize Quick Access Toolbar
B2: Thẻ Quick Access Toolbar\chọn Macros\Macro1\Add (Hình 9)
B3:Chọn Macro1\Modify\Chọn Symbol (Mặt cười)\Đặt tên Macro1\OK
B4: Clik vào hình mặt cười xuất hiện trên thanh Quick Access Toolbar để chạy
Macro1 (Hình 11)

Hình 9 Hình 10

Basic VBA for Excel Page 6


Designing Team - Engineering Department Nguyễn Tấn Hải

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

Basic VBA for Excel Page 7


Designing Team - Engineering Department Nguyễn Tấn Hải

CHƯƠNG 3: ĐỐI TƯỢNG LẬP TRÌNH VBA


3.1 Các đối tượng (Objects)
Visual Basic là ngôn ngữ lập trình hướng đối tượng (object-oriented). Điều đó có
nghĩa là các thành phần trong Excel có thể coi là các đối tượng. Excel có hơn 100 đối
tượng.

Hình 15: Các đối tượng trong Excel


3.2 Các phương thức (Methods)
A. Tập đối tượng WorkBooks
Tập đối tượng WorkBooks chính là tập chứa tất cả các file Excel đang mở.

Hình 16. Một số phương thức và thuộc tính của WorkBooks.


a) Phương thức Add: dùng để tạo mới một WorkBook

b) Phương thức Open: dùng để mở một WorkBook có sẵn.

Basic VBA for Excel Page 8


Designing Team - Engineering Department Nguyễn Tấn Hải

c) Phương thức Close: dùng để đóng một WorkBook đang mở.

B. Đối tượng WorkBook


Đối tượng WorkBook là một trong các file Excel đang mở.
ThisWorkbook là WorkBook hiện hành.

a) Sao lưu Workbook:

b) Đóng Workbook:

Basic VBA for Excel Page 9


Designing Team - Engineering Department Nguyễn Tấn Hải

C. Tập đối tượng WorkSheets

a) Phương thức Add: Tạo mới WorkSheet ở sau sheet cuối

b) Phương thức Delete WorkSheet.

D. Đối tượng Range

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:

Basic VBA for Excel Page 10


Designing Team - Engineering Department Nguyễn Tấn Hải

• ColumnWidth
• Font
• Formula
• Text
• Value
Kiểu dữ liệu
 Các ví dụ:
1. Ví dụ về Cells

Ví dụ 1: Tìm dòng cuối cùng của cột A

Kết quả: LastRow = 1


Ví dụ 2: Tìm cột cuối cùng của dòng 1

Kết quả: LastColumn = 12


2. Ví dụ về Usedrange
UsedRange là một thuộc tính rất hữu dụng của Worksheet. UsedRange trả về
vùng dữ liệu là hình chữ nhật bao của tất cả các ô có chứa dữ liệu. Góc trên
bên trái của hình chữ nhật là ô đầu tiên có chứa dữ liệu, còn góc dưới bên phải
của hình chữ nhật là ô cuối cùng có chứa dữ liệu. Các ô có chứa dữ liệu là những
ô có chứa thông tin như: giá trị, định dạng và chú thích.

Basic VBA for Excel Page 11


Designing Team - Engineering Department Nguyễn Tấn Hải

Ví dụ 3: Tìm dòng cuối cùng của một Sheet

Kết quả: LastRow = 12


Ví dụ 4: Tìm cột cuối cùng của Sheet

Kết quả: LastColumn = 23


Ví dụ 5: Xóa dòng trống khi điều kiện là cột A trống

Basic VBA for Excel Page 12


Designing Team - Engineering Department Nguyễn Tấn Hải

Ví dụ 5: Xóa dòng trống khi dòng đó không có ô nào chứa dữ liệu

Basic VBA for Excel Page 13


Designing Team - Engineering Department Nguyễn Tấn Hải

CHƯƠNG 4: BIẾN VÀ CÁC KIỂU DỮ LIỆU


4.1 Khai báo biến trong VBA
A. Tổng quát
a) Quy tắc đặt tên biến
 Ký tự đầu tiên bắt buộc phải là chữ cái.
 Không chứa khoảng trắng, dấu chấm (.), dấu chấm than(!), hoặc các ký
tự đặc biệt như @, #, &, $
 Tên biến không dài quá 255 ký tự
 Tên biến không trùng với các từ khóa trong VBA
 Trong một SUB không được đặt tên biến trùng nhau
b) Các loại khai báo biến
 Biến cục bộ : Là biến khai báo trong một chương trình con và phạm vi
hoạt động của nó được giới hạn trong chính chương trình con đó.
 Biến toàn cục : Phạm vi hoạt động của biến là toàn bộ dự án.
 Nếu một biến được khai báo với từ khóa DIM thì mặc định biến đó là
biến cục bộ. Phạm vi hoạt động của biến này được giới hạn trong SUB.
 Nếu một biến được khai báo với từ khóa PRIVATE thì phạm vi hoạt
động của biến là trong nội bộ Modul đó. Tất cả các SUB thuộc Modul
đó đều sử dụng được nhưng không thể truy cập từ một Modul hay
UserForm khác.
 Nếu một biến được khai báo với từ khóa PUBLIC thì phạm vi hoạt
động của biến là trong toàn bộ dự án. Nghĩa là bất kỳ trong Modul,
UserForm nào cũng có thể sử dụng được biến này.
B. Cách thức khai báo biến
a) Khai báo hằng số
Hằng số là một loại biến đặc biệt mà giá trị của nó được xác định ngay lúc
khai báo và luôn không thay đổi.
 Cú pháp

[Public/Private] Const <Tên_Hằng> = <Giá trị hằng số>

Ví dụ
Public Const Pi = 3.141592654
b) Khai báo biến

[Dim/Public/Private] <Tên_biến> As <Kiểu dữ liệu>

c) Khai báo mảng tĩnh

[Dim/Public/Private] <Tên mảng> (thông số về chiều) As <Kiểu dữ

Basic VBA for Excel Page 14


Designing Team - Engineering Department Nguyễn Tấn Hải

liệu>

d) Khai báo mảng động

[Dim/Public/Private] <Tên mảng> () As <Kiểu dữ liệu>

4.2. Các kiểu dữ liệu cơ bản trong VBA


A. Kiểu Logic – Boolean
Biến kiểu Boolean chỉ chứa hai giá trị TRUE và FALSE. Giá trị mặc định ban
đầu của biến kiểu Boolean là FALSE
 Cú pháp

[Dim/Public/Private] <Tên_Biến> As Boolean

 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

[Dim/Public/Private] <Tên_Biến> As [Byte/Integer/Long]

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.

Kiểu số nguyên Kích thước Phạm Vi

Byte 1 Byte 0 – 255

Integer 2 Bytes -32,768 – 32767

Long 4 Bytes -2,147,486,648 – 2,147,483,647

 Ví dụ
Dim LngA as Long
Dim IntB as Integer
C. Kiểu số thực – Single/Double

[Dim/Public/Private] <Tên_Biến> As [Single/Double]

 Ví dụ
Dim DblA as Double
Public Pi as Double

Basic VBA for Excel Page 15


Designing Team - Engineering Department Nguyễn Tấn Hải

 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

[Dim/Public/Private] <Tên_Biến> As String

 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

Dim <Tên_Mảng>(Thông số mảng) As <Kiểu dữ liệu>

 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

Dim <Tên_Mảng>() As <Kiểu dữ liệu>

Basic VBA for Excel Page 16


Designing Team - Engineering Department Nguyễn Tấn Hải

Để thay đổi số lượng phần tử của mảng chúng ta sử dụng từ khóa


REDIM
 Cú pháp

ReDim <Tên_Mảng> (Thông số mảng) As <Kiểu dữ liệu>

 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

Dim <Tên_Biến> As Variant

 Ví dụ
Dim VarA as Variant

Basic VBA for Excel Page 17


Designing Team - Engineering Department Nguyễn Tấn Hải

CHƯƠNG 5: TẠO HÀM MỚI VÀ ADD-IN TRONG EXCEL


5.1 Khái niệm về hàm trong Excel
Hàm là những công thức đã được định nghĩa sẵn trong Excel để thực hiện
tính toán dựa trên các số liệu đầu vào, gọi là tham số, theo một trình tự đã
được lập trình sẵn nhằm thực hiện các phép tính từ
A. Tạo hàm mới bằng VBA
Một câu hỏi đặt ra là với hơn 300 hàm có sẵn trong Excel cộng với các hàm
có sẵn trong VBA, tại sao lại cần phải tạo ra hàm mới?
Câu trả lời rất đơn giản: để đơn giản hoá công việc. Với một chút sáng tạo,
người dùng có thể tạo thêm các hàm mới phục vụ cho những nhu cầu của
mình.
Excel cho phép xây dựng các hàm mới bằng VBA, và đặc biệt, việc sử dụng
các hàm mới này không khác gì so với việc sử dụng các hàm có sẵn của Excel.
Hàm mới luôn mang đặc tính:
 Trả về một giá trị nào đó, tương tự như hàm có sẵn trong Excel;
 Hàm mới có thể sử dụng như một chương trình con trong VBA, nghĩa
là nó vừa có thể sử dụng trong bảng tính (trong các ô), đồng thời có thể
sử dụng trong các chương trình viết bằng VBA.
B. Cấu trúc hàm
Thực chất, hàm là một chương trình con dạng Function. Khác với Macro,
hàm là chương trình con có giá trị trả về và có thể có tham số.
Khi tạo hàm mới, người sử dụng cần phải tuân thủ theo dạng thức khai báo
như sau:

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.

Basic VBA for Excel Page 18


Designing Team - Engineering Department Nguyễn Tấn Hải

+ 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:

B1: Alt +F11\Insert\ Procedure. Sau


đó điền tên hàm vào mục Name, chọn
kiểu chương trình con là Function và
phạm vi là Public. Cuối cùng chọn
OK;
Ta có đoạn mã lệnh như sau:
Public Function Chu_Vi()
End Function
B2: Hoàn thiện hàm như sau:

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

Basic VBA for Excel Page 19


Designing Team - Engineering Department Nguyễn Tấn Hải

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

Basic VBA for Excel Page 20


Designing Team - Engineering Department Nguyễn Tấn Hải

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

b) Để tạo một Add-in


Mở Workbook có chứa các mã lệnh không có lỗi
File\Save As\Chọn Microsoft Excel Add-in (*.xla) trong mục Save as type\
Save
Chú ý:
 Để bảo mật mã lệnh nên đặt mật khẩu cho VBA Project
 Nên lưu giữ Workbook nguồn để hiệu chỉnh khi cần thiết
 Workbook có thể chuyển thành Add-in nhưng Add-in không thể thành
Workbook như ban đầu.
 Nên có thanh công cụ cho các lệnh trong Add-in và hướng dẫn cụ thể để
người dùng dễ thực hiện.

Basic VBA for Excel Page 21


Designing Team - Engineering Department Nguyễn Tấn Hải

CHƯƠNG 6: GIAO DIỆN NGƯỜI DÙNG

 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.

Basic VBA for Excel Page 22


Designing Team - Engineering Department Nguyễn Tấn Hải

Biểu tượng Ý nghĩa

- Khi được chọn – người dùng


Design có thể chọn các điều khiển,
Mode thay đổi các thuộc tính của
chúng...
- Khi không được chọn - các
điều khiển đang ở trong chế
độ thực thi

- Liệt kê tất cả các thuộc tính


của điều khiển được chọn.
Properties
- Người dùng có thể thay đổi
từng thuộc tính liên quan đến
điều khiển được chọn.

- Hiển thị cửa sổ mã lệnh


View Code tương ứng với điều khiển
được chọn.

Ví dụ Ví dụ
Tên – Ký
Form ActiveX Mô tả
hiệu
Control Control

Là nút lệnh hoặc nút nhấn. Chạy một


macro thực hiện một hành động khi
Command người dùng nhấp chuột.
Button

Hiển thị một văn bản hướng dẫn ngắn


Label gọn thông qua thuộc tính Caption.

Basic VBA for Excel Page 23


Designing Team - Engineering Department Nguyễn Tấn Hải

Hạn chế người dùng chỉ chọn những


phần tử định trước để tránh những sai sót
khi nhập liệu.
-Linked Cell: ô hiện giá trị khi điều khiển
-ListFillRange: Vùng dữ liệu tạo thành
danh sách các phần tử
Combo -ColumnCount: Số cột trong danh sách
Box xổ xuống
-BoundColumn: Số thứ tự cột trong vùng
dữ liệu muốn lấy giá trị.
-ColumnHead: Tiêu đề của cột trong
danh sách.

Sử dụng để lựa chọn thông tin phù hợp


trong một danh sách các thông tin liên
quan được liệt.
Check
Box

Để tăng hoặc giảm giá trị của một ô.


Thích hợp cho việc giới hạn giá trị nhập
vào.
-Linked Cell: ô hiện giá trị khi điều khiển
Spin -Max, min: Giá trị lớn nhất và nhỏ nhất
Button đạt được
-SmallChange: số gia mỗi khi tăng/ giảm
-Value: Giá trị hiện thời của ô điều khiển

Cho phép hiển thị một danh sách với


nhiều lựa chọn.
-Linked Cell: ô hiện giá trị khi điều khiển
-ListFillRange: Vùng dữ liệu tạo thành
danh sách các phần tử
List -ColumnCount: Số cột trong danh sách
Box xổ xuống
-BoundColumn: Số thứ tự cột trong vùng
dữ liệu muốn lấy giá trị.
-ColumnHead: Tiêu đề của cột trong
danh sách.

Basic VBA for Excel Page 24


Designing Team - Engineering Department Nguyễn Tấn Hải

Cho phép lựa chọn duy nhất 1 giá trị


trong một nhóm các lựa chọn loại trừ lẫn
nhau được chứa trong một group box.
Option Có 3 trạng thái: chọn, bỏ chọn và trung
Button gian (trong trường hợp multiple
selection)

Nhóm các điều khiển liên quan vào trong


một khung hình chữ nhật với một nhãn
tùy chọn.
Group
box

Tăng hoặc giảm giá trị trong một giới


hạn.
- Orientation: chọn thanh cuộn ngang
hay dọc
Scoll Bar

Dùng để nhập dữ liệu dạng văn bản


(text) và nó được điều khiển bằng cách
thiết lập những thuộc tính hay sự kiện
Text box

Có thể nhúng một hình bitmap, JPEG


hay GIF

Image

Cho phép điều khiển các tiện ích:


Window Media Player, Calendar
More Control…
Control

6.1 Ví dụ về Form Control:


Tạo bảng điều khiển gồm:
 1 Combo Box để lựa chọn một ngôn ngữ từ một danh sách các ngôn ngữ
 1 List Box để lựa chọn một Tổ trưởng trong danh sách các tổ trưởng
 1 Spin Button để nhập góc từ 10-3600
 1 Croll Bar để nhập tỷ lệ % (1-100)

Basic VBA for Excel Page 25


Designing Team - Engineering Department Nguyễn Tấn Hải

 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”)

Các bước thực hiện:


a) B1: Tạo Combo Box chọn ngôn ngữ

 Vào Developer\ Insert\Form Control\ Combo Box


 Right Click vào Combo Box\ Chọn Format Control\ trong cửa sổ Format
Object\ chọn Tab Control
 Trong Input range\ quét chọn vùng ngôn ngữ chuẩn bị sẵn I2:I10
 Trong Cell link là ô mình muốn thể hiện kết quả lựa chọn, ta chọn ô C16
(chỉ dùng để kiểm tra kết quả)
 Ta có kết quả:

Basic VBA for Excel Page 26


Designing Team - Engineering Department Nguyễn Tấn Hải

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:

Vào Insert\Form Control\Spin Button


Right Click vào Spin Button \ Chọn Format Control\ trong cửa sổ Format Object\
chọn Tab Control
Minimum value: chọn 0
Maximum value: chọn 360
Incremental change là bước nhảy ta chọn 1
Cell link là ô liên kết để hiện giá trị: ta chọn ô A5

Basic VBA for Excel Page 27


Designing Team - Engineering Department Nguyễn Tấn Hải

c) B3: Design Croll Bar nhập tỷ lệ %:


Vào Insert\Form Control\Croll Bar
Right Click vào Croll Bar \ Chọn Format Control\ trong cửa sổ Format Object\
chọn Tab Control

Minimum value: chọn 0


Maximum value: chọn 100
Incremental change ta chọn 1 là bước nhảy khi ta click vào mũi tên
Page change: chọn 10 là bước nhảy mỗi khi ta click vào khoảng giữa 2 mũi tên
Cell link là ô liên kết để hiện giá trị: ta chọn ô A7
d) B4: Design List Box Danh sách tổ trưởng:
Vào Insert\Form Control\List Box
Right Click vào List Box \ Chọn Format Control\ trong cửa sổ Format Object\
chọn Tab Control

Basic VBA for Excel Page 28


Designing Team - Engineering Department Nguyễn Tấn Hải

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

Basic VBA for Excel Page 29


Designing Team - Engineering Department Nguyễn Tấn Hải

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ả:

6.2. Ví dụ về ActiveX Control


Tạo bảng điều khiển gồm:
 1 ComboBox “Chọn số hóa đơn”
 1 ListBox “Chọn tên công ty”
 1 Croll bar và 1 Spin Button cùng điều khiển 1 ô
 1 Command Button “Select Folder” để chọn 1 Folder và đường dẫn được
thể hiện trong TextBox “SFoder”
 1 Command Button “Select File” để chọn 1 File và đường dẫn được thể
hiện trong TextBox “SFile”
Cách thực hiện như sau:
a) B1: Chuẩn bị một bảng gồm: Số thứ tự, Số hợp đồng, Tên công ty, Giá trị
hợp đồng, Ngày ký hợp đồng, Ngày thanh lý.
Design Combo Box “Chọn số hóa đơn”
Chọn Design Mode
Chọn Properties
Vào Insert\ActiveX Control\Combo Box
Trong cửa sổ Properties ta điều chỉnh các thông số sau:

Basic VBA for Excel Page 30


Designing Team - Engineering Department Nguyễn Tấn Hải

Basic VBA for Excel Page 31


Designing Team - Engineering Department Nguyễn Tấn Hải

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

Basic VBA for Excel Page 32


Designing Team - Engineering Department Nguyễn Tấn Hải

Vào Insert\ActiveX Control\List Box


Trong cửa sổ Properties ta điều chỉnh các thông số sau:
BoundColumn: 1
ColumnCount: 3
ColumnHeads: True
Column Widths: 40;150;60

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ả:

c) B3: Tạo Croll Bar và Spin Button


Chọn Design Mode
Chọn Properties
Vào Insert\ActiveX Control\CrollBar
Trong cửa sổ Properties ta điều chỉnh các thông số sau:
LinkedCell: chọn J22 là ô hiển thị giá trị của điều khiển
Min: chọn 0 là giá trị nhỏ nhất của điều khiển
Max: chọn 1000 là giá trị lớn nhất của điều khiển

Basic VBA for Excel Page 33


Designing Team - Engineering Department Nguyễn Tấn Hải

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

Vào Insert\ActiveX Control\TextBox


Trong cửa sổ Properties ta điều chỉnh các thông số:
(Name) :SFolder/SFile
Double Click vào Button “Select Folder”
Cửa sổ VBAIDE mở ra
Ta viết đoạn code:

D
ouble Click vào Button “Select File”
Cửa sổ VBAIDE mở ra
Ta viết đoạn code:

6.3 Hộp thoại tuỳ biến - UserForm


Khi các hộp thoại mặc định trong Excel không đáp ứng được nhu cầu, người lập
trình Excel có thể tạo ra các hộp thoại tuỳ biến của riêng mình thông qua các
UserForm. Với khả năng tuỳ biến cao, người lập trình có thể sử dụng UserForm và
các điều khiển trên đó để tạo ra những hộp thoại với nhiều tính năng hơn, phù hợp
với nhu cầu thực tế hơn.

Basic VBA for Excel Page 34


Designing Team - Engineering Department Nguyễn Tấn Hải

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.

Basic VBA for Excel Page 35


Designing Team - Engineering Department Nguyễn Tấn Hả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:

 2 OptionButton với tên: OptionAuto với Value = True (Thường chọn) và


OptionManual
 1 nút chọn 1 vùng RefEdit với tên refRange
 2 TextBox với tên: TextName, txtNumber
 3 OptionButton với tên: OptionMale, OptionFemale, OptionUnknown với
Value = True (Thường chọn)
 1 SpinButton với tên: spnButton
 1 ListBox với tên: lstDiscipline
 2 CommandButton với tên: OKButton, CancelButton
 3 Frame với Caption: Auto Input, Manual Input, Sex bố trí như hình vẽ
Yêu cầu:
Nhập một danh sách gồm: Họ tên, Tuổi, Giới tính, Tổ trực thuộc bằng 2 cách

Basic VBA for Excel Page 36


Designing Team - Engineering Department Nguyễn Tấn Hải

- 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

B2: Bấm Alt + F11 để mở cửa sổ VBAIDE


B3: Insert/UserForm  ta có cửa sổ 1 UserForm1 hiện ra

B4: trên thanh công cụ, chọn thanh ToolBox và thanh Properties (F4)

Basic VBA for Excel Page 37


Designing Team - Engineering Department Nguyễn Tấn Hải

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.

B6: Lập trình cho từng nút lệnh.


1. Double click vào SpinButton

Gán giá trị của spnButton cho TextBox txtNumber


2. Double click vào TextBox txtNumber

Basic VBA for Excel Page 38


Designing Team - Engineering Department Nguyễn Tấn Hải

Đổi Text trong txtNumber thành số và gán cho NewVal


So sánh Nếu giá trị của NewVal nằm trong khoảng {min: max} (được người
dùng nhập vào Properties của SpinButton) thì gán giá trị của NewVal cho
SpinButton
Chú ý: Đoạn code này giúp người dùng có thể nhập trực tiếp số vào txtNumber
mà ko cần dùng SpinButton. Nếu không có đoạn code này thì người dùng chỉ có
thể dùng SpinButton để nhập tuổi.
3. Double Click vào CancelButton

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

Thêm đối tượng cho danh sách xổ xuống của ListBox


Gán địa chỉ vùng chọn cho RefEdit

Basic VBA for Excel Page 39


Designing Team - Engineering Department Nguyễn Tấn Hải

5. Double Click vào UserForm

Basic VBA for Excel Page 40


Designing Team - Engineering Department Nguyễn Tấn Hải

6. Tạo nút lệnh Show UserForm trên sheet “NameSex”


Tab Developer\ chọn Design Mode + chọn Insert\ trong ActiveX Control\ chọn
Command Button

Chọn Command Button vừa tạo\ chọn thanh Properties\ đổi Caption thành
“Show UserForm”
Double Click vào Command Button

Basic VBA for Excel Page 41

You might also like