23
A/ T o B ng Hàm Cho Riêng B n N u b n có m t ế phép tính toán ph c t p mà b n s d ng th ng xuyên trong Excel, b n không ườ c n ph i nh p nhi u l n m t công th c dài ph c t p. Thay vào đó, b n có th t o các hàm c a ểạ riêng b n đ th c hi n các tính toán. B n có th s d ng hàm đ t o ra các công th c đ c d ểạ ượ dàng h n đ nh p và duy trì. ơ Đ t o các ểạ hàm riêng c a b n, b n làm vi c trong Microsoft Visual Basic ® cho các ng d ng (VBA). VBA- Visual Basic for Appliction là m t ngôn ng l p trình đ c xây d ng vào Excel. VBA ữậ ượ r t linh ho t và có th làm t t c m i th mà các công th c Excel có th làm, và nhi u h n th n a. ơ ế Ví d , b n có m t công th c ph c t p đ tìm hoa h ng bán hàng, n i t l ph n trăm hoa h ng ơ ỷệ thay đ i d a trên nhi u y u t nh nh ng gì các s n ph m và k t h p c a các s n ph m đ i di n ế ư ế bán hàng, cho dù các đ i di n bán hàng nh h n h n ng ch và t ng doanh s bán hàng cho quý. ơ Thay vì nh p công th c dài mà m t t t c nh ng y u t này vào tài kho n m i khi b n mu n tính ế hoa h ng đ bán, b n có th t o ra m t ểạ l nh ch c năng tùy ch nh. Sau đó, b n ph i gõ các công th c hoa h ng c a b n là tên hàm c a b n H n n a, th i gian t i công ty thay đ i các quy t c cho cách tính hoa h ng, b n không ph i tìm ơ và th c hi n thay đ i t nh t cho t t c các công th c ph c t p. B n ch c n ph i thay đ i mt ổở n i, các hàm tuỳ ch nh, đ c p nh t t t c các công th c trong b ng tính c a b n ơ Các b c sau đây cho th y làm th nào đ t o ra và s d ng m t hàm tùy ch nh. Đ ví d đn ướ ế ểạ ơ gi n, ch c năng này tính toán hoa h ng bán hàng t i m t t l đúng 6%. Đ t n d ng đ y đ các ỷệ ểậ hàm tùy ch nh, b n s thay th mã VB ph c t p h n cho tính toán t l ph n trăm đ n gi n ế ơ ỷệ ơ 1. Trên menu Tools, ch n Macro, và sau đó nh p vào Visual Basic Editor. 2. Trên menu Insert trong c a s Microsoft Visual Basic, b m vào Module. 3. Trong c a s Modulen, gõ code cho hàm c a b n. Ví d , m t hàm đ tính toán m t kho n hoa h ng bán hàng 6% có th trông nh th này: ư ế Dòng đ u tiên trong ví d trên t o ra m t hàm tên là L nh, th c hi n các tính toán c a nó v mt s ho c tham chi u trong ô. ch c năng này s d ng m t bi n, MyNum, đ l u tr s l ng ho c ế ế ểư ố ượ giá tr t các ô. Dòng th hai tính toán giá tr c a hàm l nh b ng cách nhân s ho c tham chi u trong ịừ ế ô (MyNum) b ng 0, 06 (m t hàm ph c t p h n có th có m t vài dòng mã đ th c hi n các phép ơ tính c a nó). Dòng th ba k t thúc đo n mã hàm. ế 4. Trên menu File, nh p chu t vào Close and Return to Microsoft Excel.

Ham Tu Dinh Nghia 7256

Embed Size (px)

DESCRIPTION

Lien Thanh Quyet

Citation preview

Page 1: Ham Tu Dinh Nghia 7256

A/ T o B ng Hàm Cho Riêng B nạ ả ạ

N u b n có m t ế ạ ộ phép tính toán ph c t p mà b n s d ng th ng xuyên trong Excel, b n khôngứ ạ ạ ử ụ ườ ạ c n ph i nh p nhi u l n m t công th c dài ph c t p. Thay vào đó, b n có th t o các hàm c aầ ả ậ ề ầ ộ ứ ứ ạ ạ ể ạ ủ riêng b n đ th c hi n các tính toán. B n có th s d ng hàm đ t o ra các công th c đ c dạ ể ự ệ ạ ể ử ụ ể ạ ứ ượ ễ dàng h n đ nh p và duy trì. ơ ể ậ

Đ t o các ể ạ hàm riêng c a b n, b n làm vi c trong Microsoft Visual Basic ® cho các ng d ngủ ạ ạ ệ ứ ụ (VBA). VBA- Visual Basic for Appliction là m t ngôn ng l p trình đ c xây d ng vào Excel. VBAộ ữ ậ ượ ự r t linh ho t và có th làm t t c m i th mà các công th c Excel có th làm, và nhi u h n th n a.ấ ạ ể ấ ả ọ ứ ứ ể ề ơ ế ữ

Ví d , b n có m t công th c ph c t p đ tìm hoa h ng bán hàng, n i t l ph n trăm hoa h ngụ ạ ộ ứ ứ ạ ể ồ ơ ỷ ệ ầ ồ thay đ i d a trên nhi u y u t nh nh ng gì các s n ph m và k t h p c a các s n ph m đ i di nổ ự ề ế ố ư ữ ả ẩ ế ợ ủ ả ẩ ạ ệ bán hàng, cho dù các đ i di n bán hàng nh h n h n ng ch và t ng doanh s bán hàng cho quý.ạ ệ ỏ ơ ạ ạ ổ ố Thay vì nh p công th c dài mà m t t t c nh ng y u t này vào tài kho n m i khi b n mu n tínhậ ứ ấ ấ ả ữ ế ố ả ỗ ạ ố hoa h ng đ bán, b n có th t o ra m t ồ ể ạ ể ạ ộ l nh ch c năng tùy ch nh.ệ ứ ỉ

Sau đó, b n ph i gõ các công th c hoa h ng c a b n là tên hàm c a b nạ ả ứ ồ ủ ạ ủ ạ

H n n a, th i gian t i công ty thay đ i các quy t c cho cách tính hoa h ng, b n không ph i tìmơ ữ ờ ớ ổ ắ ồ ạ ả và th c hi n thay đ i t nh t cho t t c các công th c ph c t p. B n ch c n ph i thay đ i m tự ệ ổ ẻ ạ ấ ả ứ ứ ạ ạ ỉ ầ ả ổ ở ộ n i, các hàm tuỳ ch nh, đ c p nh t t t c các công th c trong b ng tính c a b nơ ỉ ể ậ ậ ấ ả ứ ả ủ ạ

Các b c sau đây cho th y làm th nào đ t o ra và s d ng m t hàm tùy ch nh. Đ ví d đ nướ ấ ế ể ạ ử ụ ộ ỉ ể ụ ơ gi n, ch c năng này tính toán hoa h ng bán hàng t i m t t l đúng 6%. Đ t n d ng đ y đ cácả ứ ồ ạ ộ ỷ ệ ể ậ ụ ầ ủ hàm tùy ch nh,ỉ b n s thay th mã VB ph c t p h n cho tính toán t l ph n trăm đ n gi nạ ẽ ế ứ ạ ơ ỷ ệ ầ ơ ả

1. Trên menu Tools, ch n ọ Macro, và sau đó nh p vào ấ Visual Basic Editor.

2. Trên menu Insert trong c a s ử ổ Microsoft Visual Basic, b m vào ấ Module.

3. Trong c a s ử ổ Modulen, gõ code cho hàm c a b n. Ví d , m t hàm đ tính toán m t kho n hoaủ ạ ụ ộ ể ộ ả h ng bán hàng 6% có th trông nh th này:ồ ể ư ế

Dòng đ u tiên trong ví d trên t o ra m t hàm tên là L nh, th c hi n các tính toán c a nó v m tầ ụ ạ ộ ệ ự ệ ủ ề ộ s ho c tham chi u trong ô. ch c năng này s d ng m t bi n, MyNum, đ l u tr s l ng ho cố ặ ế ứ ử ụ ộ ế ể ư ữ ố ượ ặ giá tr t các ô. Dòng th hai tính toán giá tr c a hàm l nh b ng cách nhân s ho c tham chi u trongị ừ ứ ị ủ ệ ằ ố ặ ế ô (MyNum) b ng 0, 06 (m t hàm ph c t p h n có th có m t vài dòng mã đ th c hi n các phépằ ộ ứ ạ ơ ể ộ ể ự ệ tính c a nó). Dòng th ba k t thúc đo n mã hàm.ủ ứ ế ạ

4. Trên menu File, nh p chu t vào ắ ộ Close and Return to Microsoft Excel.

Page 2: Ham Tu Dinh Nghia 7256

5. Trên b ng tính, hãy s d ng hàm c a b n trong các công th c nh b n s làm b t kỳ hàmả ử ụ ủ ạ ứ ư ạ ẽ ở ấ tính nào. Ví d , b n có th s d ng hàm l nh đ tính hoa h ng trên doanh s bán hàng:ụ ạ ể ử ụ ệ ể ồ ố

M t hàm mà b n t o ra theo cách này có th ch đ s d ng trong m t b ng tính mà b n t o raộ ạ ạ ể ỉ ể ử ụ ộ ả ạ ạ nó. N u b n mu n s d ng hàm khác, b n có th sao chép mã cho hàm VBA module trong b ng tínhế ạ ố ử ụ ạ ể ả khác, ho c, n u b n là m t chuyên viên thi t k , b n có th sao chép các hàm vào m t b ng tínhặ ế ạ ộ ế ế ạ ể ộ ả đ c s d ng nh m t th vi n hàm và biên so n b ng tính nh là m t ch ng trình b xung.ượ ử ụ ư ộ ư ệ ạ ả ư ộ ươ ổ

L u ý ư

Ví d trong bài vi t này r t đ n gi n đ cho b n th y nh ng đi u c b n. Đ t o các hàm ph cụ ế ấ ơ ả ể ạ ấ ữ ề ơ ả ể ạ ứ t p trong VBA, b n s c n m t s ki n th c v các m u đ i t ng VBA trong Excel 2000, các c uạ ạ ẽ ầ ộ ố ế ứ ề ẫ ố ượ ấ trúc ngôn ng VB, và môi tr ng VBA. Ví d , b n mu n khai báo đ i s và tr l i ki u d li uữ ườ ụ ạ ố ố ố ả ạ ể ữ ệ trong b t kỳ hàm b n t o ra. Đ b t đ u h c v l p trình trong VBA, xem các tài li u tham kh oấ ạ ạ ể ắ ầ ọ ề ậ ệ ả d i đây.ướ

Xem Thêm Thông Tin Đ bi t thêm thông tin v vi c t o công th c bao g m các hàm, ch c năng nh p công th c trongể ế ề ệ ạ ứ ồ ứ ậ ứ

Office Assistant ho c ặ trên tab Answer Wizard trong c a s Tr giúp c a Excel, và sau đó nh nử ổ ợ ủ ấ Search.

Đ bi t thông tin v vi c t o các hàm tùy ch nh trong VBA, gõ quy trình hàm trong Officeể ế ề ệ ạ ỉ Assistant hay trên tab Answer Wizard trong c a s tr giúp c a Excel Visual Basic, nh p vào tìmử ổ ợ ủ ấ ki m- Search, và sau đó nh p vào ch đ "Vi t m t quy trình t o hàm" và "Câu L nh Hàm." ế ấ ủ ề ế ộ ạ ệ

N u b n ch a quen v i l p trình VBA, thì H ng d n c a tr ng trình Microsoft Officeế ạ ư ớ ậ ướ ẫ ủ ươ 2000/Visual Basic có thông tin đ giúp b n t b c đ u. Đ bi t thông tin làm th nào đ có đ cể ạ ừ ướ ầ ể ế ế ể ượ h ng d n này, b n gõ dòng ch ướ ẫ ạ ữ programmer’s guide-(ch ng trình h ng d n) trong Officeươ ướ ẫ Assistant ho c trên tab ặ Answer Wizard trong c a s tr giúp, sau đó nh n ử ổ ợ ấ Search.

CÁCH T O HÀM USER DEFINED TRONG EXCELLẠ1. M m t workbook m i. ở ộ ớ

2. Vào VBA (Nh n ấ Alt + F11)

Page 3: Ham Tu Dinh Nghia 7256

3. Chèn m t module m i (ộ ớ Insert> Module)

4. Copy và Paste ví d hàm user defined trong excel ụ

5. Thoát kh i VBA (Nh n ỏ ấ Alt + Q)

6. S d ng hàm (nó s xu t hi n trong h p tho i Paste Function, ử ụ ẽ ấ ệ ộ ạ Shift + F3, theo th lo i “Userể ạ Defined ")

N u b n mu n s d ng m t UDF (Universal Disk Format) nhi u h n m t workbook, b n cóế ạ ố ử ụ ộ ở ề ơ ộ ạ th l u các hàm c a b n trong ph n b xung tùy ch nh c a riêng b n. Đ n gi n ch c n l u fileể ư ủ ạ ầ ổ ỉ ủ ạ ơ ả ỉ ầ ư excel c a b n có ch a VBA c a b n có hàm nh m t file b xung (có đuôi .xla).. Sau đó nh p ph nủ ạ ứ ủ ạ ư ộ ổ ậ ầ b xung (ổ Tools> Add-Ins ...). C nh báo! Hãy c n th n v cách s d ng hàm tùy ch nh trong b ngả ẩ ậ ề ử ụ ỉ ả tính mà b n c n ph i chia s v i ng i khác. N u h không có ph n b xung c a b n thì các hàmạ ầ ả ẻ ớ ườ ế ọ ầ ổ ủ ạ s không ho t đ ng khi h s d ng các b ng tính.ẽ ạ ộ ọ ử ụ ả

L I ÍCH C A HÀM USER DEFINEDỢ Ủ

T o m t hàm ạ ộ toán h c tùy ch nh ho c ph c t p.ọ ỉ ặ ứ ạ

Đ n gi n hóa công th c mà n u không s r t dài "ơ ả ứ ế ẽ ấ công th c l nứ ớ "

Ch n đoánẩ nh vi c ki m tra đ nh d ng ô.ư ệ ể ị ạ

Tùy ch nh ỉ thao tác text-văn b n. ả

Công th c ma tr nứ ậ nâng cao và hàm ma tr n.ậ

GI I H N C A UDFỚ Ạ Ủ

• Không th "ghi" m t UDF Excelể ộ nh ghi m t macro Excel. ư ộ

• Thêm h n ch h n so v i macro VBA thông th ng. UDF ạ ế ơ ớ ườ không th thay đ i c u trúc ho cể ổ ấ ặ đ nh d ngị ạ c a m t b ng tính ho c ô tính. ủ ộ ả ặ

• N u b n g i (l nh g i) m t hàm khác hay macro t m t UDF, các macro đó có m c h n chế ạ ọ ệ ọ ộ ừ ộ ứ ạ ế t ng t th p h n UDF. ươ ự ấ ơ

• Không th đ t m t giá tr trong ô tính ngo i tr ô (ho c vùng) đó có ch a công th c. ể ặ ộ ị ạ ừ ặ ứ ứ Nói cách khác, gi i h n c a UDF có ớ ạ ủ nghĩa là đ đ c s d ng nh "công th cể ượ ử ụ ư ứ ", không nh t thi t ph i làấ ế ả "macro".

• Hàm user defined excel trong VBA th ng ườ ch m h n nhi uậ ơ ề so v i hàm biên so n trong C + +ớ ạ ho c FORTRAN (ngôn ng l p trình b c cao……) ặ ữ ậ ậ

• Th ng khó khăn đ theo dõi l i. ườ ể ỗ

• N u b n t o m t ph n b xung có ch a gi i h n UDF c a b n, b n có th quên r ng b n đãế ạ ạ ộ ầ ổ ứ ớ ạ ủ ạ ạ ể ằ ạ s d ng m t hàm tùy ch nh, làm gi m kh năng chia s c a file. ử ụ ộ ỉ ả ả ẻ ủ

Thêm các hàm user defined cho workbook c a b n s ủ ạ ẽ kích ho t c hi u "macroạ ờ ệ " (th c hi nự ệ v n đ b o m t trong: Tools> Macros> Security...).ấ ề ả ậ

VÍ D V HÀM USER DEFINEDỤ Ề

Page 4: Ham Tu Dinh Nghia 7256

Ví d 1: T o đ a ch đ n m t đ ng liên k tụ ạ ị ỉ ế ộ ườ ế

Ví d sau có th h u ích khi gi i nén siêu liên k t t b ng ho c đ ng link đã đ c sao chépụ ể ữ ả ế ừ ả ặ ườ ượ vào Excel, khi làm ph n x lý cu i cùng trên các truy v n web Excel, ho c nh n đ c đ a ch emailầ ử ố ấ ặ ậ ượ ị ỉ t danh sách các siêu liên k t “mailto” ừ ế

Hàm này cũng là m t ví d v cách s d ng ộ ụ ề ử ụ đ i s UDF Excel tùy ch nố ố ọ . Cú pháp cho hàm tùy ch nh Excel này là:ỉ

=LinkAddress(cell,[default_value])

Đ xem m t ví d v cách làm vi c v i ể ộ ụ ề ệ ớ đ i s tùy ch nố ố ọ , tìm ki m l nh ế ệ IsMissing trong các t p tin tr giúp c a Excel VBA (nh n F1).ậ ợ ủ ấ

Function LinkAddress(cell As range, _

Optional default_value As Variant)

'Lists the Hyperlink Address for a Given Cell

'If cell does not contain a hyperlink, return default_value

If (cell.range("A1").Hyperlinks.Count <> 1) Then

LinkAddress = default_value

Else

LinkAddress = cell.range("A1").Hyperlinks(1).Address

End If

End Function

Ví d 2:ụ Gi i nén các ph n t th N t m t Chu i ký tả ầ ử ứ ừ ộ ỗ ự

Ví d này cho th y làm th nào đ t n d ng l i th c a m t s hàm có s n trong VBA đ làmụ ấ ế ể ậ ụ ợ ế ủ ộ ố ẵ ể m t s thao tác văn b n hoàn ch nh. Đi u gì n u b n đã có m t chu i s đi n tho i đ nh d ng sau:ộ ố ả ỉ ề ế ạ ộ ỗ ố ệ ạ ị ạ 1-800-999-9999 và b n mu n l y ra ạ ố ấ ch ỉ 3 ký s đ u tiên? ố ầ

UDF này l y các đ i s nh l y chu i văn b n, s l ng các ph n t mà b n mu n l y (n), vàấ ố ố ư ấ ỗ ả ố ượ ầ ử ạ ố ấ d u phân cách nh m t ký t (ví d "-"). Cú pháp c a ví d v hàm user defined trong Excel là:ấ ư ộ ự ụ ủ ụ ề

=GetElement(text,n,delimiter)

Ví dụ: N u c t B3 ch a dãy s "1-800-333-4444" và c t C3 ch a công th cế ộ ứ ố ộ ứ ứ =GetElement(B3,3,"-") thì c t C3 s cho ra k t qu là “333”. Đ đ a “333” v d ng s ta nên sộ ẽ ế ả ể ư ề ạ ố ử d ng =VALUE(GetElement(B3,3,"-")).ụ

Function GetElement(text As Variant, n As Integer, _

delimiter As String) As String

Page 5: Ham Tu Dinh Nghia 7256

'Returns the nth element from a delimited text string

Dim txt, str As String

Dim count, i As Integer

'Manipulate a copy of the text string

txt = text

'If a space is used as the delimiter, remove extra spaces

If delimiter = Chr(32) Then txt = Application.Trim(txt)

'Add a delimiter to the end of the string

If Right(txt, Len(txt)) <> delimiter Then

txt = txt & delimiter

End If

'Initialize count and element

count = 0

str = ""

'Get each element

For i = 1 To Len(txt)

If Mid(txt, i, 1) = delimiter Then

count = count + 1

If count = n Then

GetElement = str

Exit Function

Else

str = ""

End If

Else

str = str & Mid(txt, i, 1)

End If

Next i

Page 6: Ham Tu Dinh Nghia 7256

GetElement = ""

End Function

Ví d 3: UDF cho m t Công th c Toán Tùy Ch nhụ ộ ứ ỉ

M t trong nh ng đi u thú v v tuỳ ch nh các hàm Excel là b n có th đ n gi n hóa các côngộ ữ ề ị ề ỉ ạ ể ơ ả th c Excel mà n u không s s d ng l ng nhau câu l nh N u ... thì .... Ví d , gi s chúng ta cóứ ế ẽ ử ụ ồ ệ ế ụ ả ử m t hàm đ n gi n, bao g m phép chia, nh ng ộ ơ ả ồ ư công th c thay đ i khi s chia là s 0ứ ổ ố ố . T ng t ,ươ ự chúng ta mu n làm m t s ki m tra l i, vì v y chúng ta không k t thúc v i ố ộ ố ể ỗ ậ ế ớ # VALUE trên t t c cácấ ả b ng tính c a chúng ta. Đ i v i ví d này, chúng ta s xem xét các công th c KEI (ả ủ ố ớ ụ ẽ ứ Keyword Effectiveness Index m c l c hi u ng c a t khóa), mà khi m t cái gì đó trông đ n gi n nh thụ ụ ệ ứ ủ ừ ộ ơ ả ư ế này khi s d ng tích h p hàm Excel:ử ụ ợ

IF(supply=0,demand^2,demand^2/supply)

Cú pháp cho hàm user defined là:

=KEI(demand,supply,[default_value])

Function KEI(demand As Variant, supply As Variant, _

Optional default_value As Variant) As Variant

'Keyword Effectiveness Index (KEI)

If IsMissing(default_value) Then

default_value = "n/a"

End If

If IsNumeric(demand) And IsNumeric(supply) Then

If supply = 0 Then

KEI = demand ^ 2

Exit Function

Else

KEI = demand ^ 2 / supply

Exit Function

End If

End If

KEI = default_value

End Function

B / Xây d ng m t Excel Add-In (ự ộ ph n b xung cho Hàm Excelầ ổ )

Gi i thi u v Add-Ins ớ ệ ề

Page 7: Ham Tu Dinh Nghia 7256

M t Excel Add-in là m t t p tin (th ng có đuôi m r ng là .ộ ộ ậ ườ ở ộ xla ho c ặ .xll) mà Excel có th nh pể ậ vào khi nó kh i đ ng. Các t p tin có ch a mã (VBA trong tr ng h p ph n đuôi m r ng là .ở ộ ậ ứ ườ ợ ầ ở ộ xla) mà có thêm hàm b xung cho Excel, th ng d ng các hàm m i. ổ ườ ở ạ ớ

Add-Ins cung c p m t ph ng pháp t i u v gia tăng s c m nh c a Excel và chúng là nh ngấ ộ ươ ố ư ề ứ ạ ủ ữ ph ng ti n lý t ng đ phân lo i các hàm tùy ch nh c a b n. Excel đ c g n v i m t tr ng tháiươ ệ ưở ể ạ ỉ ủ ạ ượ ắ ớ ộ ạ khác c a Add-Ins s n sàng cho b n nh p li u và b t đ u s d ng, và nhi u Add-Ins th ba có s n.ủ ẵ ạ ậ ệ ắ ầ ử ụ ề ứ ẵ

Bài vi t này cho b n th y làm th nào đ vi t m t hàm tùy ch nh b ng cách s d ng Excel VBAế ạ ấ ế ể ế ộ ỉ ằ ử ụ và làm th nào đ l u và cài đ t nó nh là m t Add-In. Các hàm tùy ch nh th ng đ c g i là UDFsế ể ư ặ ư ộ ỉ ườ ượ ọ (User Defined Functions – các hàm xác đ nh đ i t ng s d ng). N u b n ch a bao gi xây d ngị ố ượ ử ụ ế ạ ư ờ ự m t UDF tr c đây thì đây là m t n i t t đ b n b t đ u, ho c b n mu n xem h ng d n ộ ướ ộ ơ ố ể ạ ắ ầ ặ ạ ố ướ ẫ Cách vi t hàm VBA c b n trong Excelế ơ ả là ph n gi i thích c th v i nh ng ví d khác n a. ầ ả ụ ể ớ ữ ụ ữ

Trong Excel h ng d n, ướ ẫ Tính toán tu i c a m t ng iổ ủ ộ ườ - Gi i thi u v câu l nh v i hàm IF l ngớ ệ ề ệ ớ ồ (dùng nhi u hàm IF trong m t câu l nh)ề ộ ệ tôi trình bày cách s d ng câu l nh IF đ tính toán tu i c aử ụ ệ ể ổ ủ m t ai đó t ngày sinh c a h . Th t ng c nhiên, Excel không có s n hàm cho m t yêu c u mang tínhộ ừ ủ ọ ậ ạ ẵ ộ ầ ph bi n này, vì v y nó-UDF là m t ng viên lý t ng cho m t ch c năng tùy ch nh. ổ ế ậ ộ ứ ưở ộ ứ ỉ

N u b n đã yên tâm v i ch c năng-hàm tùy ch nh b ng văn b n, b n có th đi th ng vào ph nế ạ ớ ứ ỉ ằ ả ạ ể ẳ ầ gi i thích làm th nào đ l u UDFs c a b n nh là m t Add-In. [ả ế ể ư ủ ạ ư ộ xem ti p ph n Add-Inế ầ ]

Th c hành vi t Hàmự ế

M t Add-In có th ch a nhi u UDFs nh b n mu n, và b n có th thêm nhi u h n ch đ n gi nộ ể ứ ề ư ạ ố ạ ể ề ơ ỉ ơ ả b ng cách m và ch nh s a các file Add-In. ằ ở ỉ ử

B c 1: Thêm/chèn m t Mã Module cho m t Workbookướ ộ ộ

Kh i đ ng Excel ho c, n u b n đã có Excel m , hãy t o m t b ng tính m i (r ng):ở ộ ặ ế ạ ở ạ ộ ả ớ ỗ

M Visual Basic Editor t ở ừ Tools> Macro> Visual Basic Editor (nh n t h p phím ấ ổ ợ ALT + F11). Trong c a s Project Explorer ch n ử ổ ọ VBAProject (Book1). S l a ch n này s cho ra m t workbookự ự ọ ẽ ộ tr ng.ố

N u b n đã đ c làm vi c trong Excel v i m t cái tên khác – hãy ki m tra tên trong thanh tiêuế ạ ượ ệ ớ ộ ể đ c a c a s Excel n u b n không ch c ch n. N u Project Explorer không hi n th thì hãy m nóề ủ ử ổ ế ạ ắ ắ ế ể ị ở b ng cách vào ằ View> Project Explorer Module.

Page 8: Ham Tu Dinh Nghia 7256

T ừ menu Insert ch n ọ Module. Thao tác này đã thêm m t mã module r ng cho b ng tính đ cộ ỗ ả ượ ch n. B n cũng s th y module xu t hi n trong c a s Project Explorer.ọ ạ ẽ ấ ấ ệ ử ổ

B c 2: Nh p Mã ướ ậ

Trong c a s mã hãy gõ dòng... ử ổ

Function Age(DoB As Date)

…và nh n ENTER. Các trình so n th o VB t đ ng đi nh p dòng "End Function" (ấ ạ ả ự ộ ậ k t thúc hàmế ) và đ t con tr c a b n trong kho ng tr ng gi a chúng (ặ ỏ ủ ạ ả ố ữ gi a dòng l nh và dòng End Functionữ ệ ).

Khi b n gõ ch “Function” là đ xác đ nh các mã đ c vi t ti p theo cũng là 1 hàm, trái ng cạ ữ ể ị ượ ế ế ượ v i m t macro hay m t ớ ộ ộ th ng trình con (subroutine)ườ , đ c bi u th b ng ch “Sub”.ượ ể ị ằ ữ

Ti p theo là tên c a hàm, b n có th đ t b ng b t c tên gì mà b n thích. Nh ng hãy đ t tênế ủ ạ ể ặ ằ ấ ứ ạ ư ặ hàm đ n gi n và d di n t . Không cho phép có kho ng tr ng gi a ch và d u g ch chân (ví dơ ả ễ ễ ả ả ố ữ ữ ấ ạ ụ Age_in_years) ho c, t t h n là, v i ch vi t hoa (ví d AgeInYears).ặ ố ơ ớ ữ ế ụ

M t hàm thông th ng c n m t ho c nhi u "đ i s ". chúng đ c đ a vào trong d u ngo c sauộ ườ ầ ộ ặ ề ố ố ượ ư ấ ặ tên hàm. M t đ i s là m t ph n thông tin mà hàm s d ng đ th c hi n các phép tính c a nó. Khiộ ố ố ộ ầ ử ụ ể ự ệ ủ trình bày các đ i s nó là s th c hành t t đ xác đ nh lo i d li u. Trong tr ng h p này ch cóố ố ự ự ố ể ị ạ ữ ệ ườ ợ ỉ m t đ i s là c n thi t, ngày sinh s đ c s d ng đ tính toán tu i c a ng i đó. Đ đ n gi nộ ố ố ầ ế ẽ ượ ử ụ ể ổ ủ ườ ể ơ ả h n, tôi đã g i là đ i s này là "DoB". Các đ i s ho t đ ng gi ng nh các bi n trong các macro.ơ ọ ố ố ố ố ạ ộ ố ư ế Khi b n gõ t "As" sau tên c a đ i s thì trình so n th o VB s hi n th cho b n m t danh sách cóạ ừ ủ ố ố ạ ả ẽ ể ị ạ ộ s n. B n có th nh p ho c ch n t danh sách.ẵ ạ ể ậ ặ ọ ừ

Gi a dòng l nh hàm và câu khai báo End Function (k t thúc hàm), b m TAB (đ đo n mã ti pữ ệ ế ấ ể ạ ế theo th t đ u dòng cho rõ ràng, d nhìn) và gõ dòng...ụ ầ ễ

Page 9: Ham Tu Dinh Nghia 7256

Age = Int((Date - DoB) / 365.25)

Đi u này cho bi t cách vi t hàm trong Excel. Nó s d ng hai hàm có s n, hàm INT (là hàm đề ế ế ử ụ ẵ ể l y m t dãy s - ho c s nguyên – s ngoài k t qu ) và hàm DATE (m t hàm Visual basic t ngấ ộ ố ặ ố ố ế ả ộ ươ đ ng v i hàm TODAY trong excel là hàm tr v ươ ớ ả ề ngày hi n t i). ệ ạ

Câu l nh đó đ c đ c là… "L y ngày hi n t i tr đi ngày sinh. Chia k t qu đó cho 365,25 vàệ ượ ọ ấ ệ ạ ừ ế ả hi n th các đáp án nh là m t s nguyên b ng cách làm tròn xu ng." ể ị ư ộ ố ằ ố

Hàm đ c hoàn t t hi n th nh th này:ượ ấ ể ị ư ế

Function Age(DoB As Date)

Age = Int((Date - DoB) / 365.25)

End Function

B c 3: Ki m tra Hàm ướ ể

B n có th ki m tra hàm ngay l p t c. Chuy n sang Excel trong m t b ng tính m i (m t b ngạ ể ể ậ ứ ể ộ ả ớ ộ ả tính t ng t mà b n đang s d ng đ t o ra mã module c a hàm) nh p m t ngày vào ô tính. Trongươ ự ạ ử ụ ể ạ ủ ậ ộ 1 ô khác nh p vào hàm c a b n, cách nh p t ng t nh b n nh p hàm có s n c a Excel, ví dậ ủ ạ ậ ươ ự ư ạ ậ ẵ ủ ụ nh = Age (A1) ư

M t UDF có giá tr đ m các b ng tính b t c khi nào b ng tính ch (b ng tính có ch a cácộ ị ể ở ả ấ ứ ả ủ ả ứ module code c a UDF) đ c m . Tuy nhiên, n u b n c g ng s d ng hàm trong m t b ng tínhủ ượ ở ế ạ ố ắ ử ụ ộ ả khác thì b n có th g p ph i tr c tr c...ạ ể ặ ả ụ ặ

Các b ng tính khác không th tìm th y hàm mà b n t o nên xu t hi n báo l i ả ể ấ ạ ạ ấ ệ ỗ # NAME? Để tránh đi u này x y ra b n có th thêm tên b ng tính c a máy ch (book1) vào hàm đ Excel bi tề ả ạ ể ả ủ ủ ể ế đ c n i tìm th y hàm...ượ ơ ấ

Page 10: Ham Tu Dinh Nghia 7256

Cách này v n cho ra k t qu nh ng r t phi n hà và ch ng minh m t trong nh ng lý do gi i thíchẫ ế ả ư ấ ề ứ ộ ữ ả t i sao n i t t nh t cho các hàm tùy ch nh c a b n là bên trong m t Excel Add-In (v i m t s ngo iạ ơ ố ấ ỉ ủ ạ ộ ớ ộ ố ạ l ... ệ xem thêm t i ạ http://www.fontstuff.com/vba/vbatut03.htm#caution#caution.)

Thêm tính năng cho hàm

Cho phép cho Thi u d li uế ữ ệ

M t đi u b t l i c a nhi u hàm là khi b n chu n b m t b ng tính tr c khi nh n d li u c aộ ề ấ ợ ủ ề ạ ẩ ị ộ ả ướ ậ ữ ệ ủ nó (ví d nh trong m t m u mà b n mu n các hàm đ c đ t v trí s n sàng đ tính d li uụ ư ộ ẫ ạ ố ượ ặ ở ị ẵ ể ữ ệ nh p vào c a ng i dùng) các hàm c g ng đ tính toán các ô tr ng, th ng báo l i hay k t qu vôậ ủ ườ ố ắ ể ố ườ ỗ ế ả nghĩa. N u hàm ế Age c a chúng ta tính toán m t ô tr ng v n t o ra m t k t qu , trong tr ng h pủ ộ ố ẫ ạ ộ ế ả ườ ợ này là 102 (năm hi n t i là 2002). Đi u này x y ra b i vì nó có giá tr c a ô tr ng là 0, và di n gi iệ ạ ề ả ở ị ủ ố ễ ả s 0 nh là ngày 0 tháng m t năm 1900. Đi u này là h p lý v i Excel vì ngày đ u tiên nó bi t làố ư ộ ề ợ ớ ầ ế ngày 1, tháng m t năm 1900.ộ

Thông th ng b n s c g ng đ d đoán hàm này b ng cách nh p vào tu i c a b n nh làườ ạ ẽ ố ắ ể ự ằ ậ ổ ủ ạ ư m t ph n c a câu l nh hàm IF. Ví d = ộ ầ ủ ệ ụ IF (ISBLANK (A1 ),"", age (A1)) Câu l nh IF cho bi tệ ế Excel dùng đ nh p m t giá tr c a "con s 0" (đ c đ i di n b i "") n u ô d li u là tr ng nh ngể ậ ộ ị ủ ố ượ ạ ệ ở ế ữ ệ ố ư đ tính toán hàm ể Age n u nó ch a m t giá tr ...ế ứ ộ ị

Đi u này làm vi c t t, nh ng b n có th tránh cho mình nh ng r c r i b ng vi c k t h p x lýề ệ ố ư ạ ể ữ ắ ố ằ ệ ế ợ ử s c lo i này vào trong mã c a chính hàm đó.ự ố ạ ủ

S a đ i hàm các mã nh sau:ử ổ ư

Function Age(DoB As Date)

If DoB = 0 Then

Age = ""

Else

Age = Int((Date - DoB) / 365.25)

Page 11: Ham Tu Dinh Nghia 7256

End If

End Function

Ngoài ra m t thông báo l i tùy ch nh có th bao g m cách thay th các c p d u ngo c kép trongộ ỗ ỉ ể ồ ế ặ ấ ặ code dòng 3 v i m t thông báo trong d u ngo c kép, ví d nh Age = "Không ngày sinh". K t quở ớ ộ ấ ặ ụ ư ế ả s đ c...ẽ ượ

Tăng thêm đ chính xác cho hàmộ

Phép tính đ c s d ng trong ví d trên là r t chính xác, nh ng không hoàn toàn chính xác. Nóượ ử ụ ụ ấ ư ho t đ ng trên nguyên t c có s m t trung bình là 365,25 ngày trong m t năm (th ng là 365 ngàyạ ộ ắ ố ộ ộ ườ nh ng là 366 ngày m i 4 năm) vì v y chia tu i c a ng i v i ngày là 365,25 thì nên cho tu i c a hư ỗ ậ ổ ủ ườ ớ ổ ủ ọ vào trong nhi u năm.ề

Các ho t đ ng này g n nh n m i lúc nh ng cũng có l i dù r t hi m. N u ng i đó có ngàyạ ộ ầ ư ổ ọ ư ỗ ấ ế ế ườ sinh nh t là ngày hôm nay và đ c sinh ra vào m t năm là b i s c a 4 năm tr c thì k t qu tínhậ ượ ộ ộ ố ủ ướ ế ả s cho ra là 1 năm. M t kh năng nh , nh ng n u chúng ta s làm đi u đó chúng ta cũng có th làmẽ ộ ả ỏ ư ế ẽ ề ể đi u đó đúng!ề

Trong h ng d n ướ ẫ Tính toán tu i c a m t ng iổ ủ ộ ườ - Gi i thi u v câu l nh v i hàm IF l ngớ ệ ề ệ ớ ồ tôi trình bày cách dùng câu l nh IF trong Excel đ tính tu i c a m t ai đó t ngày sinh c a h v i đệ ể ổ ủ ộ ừ ủ ọ ớ ộ chính xác hoàn toàn. Tôi có th làm nh v y trong VBA cho hàm tùy ch nh c a mình (m c dù cúể ư ậ ỉ ủ ặ pháp c a m t câu l nh VBA IF là h i khác nhau trong Excel) nh ng tôi thích s d ng m t câu l nhủ ộ ệ ơ ư ử ụ ộ ệ CASE h n. Excel không có câu l nh CASE nh ng VBA thì có. Tôi th y câu l nh CASE d tính h nơ ệ ư ấ ệ ễ ơ câu l nh IF đ tính toán khi s logic là h i ph c t p. ệ ể ự ơ ứ ạ

Sau đây là mã cho hàm c i ti n c a tôi:ả ế ủ

Function Age(DoB As Date)

If DoB = 0 Then

Age = "No Birthdate"

Else

Select Case Month(Date)

Case Is < Month(DoB)

Age = Year(Date) - Year(DoB) - 1

Case Is = Month(DoB)

Page 12: Ham Tu Dinh Nghia 7256

If Day(Date) >= Day(DoB) Then

Age = Year(Date) - Year(DoB)

Else

Age = Year(Date) - Year(DoB) - 1

End If

Case Is > Month(DoB)

Age = Year(Date) - Year(DoB)

End Select

End If

End Function

M O: Ch n dòng mã trong ô màu xám trên, sao chép chúng (nh n phím kép: CTRL + C) và dánẸ ọ ở ấ tr c ti p vào c a s code VBA c a b n (nh n phím kép: CTRL + V).ự ế ử ổ ủ ạ ấ

Cách th c hi n codeự ệ

Hàm Age(DoB As Date) date of birth Đ t tên cho hàm và hi n th m tặ ể ị ộ tham s đ n mà b t bu c ph i có ngàyố ơ ắ ộ ả tháng năm

If DoB = 0 Then Age = "No Birthdate"

M t câu l nh IF đ xác đ nh trong ôộ ệ ể ị d li u có giá tr hay ko. Giá tr c aữ ệ ị ị ủ m t ô r ng đ c xem là 0. N u đi uộ ỗ ượ ế ề đó là đúng thì hàm tr v thông báoả ề "Không Ngày sinh".

Else Select Case Month(Date)

N u ô d li u là r ng thì hãy xemế ữ ệ ỗ nh tháng đó là ngày hôm nayư

Case Is < Month(DoB) Age = Year(Date) - Year(DoB) - 1

N u tháng c a ngày hôm nay nhế ủ ỏ h n tháng c a ngày sinh thì ch c ch nơ ủ ắ ắ h ph i có ngày sinh, vì v y tu i c aọ ả ậ ổ ủ h đ c tính là năm nay tr đi năm sinhọ ượ ừ và tr thêm 1ừ

Case Is = Month(DoB) N u tháng c a ngày hôm nay trùngế ủ v i tháng c a năm sinh thì chúng ta c nớ ủ ầ bi t h có ngày sinh hay không, vìế ọ v y…ậ

Page 13: Ham Tu Dinh Nghia 7256

If Day(Date) >= Day(DoB) Then

Age = Year(Date) - Year(DoB)

N u ngày hôm nay trùng v i ngàyế ớ sinh nh t c a h thì tu i c a h s tínhậ ủ ọ ổ ủ ọ ẽ là năm nay tr đi năm sinh…ừ

Else

Age = Year(Date) - Year(DoB) - 1

End If

… nói m t cách khác, h ph i cóộ ọ ả ngày sinh nh t, do đó tu i c a h là l yậ ổ ủ ọ ấ năm nay tr đi năm sinh và tr đi 1ừ ừ

Case Is > Month(DoB)

Age = Year(Date) - Year(DoB)

N u tháng c a ngày hôm nay l nế ủ ớ h n tháng c a ngày sinh, thì tu i c aơ ủ ổ ủ h s b ng năm nay tr đi năm sinhọ ẽ ằ ừ

End Select

End If

End Function

Đóng câu l nh CASE, câu l nh IFệ ệ và hàm

Cách tính này có th có v khá ph c t p nh ng b n ch ph i nh p nó m t l n! Khi b n đã t o raể ẻ ứ ạ ư ạ ỉ ả ậ ộ ầ ạ ạ hàm c a mình thì khi làm vi c b n s nh p tên hàm mà b n đã đ tủ ệ ạ ẽ ậ ạ ặ

T o Ph n B Xung Cho Hàm Trong Excel – Add-Inạ ầ ổB c 1: Thêm m t mô t cho hàm.ướ ộ ả

Khi m t hàm đ c đ a vào các h ng d n hàm (ví d nh công c dán Hàm) ng i dùng th yộ ượ ư ướ ẫ ụ ư ụ ườ ấ m t mô t v hàm giúp h l a ch n nh ng đi u đúng. Đây không ph i là tr ng h p v i hàm tùyộ ả ề ọ ự ọ ữ ề ả ườ ợ ớ ch nh [nh n Ctrl+click vào hình nh d i đây đ xem m t hình nh v i kích c đ y đ ]...ỉ ấ ỏ ướ ể ộ ả ớ ỡ ầ ủ

N u b n mu n có ph n mô t b n thì b n ph i t thêm nó vào. Đây là cách th c hi n ... ế ạ ố ầ ả ạ ạ ả ự ự ệ

Vào Tools> Macro> Macros đ m h p tho i ể ở ộ ạ Macro. B n s th y t t c các ạ ẽ ấ ấ ả macro có s nẵ đ c li t kê nh ng không có ch c năng tùy ch nh. Trong ph n ượ ệ ư ứ ỉ ầ Macro name: b n gõ tên hàm b nạ ạ mu n mô t vào h p văn b nố ả ộ ả

Page 14: Ham Tu Dinh Nghia 7256

Nh p vào nút [ấ Options] nút đ m h p tho i ể ở ộ ạ Macro Options. (N u nút Options là màu xám thìế tên hàm b n đã nh p ch a đ c công nh n. Ki m tra l i b n đã gõ đúng hay ch a ) ạ ậ ư ượ ậ ể ạ ạ ư

Nh p mô t cho hàm c a b n trong m c ậ ả ủ ạ ụ Description: nh p trong h p văn b n...ậ ộ ả

Nh n [ấ OK] đ đóng h p tho i Macro Options và sau đó click [ể ộ ạ Cancel] đ đóng h p tho i Macro.ể ộ ạ Mô t hi n đã đ c g n vào hàm. B n có th l p l i các quy trình này đ s a đ i các mô t n uả ệ ượ ắ ạ ể ặ ạ ể ử ổ ả ế c n. Mô t này đ c hi n th khi ch c năng tùy ch nh đ c ch n trong click Function Wizard [nh nầ ả ượ ể ị ứ ỉ ượ ọ ấ Ctrl+click vào hình nh d i đây đ xem m t hình nh v i kích c đ y đ ]...ỏ ướ ể ộ ả ớ ỡ ầ ủ

B c 2: L u Workbook nh là m t Add-Inướ ư ư ộ

Workbook ch a module code c a b n bây gi đã đ c l u nh m t file b xung cho hàm c aứ ủ ạ ờ ượ ư ư ộ ổ ủ Excel v i đuôi m r ng là (*. xla).ớ ở ộ

Trong c a s Excel vào ử ổ File> Save đ m h p tho i ể ở ộ ạ Save As. Nh p tên file b xung và s d ngậ ổ ử ụ Save as type: tùy ch n đ thay đ i lo i t p tin ọ ể ổ ạ ậ Microsoft Excel Add-In (*. xla).

Page 15: Ham Tu Dinh Nghia 7256

Tr c khi click vào [ướ OK] ki m tra v trí mà b n đang l u các file Add-In. Đi u này s khác nhauể ị ạ ư ề ẽ tùy theo đ c thù mà b n thi t l p. Các v trí trên máy tính c a tôi là: ặ ạ ế ậ ị ủ

Excel XP(2002) on Windows XP:C:\Documents and Settings\UserName\Application Data\Microsoft\AddIns

Excel 2000 on Windows 98:C:\Windows\Application Data\Microsoft\AddIns

Excel 97 on Windows 98:C:\Program Files\Microsoft Office\Office\Library

B n có th l u tr b t c n i nào b n thích, n u b n mu n nó đ c li t kê cùng v i nh ngạ ể ư ữ ấ ứ ơ ạ ế ạ ố ượ ệ ớ ữ ph n Add-In có s n thì b n nên l u nó vào đúng v trí. Excel XP và Excel 2000 t đ ng s đ a b nầ ẵ ạ ư ị ự ộ ẽ ư ạ vào th m c chính xác nh ng Excel 97 thì không.ư ụ ư

L i khuyên: Đ ki m tra v trí l u, đ u tiên cài đ t cho ph n ờ ể ể ị ư ầ ặ ầ Save as type: vào Microsoft Excel Add-In sau đó m ở Save in: danh sách th xu ng đ l đ ng d n đ n th m c l u. ả ố ể ộ ườ ẫ ế ư ụ ư

B n có th đóng b ng tính g c (Book 1). B n không c n ph i l u các thay đ i khi có thông báoạ ể ả ố ạ ầ ả ư ổ h i l u hay không.ỏ ư

B c 3: Thêm m t mô t cho các Add-In ướ ộ ả

Đó là m t ý t ng hay đ thêm m t mô t cho các Add-In. Mô t này s đ c hi n th trong h pộ ưở ể ộ ả ả ẽ ượ ể ị ộ tho i Add-Ins khi b n ch n m t Add-In đ cài đ t.ạ ạ ọ ộ ể ặ

Đ u tiên s d ng ph n qu n lý t p tin đ xác đ nh v trí file Add-In c a b n. Nh p chu t ph iầ ử ụ ầ ả ậ ể ị ị ủ ạ ấ ộ ả vào bi u t ng file và ch n ể ượ ọ Properties t menu ng c nh. Trong h p tho i thu c tính t p tin nh pừ ữ ả ộ ạ ộ ậ ấ vào tab Summary. Gõ mô t cho Add-In c a b n trong ph n ả ủ ạ ầ Comments: t i h p văn b n. N uạ ộ ả ế mu n, b n cũng có th gõ 1 tên cho Add-In c a mình trong ố ạ ể ủ Title: t i h p văn b n.ạ ộ ả Đi u này r t h uề ấ ữ ích n u b n đã l a ch n m t tên ng n ho c khó hi u cho các t p tin *.xla c a b n nh ng mu nế ạ ự ọ ộ ắ ặ ể ậ ủ ạ ư ố hi n th nhi u h n m t tên mô t trong h p tho i Add-Ins. ể ị ề ơ ộ ả ộ ạ

Cu i cùng nh n [OK] đ l u s thay đ i. Ph n Add-In c a b n đã s n sàng cho vi c cài đ t, vàố ấ ể ư ự ổ ầ ủ ạ ẵ ệ ặ có th đ c phân b cho nh ng ng i dùng khác n u có yêu c u.ể ượ ổ ữ ườ ế ầ

B c 4: Cài đ t các Add-Inướ ặ

Page 16: Ham Tu Dinh Nghia 7256

N u Excel không đ c đóng c a k t khi b n t o Add-In (ho c t khi m t ph n Add-In đ cế ượ ử ể ừ ạ ạ ặ ừ ộ ầ ượ sao chép vào c a đĩa c ng máy tính) hãy kh i đ ng l i Excel đ đ m b o r ng nó làm m i danhủ ứ ở ộ ạ ể ả ả ằ ớ sách Add-In có s n. ẵ

Vào Tools> Add-Ins đ m h p tho i ể ở ộ ạ Add-Ins. N u b n đã l u ph n Add-In c a mình v tríế ạ ư ầ ủ ở ị m c đ nh thì b n s th y tên c a nó hi n th trong Add-Ins có s n (ặ ị ạ ẽ ấ ủ ể ị ẵ Add-Ins available): trong 1 c aử s (n u b n đã l u tr Add-In c a mình trong m t th m c khác, hãy s d ng nút [ổ ế ạ ư ữ ủ ộ ư ụ ử ụ Browse] đ tìmể nó). Nh p chu t vào tên c a Add-In đ xem mô t c a nó phía d ic a h p tho i. ắ ộ ủ ể ả ủ ở ướ ủ ộ ạ

Đ cài đ t Add-In, hãy đánh d u vào h p ki m tra bên c nh tên Add-In c a b n và b m ể ặ ấ ộ ể ạ ủ ạ ấ [OK]. (nh n Ctrl+click vào hình nh d i đây đ xem m t hình nh v i kích c đ y đ )...ấ ỏ ướ ể ộ ả ớ ỡ ầ ủ

Ngay sau khi các Add-In đ c cài đ t thì ch c năng c a nó s đ c ng d ng trong Excel. Ta cóượ ặ ứ ủ ẽ ượ ứ ụ th tìm th y chúng trong ph n ể ấ ầ User Defined c a Function Wizard (Paste Function Tool) ho c chủ ặ ỉ c n gõ chúng vào m t ô nh b t c m t hàm có s n nào. Các Add-In s v n đ c cài đ t cho đ nầ ộ ư ấ ứ ộ ẵ ẽ ẫ ượ ặ ế khi b n quay l i h p tho i ạ ạ ộ ạ Add-Ins và b cài đ t nó b ng cách b đánh d u ch n t h p ki m tra.ỏ ặ ằ ỏ ấ ọ ừ ộ ể

T o B Sung và Thay Đ i m t Add-Inạ ổ ổ ộ File Add-In c a b n có th ch a nhi u module và các ch c năng tùy ch nh nh b n mu n. B nủ ạ ể ứ ề ứ ỉ ư ạ ố ạ

có th thêm chúng vào b t kỳ lúc nào. ể ấ

N u Add-In c a b n đ c cài đ t b n s th y nó đ c li t kê trong c a s ế ủ ạ ượ ặ ạ ẽ ấ ượ ệ ử ổ Project Explorer c a các trình so n th o VB (Visual Basic). Xác đ nh v trí các module có ch a các hàm c a b n vàủ ạ ả ị ị ứ ủ ạ b sung hay thay theo ý b n. N u Add-In c a b n không đ c cài đ t, hãy tìm file Add-In và kíchổ ạ ế ủ ạ ượ ặ đúp vào nó đ m nó trong Excel. B n s không th nhìn th y nó trong c a s Excel nh ng nó sể ở ạ ẽ ể ấ ử ổ ư ẽ xu t hi n trong Project Explorer c a trình so n th o VB.ấ ệ ủ ạ ả

Nh l u các thay đ i c a b n! Th c hi n đi u này t c a s trình so n th o VB ớ ư ổ ủ ạ ự ệ ề ừ ử ổ ạ ả File> Save (nh n Ctrl+click vào hình nh d i đây đ xem m t hình nh v i kích c đ y đ )ấ ỏ ướ ể ộ ả ớ ỡ ầ ủ

Page 17: Ham Tu Dinh Nghia 7256

Thêm Ghi Chú cho Code C a B nủ ạThêm ghi chú vào code VBA (Visual Basic for Application) c a b n r t đ n gi n ủ ạ ấ ơ ả (đúng cách g iọ

là "ghi chú"). Nh p m t d u nháy đ n (m t n a c a d u ngo c kép) và sau đó gõ ghi chú. D u nháyậ ộ ấ ơ ộ ử ủ ấ ặ ấ đ n đ ch ng trình biên d ch mã b qua t t c m i th theo sau nó trên cùng m t dòng nên khôngơ ể ươ ị ỏ ấ ả ọ ứ ộ đ c coi là mã th c thi và trình biên d ch không ch y nó. B t c đi u gì b n gõ sau d u nháy đ n làượ ự ị ạ ấ ứ ề ạ ấ ơ "ghi chú" và đ c hi n th b ng màu xanh lá cây trong c a s mã c a trình so n th o VB...ượ ể ị ằ ử ổ ủ ạ ả

B n có th s d ng k thu t này đ thêm ghi chú gi i thích cho mã c a b n (khi nào xem l iạ ể ử ụ ỹ ậ ể ả ủ ạ ạ m t s mã mà b n đã vi t th i gian tr c và t h i chúng có ý nghĩa gì?). ộ ố ạ ế ờ ướ ự ỏ

B n cũng có th t m th i vi t ghi chú m t s dòng mã đ chúng không ch y – đi u này h u íchạ ể ạ ờ ế ộ ố ể ạ ề ữ cho vi c ki m tra code c a b n. N u b n nghĩ r ng b n không c n m t dòng mã, đ ng xóa nó màệ ể ủ ạ ế ạ ằ ạ ầ ộ ừ hãy vi t ghi chú cho nó tr c. Sau đó ki m tra mã c a b n đ xem nó còn ho t đ ng hay không.ế ướ ể ủ ạ ể ạ ộ N u m i th đ u OK b n có th xoá dòng đó. N u mã c a b n không ch y, ch c n lo i b cácế ọ ứ ề ạ ể ế ủ ạ ạ ỉ ầ ạ ỏ d u nháy đ n và dòng code c a b n đ c ph c h i.ấ ơ ủ ạ ượ ụ ồ

B o V Code c a B n b ng M t Kh u.ả ệ ủ ạ ằ ậ ẩVBA cho phép b n b o v code c a mình b ng m t kh u, cho dù đó là mã macro sau m t b ngạ ả ệ ủ ằ ậ ẩ ộ ả

tính thông th ng hay mã mô-đun c a m t Add-In. Code đ c b o v b ng m t kh u s ngăn ch nườ ủ ộ ượ ả ệ ằ ậ ẩ ẽ ặ s xâm nh p đ xem hay ki m tra trái phép mã code c a b n nh m m c đích an ninh hay quy n tácự ậ ể ể ủ ạ ằ ụ ề gi . ả

Page 18: Ham Tu Dinh Nghia 7256

Đ b o v Add-In c a b n b ng m t kh u, xác đ nh v trí nó trong VB Editor. Kích chu t ph iể ả ệ ủ ạ ằ ậ ẩ ị ị ộ ả vào tên c a nó trong c a s ủ ử ổ Project Explorer và ch n ọ VBAProject Properties... t menu ng c nh.ừ ữ ả Trong h p tho i ộ ạ VBAProject – Project Properties nh p vào tab ấ Protection,.

Đ t m t d u ch n trong h p ki m tra ặ ộ ấ ọ ộ ể Lock project for viewing, sau đó nh p và xác nh n m tậ ậ ậ kh u c a b n. Nh n [ẩ ủ ạ ấ OK] và vào File> Save đ l u thay đ i. [Nh n Ctrl+click vào hình nh d iể ư ổ ấ ỏ ướ đây đ xem m t hình nh v i kích c đ y đ ]... ể ộ ả ớ ỡ ầ ủ

Vi c b o v m t kh u s có hi u l c t l n m Excel k ti p. B t kỳ c g ng nào đ xem cácệ ả ệ ậ ẩ ẽ ệ ự ừ ầ ở ế ế ấ ố ắ ể mã Add-In thì module s xu t hi n m t b ng yêu c u nh p m t kh u...ẽ ấ ệ ộ ả ầ ậ ậ ẩ

Gán Macros Add-In vào Nút Thanh Công C Tùy Ch nh và các M c Menu.ụ ỉ ụCác Add-Ins không ch dùng đ ch a các hàm mà chúng còn có th ch a các macro h u ích. B nỉ ể ứ ể ứ ữ ạ

có th gán m t macro đ c ch a trong m t Add-In cho m t nút thanh công c tùy ch nh hay m cể ộ ượ ứ ộ ộ ụ ỉ ụ trình đ n tùy ch nh. ơ ỉ

Thông th ng đ làm đi u này b n nh p chu t ph i vào m c m i c a b n ho c m c menu vàườ ể ề ạ ấ ộ ả ụ ớ ủ ạ ặ ụ ch n ọ Assign Macro và l y macro c a b n t danh sách đ c cung c p. Tuy nhiên, tên c a cácấ ủ ạ ừ ượ ấ ủ macro có trong Add-Ins không đ c hi n th trong danh sách. Đ ng lo l ng! Ch c n gõ tên c a cácượ ể ị ừ ắ ỉ ầ ủ macro trong Macro Name: h p trên cùng c a h p tho i. Excel s tìm th y nó và macro s ch yộ ở ủ ộ ạ ẽ ấ ẽ ạ nh mong đ i khi click vào nút ho c ch n m c menu.ư ợ ặ ọ ụ

Page 19: Ham Tu Dinh Nghia 7256

Nh c Nh Cu i Cùng!ắ ở ốM t hàm tùy ch nh mà n m trong m t code mô-đun trong ph m vi m t b ng tính s đi b t cộ ỉ ằ ộ ạ ộ ả ẽ ấ ứ

n i nào b ng tính đi. Nói cách khác n u b n m file workbook trên m t máy khác, ho c g i e-mailơ ả ế ạ ở ộ ặ ử file đó cho ng i khác thì hàm s di chuy n cùng v i b ng tính và s luôn luôn s d ng đ c. ườ ẽ ể ớ ả ẽ ử ụ ượ

N u b ng tính c a b n đ c p đ n m t hàm tùy ch nh đ c ch a trong m t Add-In, b ng tínhế ả ủ ạ ề ậ ế ộ ỉ ượ ứ ộ ả s ch có th tính hàm khi các Add-In hi n h u. N u b n mail b ng tính đ n ng i khác b n cũngẽ ỉ ể ệ ữ ế ạ ả ế ườ ạ ph i g i luôn Add-In cho h ! ả ử ọ

N u b n mu n s d ng các hàm tùy ch nh ch a trong m t Add-In trong code c a m t b ng tínhế ạ ố ử ụ ỉ ứ ộ ủ ộ ả khác, b n s ph i thi t l p m t tham chi u đ n Add-In. Đ c ph n ạ ẽ ả ế ậ ộ ế ế ọ ầ Làm th nào đ s d ng cácế ể ử ụ hàm Add-In c a b n trong Excelủ ạ .

C / S d ng các ch c năng Add-In Excel c a b n trong VBAử ụ ứ ủ ạ

N u b n đã xây d ng m t Add-In đ ch a các ch c năng tùy ch nh c a b n trong Excel, có thế ạ ự ộ ể ứ ứ ỉ ủ ạ ể b n đã phát hi n ra r ng, m c dù hàm ho t đ ng t t trong m t b ng tính Excel, b n không th sạ ệ ằ ặ ạ ộ ố ộ ả ạ ể ử d ng chúng trong các quy trình VBA c a mình trong các b ng tính khác. Nh th Visual Basic Editorụ ủ ả ư ể không th nhìn th y chúng. Vâng, đó là vì nó không th nhìn th y đ c! Bài vi t này gi i thích choể ấ ể ấ ượ ế ả b n cách ch nh s a nó. ạ ỉ ử

Tr c tiên, hãy cân nh c xem li u đi u này có th c s là nh ng gì b n mu n làm hay không.ướ ắ ệ ề ự ự ữ ạ ố Các Add-In ch y u đ c dùng cho vi c thêm ch c năng b xung cho b ng tính c a b n. Khi b nủ ế ượ ệ ứ ổ ả ủ ạ ạ nh p m t Excel Add-In thì ch c năng hàm c a mình ngay l p t c tr nên s n sàng đ s d ng choậ ộ ứ ủ ậ ứ ở ẵ ể ử ụ t t c các b ng tính c a b n. N u b n t o m t quy trình VBA mà ph thu c vào m t hàm tùy ch nhấ ả ả ủ ạ ế ạ ạ ộ ụ ộ ộ ỉ có trong b ng tính khác, mà b ng tính khác đó ph i đ c m b t c khi nào b n mu n s d ng hàmả ả ả ượ ở ấ ứ ạ ố ử ụ c a nó. T ng t v i m t hàm tùy ch nh trong m t Add-In. N u Add-In đ c nh p chính xác,ủ ươ ự ớ ộ ỉ ộ ế ượ ậ nh ng gi s b n mail b ng tính c a b n cho ng i khác, ho c phân b nó cho nhóm làm vi c c aư ả ử ạ ả ủ ạ ườ ặ ổ ệ ủ b n. B n ph i nh phân b c các Add-In. Nó có th đ n gi n h n đ g p c m t b n sao c aạ ạ ả ớ ổ ả ể ơ ả ơ ể ộ ả ộ ả ủ hàm trong mã b ng tính nên b n có th truy c p tr c ti p vào nó (b n có th c n làm cho nó m tả ạ ể ậ ự ế ạ ể ầ ộ ch c năng riêngứ ho c thay đ i tên c a nó đ tránh các trùng tên). ặ ổ ủ ể

Tôi không nói là đ ng làm đi u đó. B n ch c n suy nghĩ v nó tr c tiên, và n u b n ch c ch nừ ề ạ ỉ ầ ề ướ ế ạ ắ ắ các Add-In s ch y đ c, c th c hi n. Đây là cách...ẽ ạ ượ ứ ự ệ

Khi Nào Có Tr c Tr c?ụ ặTôi đang vi t m t quy trình cho m t Add-In trong b ng tính c a tôi. Trong quy trình này tôi mu nế ộ ộ ả ủ ố

s d ng ch c năng ử ụ ứ RemoveSpaces mà tôi t o ra m t lúc tr c và đ c l u trong ạ ộ ướ ượ ư my Martin's Functions Add-In mà hi n t i đ c cài đ t trong ệ ạ ượ ặ my copy of Excel. Nh ng khi tôi th ch y quy trìnhư ử ạ c a tôi, tôi g p l i.ủ ặ ỗ

Page 20: Ham Tu Dinh Nghia 7256

Các Visual Basic Editor ch y nh th hàm không t n t i, nh ng tôi bi t nó t n t i và tôi có thạ ư ể ồ ạ ư ế ồ ạ ể nhìn th y nó n u tôi nhìn vào mã Add-In bên trong. Trong th c t , mã ho t đ ng t t n u tôi ch y nóấ ế ự ế ạ ộ ố ế ạ t bên trong Add-In c a mình. ừ ủ

Tôi c n Visual Basic Editor đ có th xem các ch c năng trong Add-In c a mình t bên trong mãầ ể ể ứ ủ ừ mô-đun c a m t b ng tính khác.ủ ộ ả

Đ t tên VBA Project cho Add-In c a b nặ ủ ạM i workbook đ u có m t tên VBA Project. Nó đ c g i là VBAProject. B n có th thay đ iỗ ề ộ ượ ọ ạ ể ổ

tên đó n u b n mu n nh ng th ng tôi không b n tâm, b i vì nó không quan tr ng l m.ế ạ ố ư ườ ậ ở ọ ắ

B n đã bao gi t h i t i sao t t c các b ng tính đ c hi n th trong c a s Project Explorerạ ờ ự ỏ ạ ấ ả ả ượ ể ị ử ổ c a trình biên t p ủ ậ visual basic thì đ c g i là "ượ ọ VBAProject"? N u b n có cài đ t b t kỳ m t Add-Inế ạ ặ ấ ộ nào c a Microsoft b n s th y r ng chúng có tên khác nhau. Các chuyên viên thi t k c a Microsoftủ ạ ẽ ấ ằ ế ế ủ đã cung c p ấ Analysis ToolPak Add-In the VBA Project Name "funcres".

Đi u đ u tiên ph i làm là đ t cho Add-In c a b n m t tên VBA Project đ c nh t. Đi u này làề ầ ả ặ ủ ạ ộ ộ ấ ề b i vì b n s tham chi u đ n nó b i tên này trong b c ti p theo và n u có nhi u h n m t tên bở ạ ẽ ế ế ở ướ ế ế ề ơ ộ ị trùng thì Visual Basic Editor s không bi t s d ng cái nào.ẽ ế ử ụ

Trong c a s Project Explorer ch n tên Add-In c a b n. N u nó ch a đ c m , hi n th c a sử ổ ọ ủ ạ ế ư ượ ở ể ị ử ổ đ c tính c a Visual Basic Editor. B n s th y r ng ch có m t đ c tính, đó là tên. Gõ m t tên khácặ ủ ạ ẽ ấ ằ ỉ ộ ặ ộ

Page 21: Ham Tu Dinh Nghia 7256

và nh n ấ Enter. B n s ph i tuân theo quy t c đ t tên thông th ng cho VBA (t c là. không có ký tạ ẽ ả ắ ặ ườ ứ ự c m và không có d u cách). B n s th y tên này đ c áp d ng ngay l p t c trong ấ ấ ạ ẽ ấ ượ ụ ậ ứ Project Explorer.

Bây gi l u nh ng thay đ i vào Add-In c a b n. hãy ch c ch n r ng Add-In c a b n đ c ch nờ ư ữ ổ ủ ạ ắ ắ ằ ủ ạ ượ ọ trong Project Explorer và ch n ọ File>Save

Thi t L p M t Tham Chi u Cho Add-In ế ậ ộ ếTrong b c này b n cho b ng tính bi t b n mu n s d ng các ch c năng c a Add-In nào c aướ ạ ả ế ạ ố ử ụ ứ ủ ủ

b n mà Add-In t n t i. B n làm đi u này b ng cách thi t l p m t tham chi u cho Add-In. Có thạ ồ ạ ạ ề ằ ế ậ ộ ế ể b n đã vô tình th y k thu t này tr c đây n u b n mu n vi t code Excel đ liên h v i m tạ ấ ỹ ậ ướ ế ạ ố ế ể ệ ớ ộ ch ng trình khác nh ươ ư Outlook ho c Access,. ặ

Hãy kh i đ ng l i excel ngay lúc này n u thu n ti n. C n th c hi n đi u này là do Add-In đãở ộ ạ ế ậ ệ ầ ự ệ ề đ c đ i tên c a b n s đ c nh p l i và danh sách mà b n đang xem s đ c làm m i. N uượ ổ ủ ạ ẽ ượ ậ ạ ạ ẽ ượ ớ ế không thu n ti n, cũng không c n b n tâm ... hãy đ c đo n ti p theo và quy t đ nh nh ng gì b nậ ệ ầ ậ ọ ạ ế ế ị ữ ạ mu n làm. ố

M m t code module trong b ng tính mà b n mu n s d ng các ch c năng c a Add-In sau đóở ộ ả ạ ố ử ụ ứ ủ vào Tools > References đ m h p tho i ể ở ộ ạ References là n i b n s th y m t danh sách t t c thơ ạ ẽ ấ ộ ấ ả ư vi n và các đ i t ng khác (nh Add-Ins) mà b n có th thi t l p m t tham chi u. N u b n đãệ ố ượ ư ạ ể ế ậ ộ ế ế ạ kh i đ ng l i Excel thì danh sách này s đ c làm m i và b n có th tìm tên đ i t ng mà b n đãở ộ ạ ẽ ượ ớ ạ ể ố ượ ạ nh p vào Add-In c a b n trong b c cu i cùng. Đánh d u vào h p bên c nh tên và nh p nút ậ ủ ạ ướ ố ấ ộ ạ ấ OK.

Page 22: Ham Tu Dinh Nghia 7256

N u b n không kh i đ ng l i Excel b n s ph i tìm file Add-In c a mình b ng cách nh n vàoế ạ ở ộ ạ ạ ẽ ả ủ ằ ấ nút Browse trên h p tho i kh o. C a s ộ ạ ả ử ổ Add Reference m ra. Thay đ i ph n ở ổ ở ầ Files of type: ph nầ Microsoft Excel Files (*. xls, *. xla) sau đó duy t đ n th m c n i l u tr các Add-In.ệ ế ư ụ ơ ư ữ

L a ch n Add-In c a b n và nh n ự ọ ủ ạ ấ Open. Đi u này đã thêm Add-In c a b n vào danh sách n iề ủ ạ ơ b n có th ch n nó và nh n ạ ể ọ ấ OK.

Chú ý: B n không ph i làm c hai c a th t c này! Ch n m t cái tuỳ thu c vào vi c b n kh iạ ả ả ủ ủ ụ ọ ộ ộ ệ ạ ở đ ng l i Excel sau khi thay đ i tên Project c a Add-In hay không.ộ ạ ổ ủ

Bây gi b n có th s d ng ch c năng c a Add-In trong b t kỳ mô-đun nào trong b ng tính màờ ạ ể ử ụ ứ ủ ấ ả b n thi t l p các tham chi u và chúng s đ c công nh n b i Visual Basic Editor...ạ ế ậ ế ẽ ượ ậ ở

N u nhìn vào Project Explorer b n s th y m t tham chi u đã đ c ng d ng vào b ng tính.ế ạ ẽ ấ ộ ế ượ ứ ụ ả

Page 23: Ham Tu Dinh Nghia 7256

Đi u quan tr ng c n nh r ng vi c thêm m t tham chi u ch áp d ng cho các b ng tính mà b nề ọ ầ ớ ằ ệ ộ ế ỉ ụ ả ạ th c hi n quy trình này. B n s ph i làm đi u đó cho m i b ng tính khác nhau mà b n mu n sự ệ ạ ẽ ả ề ỗ ả ạ ố ử d ng ch c năng.Add-In c a mình.ụ ứ ủ

Gi i Thi u V Phân B Các T p Tin C a B n ớ ệ ề ổ ậ ủ ạKhi b n thêm m t tham chi u đ n m t Add-In thì liên k t này t i Add-In là "ch c năng đ c càiạ ộ ế ế ộ ế ớ ứ ượ

c ng" vào file. N u b n di chuy n file đ n m t máy tính khác, ho c phân b nó v i b n đ ngứ ế ạ ể ế ộ ặ ổ ớ ạ ồ nghi p thì b ng tính s yêu c u m t Add-In t ng t , cùng m t n i, trên máy tính c a h . T ngệ ả ẽ ầ ộ ươ ự ở ộ ơ ủ ọ ươ t , n u các Add-In đ c di chuy n ho c b xóa t máy tính thì b ng tính s không th tìm th y nóư ế ượ ể ặ ị ừ ả ẽ ể ấ và code c a b n s không ho t đ ng. ủ ạ ẽ ạ ộ

M t s ng i bi n h r ng t p tin và Add-In k t h p c a nó nên luôn luôn đ c đ t trong cùngộ ố ườ ệ ộ ằ ậ ế ợ ủ ượ ặ th m c đ tránh nh ng v n đ này có th gây ra. B n có th th c hi n đ c, t t nhiên, cài đ t cácư ụ ể ữ ấ ề ể ạ ể ự ệ ượ ấ ặ tham chi u m t l n n a đ s a ch a s c .ế ộ ầ ữ ể ử ữ ự ố

Mang nh ng th a s này vào tài kho n và b n s không g p s c n a.ữ ừ ố ả ạ ẽ ặ ự ố ữ