Tìm hiều VBA và AddIn trong Excel viết hàm người dùng VBA là viết tắt của cụm từ Visual Basic for Application. Nó là một ngôn ngữ lập trình được phát triển bởi Microsoft Excel là một phần của bộ Office, nó bao gồm luôn cả ngôn ngữ VBA mà không hề tính thêm tiền. Có thể nói VBA là một công cụ dùng để phát triển chương trình ứng dụng trong Excel nói riêng và bộ Microsof Office nói chung.
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP TPHCM
- -BÀI TIỂU LUẬN
Đề tài 11 :
♣
Nhóm sinh viên thực hiện :
1 Nguyễn Ngọc Hoa Anh (09202801)
Trang 2Tp Hồ Chí Minh, tháng 06/2010
1 Khái quát về VBA
VBA là viết tắt của cụm từ Visual Basic for Application Nó là một ngôn
ngữ lập trình được phát triển bởi Microsoft Excel là một phần của bộ Office,
nó bao gồm luôn cả ngôn ngữ VBA mà không hề "tính thêm tiền" Có thể nói
VBA là một công cụ dùng để phát triển chương trình ứng dụng trong Excel nói riêng và bộ Microsof Office nói chung
VBA là một bộ phận của ngôn ngữ lập trình Visual Basic dành riêng để
soạn thảo các lệnh Macro trong bộ Office, giúp tăng cường sức mạnh và tự động hóa một số công việc lặp đi lặp lại Sẽ là một thuận lợi lớn nếu bạn hiểu rõ cách thức VBA tham chiếu đến địa chỉ cell trong Excel
Từ Office 95 Microsoft bắt đầu đưa vào một ngôn ngữ lập trình chung,
không chỉ áp dụng cho các ứng dụng như Word và Excel mà cho cả các công cụ lập trình như VB Microsoft gọi ngôn ngữ lập trình này là Visual Basic for Applications (VBA)
Ta không nên hiểu lầm VBA và VB (VB là viết tắt của cụm từ Visual Basic) VB là một ngôn ngữ lập trình giúp bạn tạo ra các chương trình ứng dụng có thể thực hiện độc lập Mặc dù VBA và VB có nhiều cái chung, nhưng chúng hoàn toàn là hai ngôn ngữ khác nhau
♣ Ví dụ đầu tiên với VBA :
Ví dụ này được trình bày với mục đích giúp người dùng làm quen với VBA IDE trong Excel
Kết quả của ví dụ là hiển thị nội dung ô A1 trong Sheet1 của bảng tính lên tiêu đề của một hộp thoại người dùng (UserForm)
Trình tự thực hiện như sau:
1 Mở ứng dụng Excel, nhấn tổ hợp phím ALT + F11 để vào VBA IDE.
2 Trong VBA IDE, chọn menu Insert → UserForm để thêm một hộp thoại người dùng vào trong dự án
Trang 33 Chọn tiếp menu Insert →Module để thêm một mô-đun chuẩn vào trong dự án.
4 Chọn Module1 và soạn thảo mã lệnh trong mô-đun đó như sau:
Public Sub FirstPro()
UserForm1.Show
UserForm1.Caption = Sheets("Sheet1").Range("A1").Value
End Sub
Sau đó quay trở lại Excel, và chạy chương trình theo trình tự:
1 Gõ vào ô A1 của Sheet1 nội dung “Hello, World”.
2 Chọn menu Tools→ Macro → Macros (hoặc nhấn tổ hợp phím ALT+ F8)
3 Trong hộp thoại Macro, chọn macro có tên FirstPro rồi nhấn nút Run
Kết quả chương trình sẽ hiển thị như hình dưới đây:
Trang 41.1 Tìm các tập tin VBA trong file
Visual Basic for Application files VBA được sử dụng để lập trình ứng dụng nhỏ cho phần mềm Microsoft như Excel Các tập tin được lưu trên máy tính của người dùng và được sử dụng bởi Excel để chạy mã, để thao tác và tính toán các giá trị VBA tập tin là tập tin thực thi do đó một số người dùng chọn xoá chúng
từ một ổ đĩa cứng
Bạn có thể tìm thấy tất cả các file VBA trên đĩa cứng bằng cách sử dụng chức năng tìm kiếm Windows tìm thấy trên menu Windows nút Start Chạy
Hộp thoại Macro
Kết quả trên excel
Trang 5chức năng tìm kiếm trong Windows Vista bạn có thể xác định tất cả các vị trí của các tập tin VBA trên hệ thống của bạn:
Bước1 : Nhấp vào nút Bắt đầu của Windows và chọn Search Từ danh
sách các tùy chọn chọn Đối với tập tin hoặc thư mục Điều này sẽ mở ra một cửa sổ mới nơi bạn nhập các thông tin tập VBA
Bước2 : Nhấp vào Advanced nhãn để mở các tùy chọn tìm kiếm khác
Điều này sẽ mở ra một danh sách các tùy chọn mà bạn có thể chỉ định ổ đĩa để thu hẹp tìm kiếm 3
Bước 3 : Gõ .VBA vào ô tìm kiếm Thẻ biểu tượng cho biết rằng
Windows nên xem xét cho bất cứ tên tập tin với phần mở rộng là VBA
Bước 4 : Chọn ổ đĩa trong thả xuống hộp có nhãn Vị trí Microsoft đã là
một lựa chọn để tìm kiếm tất cả các ổ địa phương trong đó bao gồm C Drive
Bước 5 : Nhấn nút Tìm kiếm Có thể mất vài phút cho Windows để tìm
kiếm toàn bộ ổ đĩa cứng cho mỗi tập tin VBA Sau khi đã hoàn tất Windows liệt kê các vị trí của mỗi tập tin VBA rằng có vị trí trên các file
1.2 Các ứng dụng của VBA
Nếu nắm được những hiểu biết cơ bản của VBA, nó có thể có rất nhiều ứng dụng trong công việc hằng ngày, giúp ta giải quyết công việc một cách nhanh chóng và dễ dàng hơn Ví dụ như :
• Lưu giữ các danh sách như danh sách khách hàng, danh sách sinh viên, danh sách hàng hoá
• Lên kế hoạch
• Phân tích dữ liệu
• Phát triển các biểu đồ từ nguồn dữ liệu lưu trữ
•Dùng VBA trong Excel để tạo và sửa chữa PivotTable; và còn rất nhiều tiện
Trang 6nhằm thực hiện tự động một số thao tác (có thể trong Excel hay các chương trình khác) Đó có thể nói là khái quát về VBA.
Ví dụ bạn có thể tạo một Macro tự động đưa vào danh sách nhân viên bán hàng của công ty; thực hiện các công việc thường xuyên hay lập lại như báo cáo hàng tháng; tạo một lệnh người dùng, bạn thường phải thực hiện một số lệnh từ menu của Excel, nếu vậy bạn hãy dành chút thời gian để phối hợp các lệnh ấy
lại bằng các phím tắt hay nút lệnh.
Ví dụ : Dùng VBA trong Excel để tạo và sửa chữa PivotTable
Chức năng PivotTable là chức năng mạnh của Excel, nó giúp bạn tổng kết
số liệu nhanh một cách kinh ngạc Chức năng này đầu tiên xuất hiện trong Excel 5
Giả sử ở Sheet1, tôi có khối dữ liệu cần phân tích như Hình 1 Khối dữ
liệu này gồm các trường: SalesRep (đại diện bán hàng), Region (Vùng), Month (Tháng), Sales (doanh số bán)
Trước khi tạo bảng PivotTable như Hình 2, chọn Record New Macro như
Hình 3, để xem đoạn mã được ghi lại như thế nào.
Trang 7Sau đó vào màn hình VBA bằng cách nhấn tổ hợp phím Alt + F11 Vào
Module1, thấy được đoạn mã như sau:
Trang 8ActiveSheet.PivotTables("PivotTable1").PivotFields("Sales").Orientation = _xlDataField
Trang 9Để khảo sát đoạn mã trên cần phải biết một số đối tượng liên quan Tất cả các đối tượng này đều được giải thích trên Online Help.
PivotCaches
là tập hợp các đối tượng PivotCache trong đối tượng Workbook
PivotTables
là tập hợp các đối tượng PivotTable trong đối tượng Workbook
PivotTableFields là tập hợp các trường trong đối
tượng PivotTable
Create PivotTable
một phương thức của đối tượng PivotCache để tạo một
PivotTable sử dụng dữ liệu trong một PivotCache
Ta có thể viết lại thủ tục trên bằng thủ tục CreatePivotTable (chú ý nhập thủ
tục này vào module1) sau đây, có thể nó hơi dài nhưng sẽ dễ hiểu hơn, và có
thể chạy chương trình bất cứ đâu bằng cách nhấn tổ hợp phím Alt + F8, sau đó chọn thủ tục CreatePivotTable và chọn Run như Hình 4.
Trang 10Sub CreatePivotTable()
Dim PTCache As PivotCache
Dim PT As PivotTable
Application.ScreenUpdating = False
Xoa PivotSheet neu no ton tai
On Error Resume Next
Application.DisplayAlerts = False
Sheets("PivotSheet").Delete
On Error GoTo 0
Tao Pivot Cache
Set PTCache = ActiveWorkbook.PivotCaches.Add _
Trang 11Tao Pivot Table tu Cache
Trang 12Khi chạy xong thủ tục trên, ta sẽ được một PivotTable ở Sheet2, trong
trường hợp này sheet có tên là PivotSheet (Hình 5)
Nếu chú ý, bạn sẽ thấy sự khác biệt của 2 đoạn mã trên Trong Macro1 khi sử dụng phương thức Add để tạo PivotCache thì SourceData là "Sheet1!
R1C1:R13C4" còn trong đoạn mã tôi viết là
Sheets("Sheet1").Range("A1").CurrentRegion.Address Ở đây tôi dùng thuộc
tính Current Region, có nghĩa là dữ liệu chúng ta sử dụng dựa trên vùng hiện tại xung quanh ô A1 Điều này để chắc chắn thủ tục CreatePivotTable vẫn tiếp tục
làm việc tốt khi chúng ta thêm vào dữ liệu
Bây giờ giả sử tôi có thêm trường Target (chỉ tiêu) trong khối dữ liệu, và trong PivotTable tôi sẽ đưa thêm trường target vào đồng thời cũng thêm trường tính toán Variance Trường này (Variance) sẽ bằng Sales - Target Khối dữ liệu mới của tôi như hình 6.
Đoạn mã trong thủ tục CreatePivotTable trên sẽ được thêm như sau (tôi
chỉ thêm trong đoạn With PT End With) :
Trang 13Them truong tinh toan
.CalculatedFields.Add "Variance", "=Sales - Target"
.PivotFields("Variance").Orientation = xlDataField
Thay doi caption
.PivotFields("Sum of Sales").Caption = "Sales ($) "
.PivotFields("Sum of Target").Caption = "Target ($) "
.PivotFields("Sum of Variance").Caption = "Variance ($) "
End With
Trang 14Sau khi chạy lại thủ tục trên ta sẽ được như hình 7.
Giả sử bây giờ dữ liệu gồm 6 tháng (hình 8), muốn đưa thêm cột tổng theo
từng 3 tháng phải sửa lại đoạn mã như sau:
Trang 15.CalculatedFields.Add "Variance", "=Sales - Target"
"= thang 4 + thang 5 + thang 6"
Di chuyen cac muc tinh toan
.PivotFields("Month").PivotItems("Q1").Position = 4
.PivotFields("Month").PivotItems("Q2").Position = 8
Thay doi caption
.PivotFields("Sum of Sales").Caption = "Sales ($) "
.PivotFields("Sum of Target").Caption = "Target ($) "
.PivotFields("Sum of Variance").Caption = "Variance ($) "
Trang 16Sau khi chạy lại thủ tục CreatePivotTable tôi sẽ được kết quả như Hình 9.
Nếu chúng ta biết sử dụng VBA thì công việc phân tích dữ liệu sẽ trở nên đơn giản hơn Ngoài ra, ta cũng có thể tạo một PivotTable từ nguồn dữ liệu bên ngoài như Access chẳng hạn Để lập trình PivotTable được tốt, các bạn nên đọc
Trang 17phần Online Help của Excel về các đối tượng, phương thức, thuộc tính đã đề cập ở trên.
1.3 Các thuận lợi và bất lợi của VBA
1.3.1 Thuận lợi
* Excel luôn thực hiện các công việc một cách chính xác theo cùng một cách
* Excel thực hiện các công việc nhanh hơn nhiều so với việc ngồi bấm máy tính lộc cộc
* Nếu bạn là một lập trình viên Macro tốt thì Excel sẽ thực hiện các công việc một cách chính xác mà không hề báo lỗi
* Công việc (tasks) có thể thực hiện bởi một người không biết gì về Excel
* Bạn có thể làm các việc trong Excel mà người khác thì không thể
* Thời gian cũng là yếu tố quan trọng, bạn "bắt Excel" phải làm trong khi bạn
đi "uống cafe".
1.4 Xây dựng hàm mới trong Excel
1.4.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ừ đơn giản đến phức tạp
Trang 181 Cấu trúc : Một hàm bắt đầu bằng dấu bằng “=”, tiếp sau là tên hàm,
dấu ngoặc đơn “(“, danh sách các tham số cách nhau bằng dấu phẩy “,” và cuối cùng là dấu ngoặc đơn “)”
2 Tên hàm : Nhấn tổ hợp phím SHIFT+F3 để hiển thị danh sách tất cả
4 Chú thích hàm : Chú thích hàm dùng để thể hiện cấu trúc và danh sách
các tham số của hàm, hiện lên khi ta nhập vào tên hàm Chú thích hàm chỉ xuất hiện đối với những hàm được xây dựng sẵn trong Excel
1.4.2 Tạo hàm mới bằng VBA
1.4.2.1 Tại sao phải dùng hàm ?
Trong quá trình tính toán với các bảng tính, người ta thấy rằng luôn tồn tại một nhu cầu : giá trị trong một ô nào đó sẽ được tính dựa vào hai yếu tố:
Tính theo một hoặc nhiều công thức hoặc theo một trình tự logic nào đó
Việc tính toán cần phải dựa trên những thông số bên ngoài khác
Nếu đối chiếu hai yếu tố trên với cấu trúc của một hàm (ở mục trước) ta có thể thấy rằng nhu cầu trên chỉ có thể được giải quyết một cách thỏa đáng với việc sử dụng hàm Hơn nữa, khi sử dụng hàm, việc sử dụng lặp cho nhiều ô hoặc hiệu chỉnh nội dung tính toán sau này đều rất thuận tiện so với việc không dùng hàm (tính trực tiếp trong ô) Chính bởi ưu điểm này mà hàng loạt hàm đã được Excel xây dựng sẵn và phân loại theo nhóm để tạo thuận tiện cho người dùng
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 Không phải lúc nào các hàm có sẵn cũng
Trang 19có thể giải quyết được công việc của người dùng, hoặc có thể giải quyết được nhưng phải thông qua rất nhiều hàm khác nhau hoặc thực hiện theo một cách rất phức tạp Thay vào đó, người dùng có thể tạo ra một hàm mới đảm nhận nhiệm vụ này Hàm mới này có thể có cách thức tính toán hoàn mới, hoặc cũng
có thể chỉ là việc tập hợp lại các hàm sẵn có để tạo thành một hàm đơn giản hơn Càng đơn giản, càng dễ hiểu, dễ nhớ và dễ sử dụng
Lấy ví dụ như trong Excel, có cung cấp một bộ công cụ có tên là Lookup
Bộ công cụ này cho phép người sử dụng tiến hành tra bảng 2 chiều một cách dễ dàng Nhưng việc tra bảng và nội suy không thể thực hiện được nhờ bộ công cụ này Vì thế, xây dựng một hàm mới dùng để tra bảng và nội suy 2 chiều sẽ là một công cụ tốt phục vụ cho quá trình tính toán, nhất là đối với ngành công trì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
Trang 20Trong đó:
Public : (tuỳ chọn) 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 : (tuỳ chọn) 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
Function : (bắt buộc) là từ khoá báo hiệu bắt đầu một hàm.
Tên_hàm : (bắt buộc) 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ố : (tuỳ chọn) 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 : (tuỳ chọn) 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: (tuỳ chọn) 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: (bắt buộc) là từ khoá báo hiệu kết thúc một hàm.
1.4.2.3.Tạo hàm mới
Để tạo một hàm mới, thực hiện theo các bước sau:
1 Khởi động VBAIDE Trong trình đơn Tools, chọn mục Macro→Visual
Basic Editor.
2 Trong trình đơn Insert, chọn mục Module để tạo một mô-đun mới, nơi sẽ
chứa hàm do người dùng định nghĩa
3 Trong trình đơn Insert, chọn mục Procedure… để hiển thị hộp thoại Add 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.
Trang 21Hình1 : Hộp thoại Add Procedure.
4 Chương trình sẽ tự động phát sinh đoạn mã lệnh như sau:
Public Function Dien_Tich()End Function
5 Thay đoạn mã lệnh trên bằng đoạn mã lệnh sau:
Public Function Dien_Tich(Rong As Double, Cao As Double) As Double
‘Hàm tính diện tích hình chữ nhật
Dien_Tich = Rong * Cao
End Function
6 Trong trình đơn File, chọn mục Close and Return to Microsoft Excel để
quay trở về màn hình chính của Excel
7 Lúc này, hàm mà ta vừa xây dựng, có tên là Dien_Tich, đã có thể được
sử dụng bình thường như các hàm khác của Excel