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 FocusSub Workbook_Deactivate()
Work Book thêm Sheet m iSub Workbook_NewSheet(ByVal Sh As Object)
Work Book mSub 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ánSub 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 nSub 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 đ iSub 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","Tu đ 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
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 iH ngTham s kèm theo đ xác l p
1. Kích ho txlDialogActivate 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