SƠ ĐỒ VBA EXCEL CĂN BẢN MIND MAPSƠ ĐỒ VBA EXCEL CĂN BẢN MIND MAPSƠ ĐỒ VBA EXCEL CĂN BẢN MIND MAPSƠ ĐỒ VBA EXCEL CĂN BẢN MIND MAPSƠ ĐỒ VBA EXCEL CĂN BẢN MIND MAPSƠ ĐỒ VBA EXCEL CĂN BẢN MIND MAPSƠ ĐỒ VBA EXCEL CĂN BẢN MIND MAPSƠ ĐỒ VBA EXCEL CĂN BẢN MIND MAP
Trang 1VBA EXCEL CĂN BẢN
BÀI 1 TÌM HIỂU CƠ BẢN VỀ VBA
VBA excel là gì?
Cách bật trình soạn thảo (VBE) của VBA excel
Thiết lập 1 số tính năng mặc định Tìm hiểu cấu trúc, giao diện của các hộp thoại của IDE excel
Cách record macro, phân tích, tối ưu đoạn macro vừa ghi
Cấu trúc của 1 thủ tục (Sub), hàm (Function) trong VBA excel
CẤU TRÚC THỦ TỤC: SUB
01 Cấu trúc
02 Tham số
Links: https://docs.microsoft.com/en-us/
interface-help/sub-statement
CẤU TRÚC HÀM: FUNCTION
01 Cấu trúc
02 Tham số
Links: https://docs.microsoft.com/en-us/
interface-help/function-statement
CÁC BƯỚC THỰC HIỆN CHÍNH
B1 Khai báo biến
B2 Kiểm tra tính logic
B3 Gán giá trị ban đầu cho biên B4 Tính toán, thực hiện các thao tác chính
B5 Kết quả trả về, giải phóng bộ nhớ Cách tạo nút bấm và gán câu
lệnh macro VBA cho nút bấm
Bai01_TongKetBai01.pdf
BÀI 2 TÌM HIỂU CẤU TRÚC, CÁC
Đối tượng Application Đối tượng Workbooks Đối tượng Workbook, ActiveWorkBook, ThisWorkbook Đối tượng Worksheets
Đối tượng Worksheet, ActiveWorksheet Đối tượng Range, Cells, Selection, ActiveCell Đối tượng Row, Rows, Column, Columns
Links tham khảo: https://docs.microsoft.com/en-us/
office/vba/language/reference/user-interface-help/
ongosub-ongoto-statements
Bai02_CacDoiTuongThuongDung.pdf
BÀI 3 CÁC KIỂU DỮ LIỆU, BIẾN HẰNG SỐ TRONG VBA EXCEL
I Cấu trúc khai báo các kiểu biến
1 Cấu trúc chung: [Static|Public|Private|Dim] AVariable [As Type]
Public TenBien [as Kiểu biến]
Là biến toàn cục, ở đâu cũng gọi được
Vị trí: Bên ngoài Sub/Function, Trên cùng của modul
Tồn tại: Giải phóng khi thoát file
Private TenBien [as Kiểu biến]
Là biến cục bộ, chỉ gọi đối với Modul chứa nó
Vị trí: Bên ngoài Sub/Function, Trên cùng của modul
Tồn tại: Giải phóng khi thoát file
Static TenBien as [Kiểu biến]
Là biến cục bộ, chỉ gọi đối với Modul chứa nó
Vị trí: Chỉ đặt trong Sub/Function Tồn tại: Giải phóng khi thoát file
Dim TenBien as [Kiểu biến]
Là biến cục bộ, chỉ gọi đối với Modul chứa nó
Vị trí: Bên ngoài Sub/Function khi khai báo toàn cục; hoặc trong Sub/Function Tồn tại: Giải phóng khi thoát file, thoát Sub/Function
Khi không khai báo biến cụ thể thì nó mặc định là kiểu VARIANT [Public|Private] Type TenKieu End Type Kiểu người dùng tự tạo
Vùng nhớ:
Heap
Vùng nhớ chung: Biến toàn cục, Static
Chỉ phá hủy khi đóng File, hoặc lỗi chương trình
Stack
Vùng nhớ riêng: Khai báo nội bộ Sub/
Function Phá hủy khi thoát Sub/Function
2 Cấu trúc khai báo hằng số:
Public const TenBien as kiểu =Giá trị Private const TenBien as kiểu =Giá trị [Public|Private] Enum End Enum
II Tìm hiểu về các kiểu biến trong VBA excel
Boolean: Kiểu dữ liệu luận lý (True/False) Byte: Kiểu bytes
Currency: Kiểu tiền tệ Date: Kiểu dữ liệu ngày tháng Decimal: Kiểu dữ liệu dạng thập phân Double: Kiểu số thực
Integer: Số nguyên Long: Số nguyên Object: Kiểu biến đối tượng String: Kiểu chuỗi
Variant: Kiểu thực thể User-defined: Kiểu người dùng tự định nghĩa Single
LongLong LongPtr Links tham khảo: https://docs.microsoft.
com/en-us/office/vba/language/reference/
user-interface-help/data-type-summary
III Nguyên tắc đặt tên biến
1 Không đặt tên có dấu tiếng Việt, ko dấu Space (dấu cách)
2 Đặt tên ngắn gọn, dễ nhớ, không dùng các ký tự đặc biệt: ^, &, ), (,%, $, #, @, !, ~, +, -, *, …
3 Sử dụng tiếp đầu ngữ để đặt tên
integer, long: i, j, k, d, a
Object
Nếu đối tượng chung: objDoiTuong,
Nếu đối tượng cụ thể
range, cells, activecell, selection: rngSelect, rngAct, rngCurent
worksheet: sh, Actsh, wsh, sht_Data,
Workbook: Wb, ActWb, CurentWb
Double: dGiaTri, dDienTich Variant: vGiaTri, vMang, ArrSrc, ArrKQ
String: sChuoi, sFileName, sVung
Boolean: bCheck, bSelect
4 Các ký tự viết tắt khi khai báo biến
Long: &
Integer: % Currency: @ Double: # Single: ! String: $
IV Các toán tử thường dùng:
1 Toán tử số học
Cộng: + Trừ: Nhân: * Chia: / Chia (Lấy phần nguyên): \ Mod (chia lấy nguyên phần dư) Lũy thừa: ^
2 Toán tử so sánh
Bằng: = Khác: <>
Lốn hơn hoặc bằng: >=
Bé thua hoặc bằng: <=
Lớn hơn: >
Bé hơn: <
is Like
3 Toán tử nối
dấu: &
Dấu: +
4 Toán tử logic
And Not Or Eqv Xor
Bai03_KhaiBaoBien_KieuBien.pdf
BÀI 4 CẤU TRÚC ĐIỀU KIỆN, RẼ NHÁNH
Cấu trúc If then end if
1 If condition Then [ statements ] [ Else elsestatements ]
If condition Then [ statements ] [ ElseIf condition-n Then [ elseifstatements ]]
[ Else [ elsestatements ]]
End If
Cấu trúc Select Case end select
Select Case testexpression [ Case expressionlist-n [ statements-n ]]
[ Case Else [ elsestatements ]]
End Select
Nhãn dán Label, lệnh goto
Nhã: Label
Để đánh dấu vị trí
Viết tắt, ngắn gọn, phía sau phải có dấu hai chấm : (Ví dụ lbExit:)
Goto: Để di chuyển nhanh đến vị trí nhãn dán Label
Exit, End, Call
Exit Do Exit For Exit Function Exit Property Exit Sub
End End Function End If
End Property End Select End Sub End Type End With Call Sub/Function
Bai04_CauTrucDieuKhien.pdf
Links tham khảo 1: https://docs.microsoft.
com/en-us/office/vba/language/reference/
user-interface-help/ifthenelse-statement Links tham khảo 2: https://docs.microsoft.
com/en-us/office/vba/language/reference/
user-interface-help/select-case-statement
BÀI 5 CẤU TRÚC VÒNG LẶP
Vòng lặp For Next (Hay dùng nhất)
Cấu trúc: For counter = start To end [ Step step ]
[ statements ] [ Exit For ] [ statements ] Next [ counter ]
Links tham khảo: https://docs.microsoft.
com/en-us/office/vba/language/reference/
user-interface-help/fornext-statement
Vòng lặp For each Next (Hay dùng sau For Next)
Cấu trúc: For Each element In group [ statements ]
[ Exit For ] [ statements ] Next [ element ]
Links tham khảo:
interface-help/for-eachnext-statement
Các cấu trúc lặp: Do, While, Loop
Cấu trúc 1: Do [{ While | Until } condition ] [ statements ]
[ Exit Do ] [ statements ] Loop
Cấu trúc 2: Do [ statements ] [ Exit Do ] [ statements ] Loop [{ While | Until } condition ] Cấu trúc 3: While condition [ statements ] Wend
Links tham khảo 01: https://docs.microsoft.com/
interface-help/doloop-statement
Links tham khảo 02: help/whilewend-statement
BÀI 10 LẬP TRÌNH SỰ KIỆN TRONG VBA EXCEL
1 Sự kiện trong Worksheet
Worksheet_SelectionChange
Worksheet_Change Worksheet_Activate Worksheet_Deactivate Worksheet_BeforeDoubleClick Worksheet_BeforeRightClick
2 Sư kiện trong Workbook
Workbook_Open Workbook_Activate Workbook_BeforeClose
BÀI 9 USERFORM CĂN BẢN TRONG VBA
Form Đặt tên Form: frmTenForm
Các sự kiện thường dùng
UserForm_Initialize UserForm_QueryClose
Label
Đặt tên biến; lblTenBien hoặc lbTenBien
Các sự kiện thường dùng Label_Click
Textbox
Đặt tên biến: txtTenBien Các sự kiện thường dùng TextBox_Change
CommandButton
Đặt tên biến: cmdTenBien Các sự kiện thường dùng CommandButton_Click
Listbox Đặt tên biến:lstTenBien
Các sự kiện thường dùng ListBox_Click
Combobox Đặt tên biến: cbbTenBien
Các sự kiện thường dùng
ComboBox_Change ComboBox_Click
OptionButton
Đặt tên biến: optTenBien Các sự kiện thường dùng
Frame
Đặt tên biến: fraTenBien Các sự kiện thường dùng
MultiPage Đặt tên biến:pgTenBien
Các sự kiện thường dùng
TabStrip
Đặt tên biến:tabTenBien Các sự kiện thường dùng
ToggleButton
Đặt tên biến:togTenBien Các sự kiện thường dùng
SpinButton
Đặt tên biến:spiTenBien Các sự kiện thường dùng
ScrollBar
Đặt tên biến:ScrTenBien Các sự kiện thường dùng
Image
Đặt tên biến: imgTenBien Các sự kiện thường dùng
BÀI 8 CẤU TRÚC MẢNG 1D, 2D
Cấu trúc khai báo: Public | Private | Dim | Static Arr([Lower To] Upper) [As type of variables]
Các hàm sử dụng với mảng
Option Base { 0 | 1 }
Đặt trên đầu modul để xác định phần tử mảng bắt đầu từ 0 hoặc 1 (Một số trường hợp thì mảng luôn bắt đầu từ 0, kể cả khi
sử dụng từ khóa này)
Option Compare { Binary | Text | Database }
Kiểu dữ liệu (thường dùng để xđ có phân biệt HOA - THƯỜNG)
UBound(ArrayName[,dimension]) Xác định biên dưới
LBound(ArrayName[,dimension]) Xác định biên trên
Split(expression[,delimiter[,count[,compare]]]) Tách dữ liệu thành mảng 1D
Join(List[,delimiter]) IsArray(variablename) Erase ArrayName ReDim [Preserve] varname(subscripts) [, varname(subscripts)]
Filter(inputstrings,value[,include[,compare]])
Mảng tĩnh Mảng động Range và mảng Links tham khảo: https://docs.microsoft.
com/en-us/office/vba/language/concepts/
getting-started/using-arrays in-excel/bai-10-array
vba-array/
https://www.tutorialspoint.com/vba/vba_
arrays.htm
BÀI 7 KỸ THUẬT VIẾT HÀM, THỦ TỤC, CÁCH TRUYỀN THAM SỐ
CẤU TRÚC
[Public | Private | Static] Sub([ByVal / ByRef | Arguments As type of variables]) .
End Sub [Public | Private | Static] Function([ByVal / ByRef | Arguments As type of variables]) [
As type of variables]
End Function
TRUYỀN THAM SỐ
Byref Nếu không chỉ rõ thì mặc định là: Byref
Tham số có thể nhận giá trị của Sub/Function
Byval
Là kiểu truyền giá trị Tham số được bảo toàn (giữ nguyên - không nhận giá trị khi thoát khỏi Sub/Function)
Mục đích sử dụng
Nếu muốn giữ nguyên giá trị cho tham số thì dùng Byval Nếu muốn tham số nhận giá trị thì dùng Byref
Byref sẽ thực thi nhanh hơn Byval Khi sử dụng Byval sẽ
tự động nhân bản 1 biến tạm trong vùng nhớ, và sử dụng biến tạm này để tính toán Còn khi sử dụng Byref thì không phải sao chép biến tạm nào, dùng chính biến đó để
xử lý
Links tham khảo 1: https://docs.microsoft.
com/en-us/office/vba/language/reference/
user-interface-help/function-statement Links tham khảo 2: https://docs.microsoft.
com/en-us/office/vba/language/reference/
user-interface-help/sub-statement Links tham khảo 3: https://docs.microsoft.
com/en-us/office/vba/language/glossary/
vbe-glossary#by-value
BÀI 6 CÁC NHÓM HÀM TRONG VBA EXCEL & PHƯƠNG PHÁP BẪY LỖI
A HÀM TRONG VBA
1 Nhóm hàm văn bản
3 Nhóm hàm thời gian
6 Nhóm hàm WorksheetFunction (gọi hàm giống excel)
B PHƯƠNG PHÁP BẪY LỖI
Cấu trúc
On Error GoTo Line/Label
On Error Resume Next
On Error GoTo 0
Bỏ qua mọi lỗi: On error resume next Khôi phục trạng thái báo lỗi: On error goto 0 Nếu xảy ra lỗi thì nhảy đến vị trí nào đó có gán
nhãn lable (hoặc dòng Line): On error goto Line
Links tham khảo: https://docs.microsoft.com/en-us/office/
statement
https://www.automateexcel.com/vba/error-handling/
Là kiểu truyền tham chiếu
Chỉ dùng trong API
2 Nhóm hàm kiểm tra thông tin
Function IsArray(VarName) As Boolean Function IsDate(Expression) As Boolean Function IsEmpty(Expression) As Boolean Function IsError(Expression) As Boolean Function IsNull(Expression) As Boolean
Function IsNumeric(Expression) As Boolean Function TypeName(VarName) As String Function VarType(VarName) As VbVarType
Function IsObject(Expression) As Boolean
Function RGB(Red As Integer, Green As Integer, Blue As Integer) As Long
Kiểm tra giá trị đưa vào có
phải là mảng hay không?
Kiểm tra giá trị đưa vào có
phải là ngày tháng hay không?
Kiểm tra giá trị đưa vào có
phải là rỗng hay không?
Kiểm tra giá trị đưa vào có
phải là Lỗi hay không?
Kiểm tra giá trị đưa vào có
phải là Null hay không?
Kiểm tra giá trị đưa vào có
phải là chữ số hay không?
Hàm trả về tên kiểu giá trị
Kiểm tra giá trị đưa vào thuộc
kiểu dữ liệu nào
Kiểm tra giá trị đưa vào có
phải là đối tượng hay không?
Hàm trả về giá trị màu sắc
Function Chr(CharCode As Long) Function ChrW(CharCode As Long) Function Asc(String As String) As Integer Function AscW(String As String) As Integer Function Format(Expression, _
[Format], _ [FirstDayOfWeek As VbDayOfWeek = vbSunday], _
[FirstWeekOfYear As VbFirstWeekOfYear = vbFirstJan1])
Function InStr([Start], _ [String1], _
[String2], _ [Compare As VbCompareMethod = vbBinaryCompare])
Function InStrRev(StringCheck As String, _ StringMatch As String, _
[Start As Long = -1], _ [Compare As VbCompareMethod = vbBinaryCompare]) As Long
Function LCase(String) Function UCase(String) Function Left(String, Length As Long) Function Right(String, Length As Long)
Function Len(Expression) Function Trim(String) Function Space(Number As Long)
Function Split(Expression As String, _ [Delimiter], _
[Limit As Long = -1], _ [Compare As VbCompareMethod = vbBinaryCompare])
Function Join(SourceArray, [Delimiter]) As String
Function Replace(Expression As String, _ Find As String, _
Replace As String, _ [Start As Long = 1], _ [Count As Long = -1], _ [Compare As VbCompareMethod = vbBinaryCompare]) As String
Function StrComp(String1, _ String2, _
[Compare As VbCompareMethod = vbBinaryCompare])
Function StrConv(String, Conversion As VbStrConv, [LocaleID As Long])
Function String(Number As Long, Character)
Property Date As Variant
Function DateSerial(Year As Integer, Month
As Integer, Day As Integer)
Function DateValue(Date As String)
Function Day(Date) Function Month(Date) Function Year(Date)
Function Weekday(Date, [FirstDayOfWeek As VbDayOfWeek = vbSunday])
Property Now As Variant Property Time As Variant Function Hour(Time) Function Minute(Time) Function Second(Time)
Function TimeSerial(Hour As Integer, Minute
As Integer, Second As Integer)
Function TimeValue(Time As String)
4 Nhóm hàm chuyển đổi giá trị
Function Int(Number) Function Fix(Number) Function Val(String As String) As Double Function CLng(Expression) As Long Function CDbl(Expression) As Double Function CDate(Expression) As Date Function CStr(Numberic) As String
Function Str(Number)
5 Nhóm hàm tương tác người dùng
Function Shell(PathName, [WindowStyle As VbAppWinStyle = vbMinimizedFocus]) As Double
Function MsgBox(Prompt, _ [Buttons As VbMsgBoxStyle = vbOKOnly], _ [Title], _
[HelpFile], _ [Context]) As VbMsgBoxResult
Function InputBox(Prompt, _ [Title], _
[Default], _ [XPos], _ [YPos], _ [HelpFile], _ [Context]) As String Function DoEvents() As Integer Function IIf(Expression, TruePart, FalsePart) Function Choose(Index As Single, ParamArray Choice() As Variant)
Sub Beep() Sub AppActivate(Title, [Wait]) Sub SendKeys(String As String, [Wait])