
Nh ng th thu t trong OFFICE (8)ữ ủ ậ
Chúng ta hãy l p trình b ng VBA (1).ậ ằ
Nguy n Ph ng Th o - Trung tâm D y ngh và Ph c p Tin h c Mi n núiễ ươ ả ạ ề ổ ậ ọ ề
ABC
525 - Đi n Biên - TX. Yên Báiệ
B n thân m n! Qua các bài d o đ u, chúng ta đã làm quen v i ki u l p trình VBA (Visual Basic Forạ ế ạ ầ ớ ể ậ
Application) đ n gi n. L p trình VBA có r t nhi u cái l i, n u thành th o ta s có nh ng s n ph m h nơ ả ậ ấ ề ợ ế ạ ẽ ữ ả ẩ ơ
h n l p trình VB (Visual Basic thu n) vì các lý do sau đây:ẳ ậ ầ
- B n t n d ng đ c toàn b nh ng gì đã h c đ c t Visual Basic.ạ ậ ụ ượ ộ ữ ọ ượ ừ
- B n t n d ng đ c m i kh năng mà ch ng trình Microsoft Office mang l i. N u l p trình trong Excel,ạ ậ ụ ượ ọ ả ươ ạ ế ậ
b n t n d ng đ c toàn b các th vi n và nh ng công c tính toán b t kh chi n b i, đ ng đ u thạ ậ ụ ượ ộ ư ệ ữ ụ ấ ả ế ạ ứ ầ ế
gi i. Ta không ph i vi t nh ng thu t toán đ n gi n, mà ch vi c "moi" t ch ng trình Excel ra s d ng.ớ ả ế ữ ậ ơ ả ỉ ệ ừ ươ ử ụ
(Ta t m g i các ch ng trình này là các ạ ọ ươ ch ng trình baoươ ). Các ch ng trình bao nh EXCEL,ươ ư
Winword, Power Point, Access, AutoCAD, OutLook... có r t nhi u th vi n DLL đã xây d ng s n, đangấ ề ư ệ ự ẵ
ch chúng ta khám phá. N u b n bi t ti ng Anh thì đó là nh ng kho vàng ki n th c cho b n h c và... b tờ ế ạ ế ế ữ ế ứ ạ ọ ắ
ch c. Có r t nhi u ví d c c kỳ phong phú và đa d ng ta không th b qua. Tôi đã d ch hàng năm tr iướ ấ ề ụ ự ạ ể ỏ ị ờ
mà v n ch a th h t đ c kho d li u đ s đó.ẫ ư ể ế ượ ữ ệ ồ ộ
- Các ch ng trình bao đ u h tr các d ng n i k t OLE, DDE đó là m t xích tuy t v i đ b n n i k t vàươ ề ỗ ợ ạ ố ế ắ ệ ờ ể ạ ố ế
chia s d li u, mà đ bao công s c l p trình.ẻ ữ ệ ỡ ứ ậ
M t ví d : Đây là s đ đ i t ng Microsoft Office:Ta có th thi t l p, thay đ i, th m chí c i t các ph nộ ụ ơ ồ ố ượ ể ế ậ ổ ậ ả ổ ầ
này d nh tr bàn tay. Theo s đ này, đ i t ng và t p h p (Collection) đ c mô t màu vàng. Cònễ ư ở ơ ồ ố ượ ậ ợ ượ ả
ch có đ i t ng thì màu xanh.ỉ ố ượ
Ta th y m i đ i t ng và t p h p đ u có công d ng riêng trong Microsoft Ofice Object:ấ ỗ ố ượ ậ ợ ề ụ

1. Command Bars: Làm vi c v i thanh công c và nút công c . (T t nhiên thanh th c đ n cũngệ ớ ụ ụ ấ ự ơ
ch là thanh công c đ c bi t, thanh ShortCut Menu - Hi n th khi nh n phím ph i - cũng n mỉ ụ ặ ệ ể ị ấ ả ằ
trong s này).ố
2. Assistant: Làm vi c v i nhân v t ho t hình, đi u khi n và b t nó ph c v mình. (Xem bài l pệ ớ ậ ạ ề ể ắ ụ ụ ậ
trình v i nhân v t ho t hình c a Office - Nguy n Ph ng Th o)ớ ậ ạ ủ ễ ươ ả
3. File Search: Làm vi c v i công c tìm ki m.ệ ớ ụ ế
4. Document Properties: Làm vi c v i các tính ch t c a văn b n.ệ ớ ấ ủ ả
5. FileFile - Macintosh: Làm vi c v i h đi u hành Macitosh. (Ph n này tôi ch bi t qua khôngệ ớ ệ ề ầ ỉ ế
dám vi t vì không hi u rõ).ế ể
T i m i ph n trên đ u có r t nhi u ph n chi ti t kèm theo. Nh ng ph n này r t ít tài li u đ c p t i.ạ ỗ ầ ề ấ ề ầ ế ữ ầ ấ ệ ề ậ ớ
Tuy nhiên không ch có các đ i t ng trên mà r t nhi u đ i t ng khác. Tôi ch a mu n đ a ra bài vi tỉ ố ượ ấ ề ố ượ ư ố ư ở ế
này, vì n u đ a ra có th có b n s choáng ng p và nó cũng ch a mang l i m c đích gì c .ế ư ể ạ ẽ ợ ư ạ ụ ả
Vi c l p trình trong VBA th ng r t thu n l i do giao di n chính đã có ch ng trình bao. B n ch ph iệ ậ ườ ấ ậ ợ ệ ở ươ ạ ỉ ả
l p k ho ch cho m t s công vi c chính, sau đó m i đ n v n đ trau chu t. Các công vi c chính g m:ậ ế ạ ộ ố ệ ớ ế ấ ề ố ệ ồ
1. Giao di n và ki u cách nh p d li u. B n mu n ng i dùng nh p nh ng d li u gì? Nh p bệ ể ậ ữ ệ ạ ố ườ ậ ữ ữ ệ ậ ổ
sung vào lúc nào? Nh p vào đâu, vào chính ch ng trình bao hay nh p vào các h p InputBox,ậ ươ ậ ộ
Form, Dialog, MsgBox?...
2. Giao di n và ki u cách xu t d li u. Xu t nh ng gì, xu t vào đâu, vào v trí trên ch ng trìnhệ ể ấ ữ ệ ấ ữ ấ ị ươ
bao hay b n thông báo b ng các form, dialog hay report b i t p, k t qu in...ạ ằ ở ệ ế ả
3. Tìm m i liên h gi a giá tr nh p vào v i giá tr xu t ra. Có bao nhiêu công th c. D li u cungố ệ ữ ị ậ ớ ị ấ ứ ữ ệ
c p cho công th c nh p đâu (T ch ng trình bao, h p Dialog hay yêu c u nh p thêm. N uấ ứ ậ ở ừ ươ ộ ầ ậ ế
nh p thêm thì b sung vào công vi c 1).ậ ổ ệ
Sau khi xây d ng xong k ho ch, m i b t tay vào thi t k . Thi t k giao di n d nh t, nh ng ph i cóự ế ạ ớ ắ ế ế ế ế ệ ễ ấ ư ả
đ u óc quan sát và m thu t cho th t đ p. M t Form đ p, cân đ i bao gi cũng chi m nhi u c m tìnhầ ỹ ậ ậ ẹ ộ ẹ ố ờ ế ề ả
h n.ơ
Quá trình trau chu t th ng ch là thay đ i tính ch t (property) c a đ i t ng mà thôi. Ngay c v n đố ườ ỉ ổ ấ ủ ố ượ ả ấ ề
xu t d li u d ng đ n gi n, b n cũng có th xu t b ng ph ng pháp thay đ i tính ch t (property) c aấ ữ ệ ạ ơ ả ạ ể ấ ằ ươ ổ ấ ủ
đ i t ng.ố ượ
V thay đ i property c a đ i t ng ta ch vi c áp d ng công th c truy n th ng:ề ổ ủ ố ượ ỉ ệ ụ ứ ề ố
Tên_đ i_t ng. Tên_tính_chât = Giá_tr _m iố ươ ị ớ
Giá tr m i có th là giá tr c th hay m t bi u th c đ ra m t giá tr khác. V n đ quan tr ng là b nị ớ ể ị ụ ể ộ ể ứ ể ộ ị ấ ề ọ ạ
ph i hi u và tr l i đ c câu h i c a mi ng:"N u tôi làm vi c A, máy ph i đáp ng đ c công vi c B.ả ể ả ờ ượ ỏ ử ệ ế ệ ả ứ ượ ệ
Mu n máy làm công vi c B, tôi ph i dùng công th c đ i v i đ i t ng nào, và công th c c n thay đ iố ệ ả ứ ố ớ ố ượ ứ ầ ổ
tính ch t gì c a đ i t ng đó?"ấ ủ ố ượ
Đ tránh lan man, tôi xin nói v l p trình Excel. Tuy nhiên nh ng bài vi t khác, tôi s nói v ch ng trìnhể ề ậ ữ ế ẽ ề ươ
khác (Ví d nh Word, Power Point, AutoCAD, Access, OutLook...).ụ ư
Các thành ph n l p trình VBA trong EXcelầ ậ
Trong Excel, các thành ph n đ l p trình đ c chia làm các ch đ l n là:ầ ể ậ ượ ủ ề ớ
•B t đ u v i Visual Basic ắ ầ ớ

•Excel v i các tham chi u Visual Basicớ ế
•Ngôn ng Visual Basic v i tham chi u ữ ớ ế
•Các ch đ truy tìm v i Visual Basic ủ ề ớ
•C s d li u truy c p đ i t ng ơ ở ữ ệ ậ ố ượ
•Tham chi u v i s d ng Jet SQLế ớ ử ụ
•Office v i các tham chi u Visual Basicớ ế
•Form v i các tham chi u Visual Basicớ ế
•M u phát tri n v i l i khuyên Tip ẫ ể ớ ờ
•Tham chi u đ i t ng v i Form.ế ố ượ ớ
•T i m i ch đ l n l i chia ra nhi u các ch đ con. M i ch đ con đ u có phân lo i và n i k tạ ỗ ủ ề ớ ạ ề ủ ề ỗ ủ ề ề ạ ố ế
các m c v i nhau. N u b n bi t Ti ng Anh thì đây qu là nh ng ví d và bài h c th c s b ích.ụ ớ ế ạ ế ế ả ữ ụ ọ ự ự ổ
Ta cũng có th h c đ c r t nhi u ph n này.ể ọ ượ ấ ề ở ầ
Nói v c u trúc ch ng trình ch y trong Excelề ấ ươ ạ
V c u trúc ch ng trình, t t c các ch ng trình chúng ta thi t k trong Excel đ u đ c vi t trongề ấ ươ ấ ả ươ ế ế ề ượ ế
Module c a t p d án. t p d án b n ph i đ t tên nh t p Excel thông th ng. R i vào ch đ l pủ ệ ự Ở ệ ự ạ ả ặ ư ệ ườ ồ ế ộ ậ
trình VBA b ng nhi u cách, th ng gõ Alt+F11 r i Ctrl+R đ hi n Project Explore.ằ ề ườ ồ ể ệ
Ch n t p d án c a mình và Insert Module. T i module này ta vi t các ch ng trình d ng Subọ ệ ự ủ ạ ế ươ ở ạ
TEN_THU_TUC. Đây là các th t c t do. Th t c t do gi ng nh b t c các th t c thông th ng màủ ụ ự ủ ụ ự ố ư ấ ứ ủ ụ ườ
ta v n l p trình b ng Visual Basic. Cũng t ng t v i vi c b n chèn Form và vi t các th t c bi n cẫ ậ ằ ươ ự ớ ệ ạ ế ủ ụ ế ố
c a Form.ủ
T i t p Project ta còn có th vi t m t d ng th t c n a đó là th t c bi n c . Ta đ ý nó hi n ra nh thạ ệ ể ế ộ ạ ủ ụ ữ ủ ụ ế ố ể ệ ư ế
này:
Tên bi n cế ố Th t c đáp ng ủ ụ ứ (Khi đánh nh thêm Private vào tr c)ớ ướ
A. Th t c cho Work Book ủ ụ
1. Work Book b kích ho tị ạ Sub Workbook_Activate()
Work Book thêm AddIn Sub Workbook_AddinInstall()
Work Book g b AddInỡ ỏ Sub Workbook_AddinUninstall()
Work Book tr c khi đóngướ Sub Workbook_BeforeClose(Cancel As Boolean)
Work Book tr c khi inướ Sub Workbook_BeforePrint(Cancel As Boolean)
Work Book tr c khi c tướ ấ Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)
Work Book m t FocusấSub Workbook_Deactivate()
Work Book thêm Sheet m iớSub Workbook_NewSheet(ByVal Sh As Object)

Work Book mởSub Workbook_Open()
Sheet c a Work Book đ c kích ho tủ ượ ạ Sub Workbook_SheetActivate(ByVal Sh As Object)
Sheet c a Work Book tr c khi Dclickủ ướ Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal
Target As Excel.Range, Cancel As Boolean)
Sheet c a Work Book tr c khi Rightủ ướ
click
Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal
Target As Excel.Range, Cancel As Boolean)
Sheet c a Work Book tính toánủSub Workbook_SheetCalculate(ByVal Sh As Object)
Sheet c a Work Book thay đ iủ ổ Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As
Excel.Range)
Sheet c a Work Book m t Focusủ ấ Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Sheet c a Work Book thay đ i vùngủ ổ
ch nọSub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal
Target As Excel.Range)
C a s Work Book đ c kích ho tử ổ ượ ạ Sub Workbook_WindowActivate(ByVal Wn As Excel.Window)
C a s Work Book thôi kích ho tử ổ ạ Sub Workbook_WindowDeactivate(ByVal Wn As Excel.Window)
C a s Work Book đ i cử ổ ổ ỡ Sub Workbook_WindowResize(ByVal Wn As Excel.Window)
B. Th t c cho t ng Work Sheet riêng (Ch n Sheet c n vi t và ch n theo bi n c )ủ ụ ừ ọ ầ ế ọ ế ố
Sheet đ c kích ho tượ ạ Sub Worksheet_Activate()
Sheet tr c khi b Dclickướ ị Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range,
Cancel As Boolean)
Sheet tr c khi b RightClickướ ị Sub Worksheet_BeforeRightClick(ByVal Target As Excel.Range,
Cancel As Boolean)
Sheet tính toán Sub Worksheet_Calculate()
Sheet thay đ iổSub Worksheet_Change(ByVal Target As Excel.Range)
Sheet m t kích ho tấ ạ Sub Worksheet_Deactivate()
Sheet thay đ i vùng ch nổ ọ Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
Tuy nhiên ta không ph i đánh chi ti t nh ng bi n c mày. B n hãy ch n h p ch n Object r i ch n bi nả ế ữ ế ố ạ ọ ở ộ ọ ồ ọ ế
c th t c h p Procedure. Excel s t vi t cho b n ph n đ u và k t thúc th t c. B n ch vi c đánhố ủ ụ ở ộ ẽ ự ế ạ ầ ầ ế ủ ụ ạ ỉ ệ
vào trong lòng th t c ý đ nh c a mình là xong.ủ ụ ị ủ
Ngoài các th t c v bi n c Excel cũng nh các ch ng trình Office khác đ u có các Macro t đ ngủ ụ ề ế ố ư ươ ề ự ộ
th c hi n. Các Macro này, b n ch c n d t t i m t module b t kỳ. Bao g m các Macro sauự ệ ạ ỉ ầ ặ ạ ộ ấ ồ

Tên macro Công d ng ụT đ ng th c hi n khiự ộ ự ệ
Auto_Open() M t pở ệ
Auto_Exec() Vào Excel
Auto_Close() Đóng t pệ
Auto_Exit() Thoát
Auto_New() T o t p m iạ ệ ớ
Khi có bi n c thu c các lo i trên, th t c s t đ ng th c hi n.ế ố ộ ạ ủ ụ ẽ ự ộ ự ệ
Nói v nh p giá tr vào các bi n trong th t c:ề ậ ị ế ủ ụ
Cũng gi ng nh l p trình Visual Basic thu n ta th ng s d ng các ph ng pháp sau đ nh p giá trố ư ậ ầ ườ ử ụ ươ ể ậ ị
vào các bi n trong th t c nh m ph c v cho vi c x lý:ế ủ ụ ằ ụ ụ ệ ử
1. S d ng hàm nh p: (Hàm có s n Visual Basic) đ a giá tr vào bi n ử ụ ậ ẵ ở ư ị ế
Bi n_C n_l y_giá_Tr = INPUTBOX ("L i nh c","Tiêu đ l i nh c","Gía tr đ t s n")ế ầ ấ ị ờ ắ ề ờ ắ ị ặ ẵ
2. S d ng hàm h i l i (Hàm có s n Visual Basic) đ a giá tr tr l i vào bi n r i đ a bi n vàoử ụ ỏ ạ ẵ ở ư ị ả ờ ế ồ ư ế
c u trúc x lý ấ ử
Bi n_C n_l y_giá_Tr =MsgBox("L i nh c",Nút+Ki u+Ng m đ nh,"Tiêu đ ")ế ầ ấ ị ờ ắ ể ầ ị ề
3. L y giá tr t m t ô trong m t sheet b t kỳ c a Excel đ a vào bi n ấ ị ừ ộ ộ ấ ủ ư ế
Bi n_C n_l y_giá_Tr = Sheets("Tên sheet").Cells( ế ầ ấ ị hàng, c tộ)
4. L y giá tr câu móc t ch ng trình khác b ng k thu t HOOK (Bài riêng).ấ ị ừ ươ ằ ỹ ậ
5. L y giá tr t các tính ch t c a Form mà mình thi t k . ấ ị ừ ấ ủ ế ế
Bi n_C n_l y_giá_Tr = Tên_Form.Tên_Đ i_T ng.Thu c_tính_c n_l yế ầ ấ ị ố ượ ộ ầ ấ
6. L y giá tr thông qua các h p tho i có s n c a Excelấ ị ộ ạ ẵ ủ
Tên_Bi n_DiaLog = Application.Dialogs(Tên_h ng).Showế ằ
Bi n_C n_l y_giá_Tr = Tên_Bi n_DiaLog.Tên_Đôi_T ng.Thu c_tính_c n_l yế ầ ấ ị ế ượ ộ ầ ấ
Tuỳ vào giá tr c a h ng trong b ng sau mà h p tho i nào s đ c tr ng lên. B n th y có t i 200 h pị ủ ằ ả ộ ạ ẽ ượ ư ạ ấ ớ ộ
tho i c a Excel đó là ch a k đ n có nh ng h p tho i còn có đ n vài cách th hi n (Đ n x u luôn!!!).ạ ủ ư ể ế ữ ộ ạ ế ể ệ ế ỉ
Tên h p tho iộ ạ
hay tab c a h pủ ộ
tho iạH ngằTham s kèm theo đ xác l pố ể ậ
1. Kích ho tạxlDialogActivate window_text, pane_num
Font c a ôủxlDialogActiveCellFont
font, font_style, size, strikethrough, superscript,
subscript, outline, shadow, underline, color, normal,
background, start_char, char_count

