Lập trình VBA cơ bản đến nâng cao

15 7 0
Lập trình VBA cơ bản đến nâng cao

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

LẬP TRÌNH VBA – EXCEL 1 GIỚI THIỆU CHUNG VBA – Visual Basic for Application là một ứng dụng được nhúng trong Excel để thực hiện các thao tác nhất định VBA thường được dùng để rút ngắn thời gian xử lý.

LẬP TRÌNH VBA – EXCEL GIỚI THIỆU CHUNG VBA – Visual Basic for Application ứng dụng nhúng Excel để thực thao tác định VBA thường dùng để rút ngắn thời gian xử lý cơng việc mình, giải vấn đề thủ cơng, tối ưu hóa khả làm việc xóa bỏ nhàm chán cơng việc Bạn dùng VBA để giải nhiều công việc khác  Lưu trữ danh sách  Lên kế hoạch  Phân tích liệu  Phát triển biểu đồ  Tự xây dựng chương trình ♥ VBA dùng để tạo chương trình (Macro ứng dụng VBA tích hợp để phù hợp với phần lớn người dùng) Hàm (Function) tương tự hàm có sẵn Excel Để bắt đầu lập trình VBA, bạn cần bật Tab Developer công cụ Ribbon Excel Thao tác sau  Chuột phải vị trí Ribbon  Customize the Ribbon → Tick chọn thẻ Developer  Tab Developer lúc Ribbon Tab Developer không hỗ trợ lập trình VBA túy mà cịn hỗ trợ ghi Macro (Macro Recording) - Ứng dụng lập trình VBA 2 CÁC CHỨC NĂNG LẬP TRÌNH 2.1 BẮT ĐẦU LẬP TRÌNH Để mở cửa sổ lập trình Microsoft Visual Basic for Application cho File Excel tại, bạn bấm tổ hợp phím Alt + F11 Tại cửa sổ VBA, bạn chọn Sheet để thực thao tác lập trình, mơi trường lập trình mở bên phải để nhập lệnh Để bắt đầu chương trình lập trình, bạn bắt đầu với Sub ten_chuong_trinh () Khi đó, lệnh kết thúc tự động tạo đồng thời End Sub Tương tự chương trình main() ngơn ngữ lập trình khác, lúc này, tồn nội dung lập trình bạn nằm gọn khung Sub – End Sub - OPTIONS: Để thay đổi thông báo hay giao diện mơi trường lập trình theo ý muốn bạn thực bước  Tại cửa sổ MVB, menu Tools → Options  Editor: Cài đặt thông báo o Auto Syntax Check: Thơng báo có lỗi cú pháp (Syntax) o Require Variable Declaration: Hiện dòng Option Explicit đầu Module o Auto List Members: Hiện danh sách phương thức/thuộc tính dựa từ gợi nhắc o Auto Quick Info: Hiển thị cú pháp hàm có từ gợi nhắc o Auto Data Tip: Hiển thị danh sách liệu khai báo biến -  Editor Format: Cài đặt định dạng giao diện o Code Color: Chọn màu chữ, màu o Font: Chọn font chữ theo ý thích o Size: Chọn kích cỡ chữ theo ý thích VBAPRỌECT: Tại cửa sổ MVB, menu Tools → VBAProject Properties → General  VBProject: Để nhận dạng project bạn Window Registry Object Browser (nó cần có tên nhất)  Project Description: Mô tả project Type Library Nếu bạn không muốn người khác xem Code mình, bạn thực khóa lại Tab Protection cửa sổ Project Properties  Lock Project: Khóa code module, khơng cho nhìn thấy khơng cho chỉnh sửa (Lock project for viewing) -  Password to view project properties: Gõ nội dung mật mã vào Password xác nhận Password SECURITY: Chế độ an toàn, bảo vệ khỏi Virus Chức điều khiển hoạt động macro (ứng dụng VBA) cho phép macro hoạt động không  Tại cửa sổ MVB, menu Tools → Macro → Security → Security Level -  Chọn mức độ an toàn o Very High: Các macro chạy (trừ macro Office) o High: Chỉ macro xác nhận chạy Để xác nhận macro, bạn phải đăng kí cách Tools → Security → More → Trusted → Publisher o Medium: Khi mở file có chứa macro, có cảnh báo, chọn Enable Macros phép macro hoạt động, ngược lại chọn Diasable Macros (Trường hợp bạn khơng mở file có Macro cảnh báo → File bạn bị nhiễm VIRUS MACRO) o Low: Khơng đặt cảnh báo an tồn cho macro  Khi sử dụng VBA, nên đặt Security mức Medium Low ERRORS: Trong trình lập trình, có xảy lỗi (errors) VBA kiểm tra tự sửa lỗi (Các lỗi cú pháp đơn giản) báo lỗi (đổi dịng có lỗi sang màu đỏ) để bạn sửa lỗi  Báo lỗi o Với lỗi cú pháp (viết HOA ↔ viết thường) VBA không báo lỗi tự sửa giúp bạn o Với lỗi cú pháp phức tạp (Sai tả, thiếu từ, thiếu thành phần hàm,…) VBA thông báo chuyển đỏ dịng có lỗi o Với lỗi Logic hay lỗi khó phát khác, VBA khơng thể phát q trình Code được, đó, chạy Debug  Sửa lỗi o Đối với lỗi thơng báo q trình Code, bạn tiến hành sửa trực tiếp o Với lỗi bắt gặp q trình Debug (được bơi vàng) bạn chờ kết thúc q trình Debug đến để sửa lỗi 2.2 CÁC QUY TẮC KHI LẬP TRÌNH - CÁC ĐỐI TƯỢNG: Trước hết, cần hiểu đối tượng thao tác Excel để q trình lập trình VBA khơng gặp nhiều rắc rối  Workbook: Là đối tượng lớn – Cả file Excel  Worksheet: Là trang (sheet) file Excel  Chart: Là biểu đồ  Range: Là vùng hay nhóm Sheet  Cell: Là đối tượng nhỏ Excel – ô  Để gọi tên đối tượng VBA, bạn làm sau Doi_tuong(“ten_doi_tuong”) - CÁC PHƯƠNG THỨC: Hay hành động thực đối tượng Excel  Activate: Kích hoạt  Clear: Xóa  Copy: Sao chép  Cut: Cắt  Delete: Xóa nội dung bên  Select: Lựa chọn (Bôi đen)  Để thực phương thức cho đối tượng VBA, bạn nhập theo cú pháp Doi_tuong(“ten_doi_tuong”).Phuong_thuc - THUỘC TÍNH: Là thơng số đối tượng bên Excel Một số thuộc tính  ColumnWidth: Độ rộng cột  Font: Phông  Formula: Công thức  Text: Dữ liệu Text  Value: Dữ liệu giá trị (số)  Để thiết lập thuộc tính cho đối tượng VBA, thực theo cú pháp Doi_tuong(“ten_doi_tuong”).Thuoc_tinh = Thong_so - BIẾN: Tương tự ngơn ngữ lập trình khác, thao tác trung gian VBA thực thông qua biến VBA không bắt buộc khai báo biến (VBA tự tạo biến bạn sử dụng chúng lần Code mình) Tuy nhiên, nên định nghĩa rõ ràng cho biến sử dụng Các lưu ý khai báo biến  Cách đặt tên  Tên dài tối đa 255 kí tự  Kí tự bắt đầu phải chữ  Khơng chứa kí tự đặc biệt ^; &; (; ); %; $; #; !; ~; +; -; *…  Không đặt trùng với từ khóa VBA: Print; Sub; End;…  VBA không phân biệt HOA thường tên biến  Khai báo kiểu liệu: Các kiểu liệu VBA  Byte: Số nguyên dương, – 255  Boolean: Kiểu Logic, True/False  Integer: Số nguyên, -32,768 – 32,767  Long: Số nguyên, -2,147,483,648 – 2,147,483,647  Single: Số, -3.402823E38 – -1.401298E-45 1.401298E-45 – 3.402823E38  Curency: Kiểu tiền tệ, -922337203685477.5808 – 922337203685477.5807  Date: Kiểu tời gian, January 1, 100 – December 31, 9999 (Có dấu # đầu)  Object: Tham chiếu đến đối tượng  String: Chuỗi, – 65535 kí tự (Đặt “ “)  Variant: Kiểu liệu gán tự động VBA, thay cho kiểu liệu  Khai báo biến số: Để khai báo biến số thay đổi giá trị trình lập trình Dim ten_bien As kieu_du_lieu  Khai báo biến cố định: Để khai báo số (giá trị không đổi) Const ten_bien = gia_tri - MẢNG: Mảng kiểu liệu đặc biệt, mảng chứa biến số xếp theo trình tự định – Mỗi biến số phần tử mảng Mảng có biên biên dưới, phần tử mảng liên tục Mảng có loại  Mảng có chiều dài có định: Mảng có số phần tử cố định Cách khai báo Dim ten_mang (do_dai_chieu_1, do_dai_chieu_2) As kieu_du_lieu o Độ dài chiều 1/2: Là số cụ thể o Kiểu liệu: Là kiểu liệu phần tử (biến số) bên mảng o Địa bắt đầu chiều mảng  Mảng động: Mảng có số phần tử dao động khoảng Cách khai báo Dim ten_mang (do_dai_chieu_1, do_dai_chieu_2) As kieu_du_lieu o Độ dài chiều 1/2: Là khoảng *** to *** (chiều dài tối thiểu tối đa cố định) o Kiểu liệu: Là kiểu liệu phần tử (biến số) bên mảng  Hàm Array: Hàm tự động tạo mảng với biến số Các biến tự động gán kiểu Variant Cú pháp hàm Dim Array(“bien_1”, “bien_2”…) - o Hàm UBound: trả phần tử cuối mảng o Hàm LBound: trả phần tử mảng THAM CHIẾU ĐẾN Ô VÀ VÙNG: Đây thành phần làm việc Excel, đó, để gán liệu vào Worksheet, bạn cần tham chiếu đến đối tượng Một số phương pháp tham chiếu  Tham chiếu kiểu A1: Kiểu tham chiếu vùng Cú pháp Range(“vung_tham_chieu”) [vung_tham_chieu]  Tham chiếu Index Numbers: Dành cho tham chiếu ô Cú pháp Cells(so_hang,so_cot)  Số hàng số cột: Để tham chiếu nhanh đến hàng/cột (thay dùng tham chiếu kiểu A1) Cú pháp Rows(so_hang) Columns(so_cot)  Đặt tên cho vùng: Một phương pháp để đơn giản hóa phương pháp A1, việc đặt tên cho vùng cố định bạn không cần nhớ địa vùng mà cần nhớ tên vùng Bạn thực đặt tên cho vùng trước đặt trình Code o Tên tạo trước: Nếu tên đặt trước nằm Sheet thuộc Workbook Cú pháp Range(“[ten_Workbook]ten_sheet!ten_vung”) Nếu bạn truy cập Sheet Workbook chứa vùng muốn tham chiếu bỏ qua phần tên đối tượng o Tên đặt Code: Nếu bạn muốn đặt tên cho vùng trình Code tham chiếu đến thực bước Workbooks(“ten_Workbook”).Names.Add Name:=”ten_vung”,_ RefersTo:=”=ten_sheet!dia_chi_vung” Range(“ten_vung”)  Tham chiếu nhiều mảng: Là cách tham chiếu lúc đến nhiều vùng để thực nhanh Có thể sử dụng cách tham chiếu A1 theo tên vùng Cú pháp Range(“vung_1,vung_2,…”)  Offset cells: Được dùng để tham chiếu đến ô TIẾP THEO ô theo quy tắc chung Phương pháp khơng thể quay lại vị trí phái trước Cú pháp Offset(so_dong_xuong,so_cot_phai) Giá trị so_dong_xuong so_cot_phai âm  Tham chiếu kiểu R1C1: Thường sử dụng để tham chiếu đến vùng thực phép tính/cơng thức Cú pháp Cong_thuc(R[so_hang_1]C[so_cot_1],R[so_hang_2]C[so_cot_2]) - HỘP THOẠI HELP: Công cụ trợ giúp trình thao tác Lập trình  Khi Code: Để xem câu lệnh trình Code o Chọn mục cần hỗ trợ o Ấn phím F1 → Cửa sổ Microsoft Visual Basic Help  Sử dụng với chủ đề cụ thể: Để xem câu lệnh với chủ đề biết trước o Trên cửa sổ MVB, menu Help → MVB Help o Gõ nội dung mà bạn muốn tìm vào Search Enter  Trinh duyệt đối tượng (Object Browser): Để xem đối tượng, phương pháp hay thuộc tính bổ sung thêm hàm số (functions) hay cầu lệnh (statements) o Tại cửa sổ MVB mở, menu View → Object Browser o Tại khung All Libraries, đổi thành Excel o Trong vùng Classes → Chọn đối tượng o Trong vùng Members of ‘***’: Các phương thức (biểu tượng xanh) thuộc tính (biểu tượng bàn tay chỉ) đối tượng vừa chọn 2.3 CÁC NHÓM LỆNH 2.3.1 WITH – END WITH Dùng để thực nhiều thao tác với nhiều đối tượng đơn lẻ Phương pháp dùng với đối tượng có nhiều thuộc tính Cú pháp With Phuong_thuc.Doi_tuong Thuoc_tinh_1 = gia_tri_1 Thuoc_tinh_2 = gia_tri_2 Thuoc_tinh_3 = gia_tri_3 … End With - 2.3.2 LỆNH ĐIỀU KIỆN IF: Câu lệnh điều kiện đơn giản Cú pháp If Then [Else ] - Phần Else [] phần tùy chọn, khơng cần dùng nhiều lần Else tùy theo mục đích lập trình Trường hợp dùng nhiều Else thay ElseIf kết thúc End If SELECT CASE: Tương tự ElseIf, cấu trúc Select Case cho phép thực thiều câu lệnh khác Mặt khác, không If, Select Case cho phép dùng nhiều điều kiện để chọn lọc Cú pháp Select Case [Case ] [Case ] … [Case ] End Select - XÂY DỰNG ĐIỀU KIỆN: Trường hợp thuật toán cần giải đồng thời nhiều điều kiện, để kết hợp điều kiện với (Trong câu lệnh If) sử dụng And Or  And: Thỏa mãn đồng thời tất điều kiện nối với And -  Or: Thỏa mãn điều kiện nối với Or 2.3.3 HỘP THOẠI MESSAGE BOX: Hiển thị hộp thơng báo lên hình Cú pháp MsgBox(prompt [, buttons] [, title] [, helpfile, context])  prompt: Nội dung lời nhắc hộp thông báo  buttons: Tùy chọn nút lựa chọn (Yes/No, OK,…)  title: Nội dung đầu hộp thông báo  helpfile: File hỗ trợ  context: Số thứ tự tình filehelp (chỉ tùy chỉnh chọn filehelp) Các thông điệp buttons Giá trị Mô tả vbOKOnly vbOKCancel vbAbortRetryIgnore vbYesNoCancel vbYesNo vbRetryCancel Giá trị Hiện nút OK Hiện nút OK Cancel Hiện nút Abort, Retry Ignore Hiện nút Yes, No Cancel Hiện nút Yes No Hiện nút Retry Cancel Các loại buttons Giá trị Mô tả vbOK vbCancel vbAbort vbRetry vbIgnore vbYes vbNo Giá trị Chọn nút OK Chọn nút Cancel Chọn nút Abort Chọn nút Retry Chọn nút Ignore Chọn nút Yes Chọn nút No Các biểu tượng thông điệp Giá trị VbCritical Mô tả Giá trị Dùng cho thông báo lỗi, thất bại vbQuestion Dùng cho câu hỏi cần lựa chọn vbExclamation Dùng cho thông báo vbInformation vbDefaultButton1 vbDefaultButton2 vbDefaultButton3 - Dùng cho thông báo cung cấp thông tin Mặc định nút lệnh thứ Mặc định nút lệnh thứ hai Mặc định nút lệnh thứ ba 256 512 INPUT BOX: Để người dùng nhập liệu vào Khi dùng phương thức này, hộp thoại để bạn vào liệu, chờ người dùng nhập thông tin bấm OK/Cancel, thông tin nhận gán kiểu String Cú pháp expression.InputBox(prompt [, title] [, default], [, left], [, top] [helpfile, context] [, type])  prompt: Nội dung lời nhắc hộp  title: Nội dung đầu hộp  left: Khoảng cách từ cạnh trái hộp đến cạnh trái hình  top: Khoảng cách từ cạnh hộp đến cạnh hình  helpfile: File trợ giúp  context: Số thứ tự tình filehelp (chỉ tùy chỉnh chọn filehelp)  type: Số biến đầu vào (nếu bỏ qua, giá trị nhập mặc định String) Bảng giá trị cho tham số type Giá trị 16 64 Mô tả Công thức Số Chuỗi (String) Giá trị Logic (True/False) Ô tham chiếu Giá trị lỗi Mảng giá trị 2.3.4 LỆNH LẶP Một công cụ đắc lực giúp tối ưu thuật toán, rút ngắn thời gian xử lý câu lệnh Một số kiểu vòng lặp VBA - DO – LOOP: Thực khối lệnh với số lần lặp cố định Trong đó, biểu thức điều kiện phải trả kết False (0) True (khác 0) Cú pháp Do Loop - Cần điều kiện If để tạo điểm (Exit) khỏi vịng lặp DO WHILE – LOOP: Thực khối lệnh thỏa mãn điều kiện True (khác 0) tự lập điểm thoát (Exit) kết điều kiện False (0) Cú pháp Do While Loop - DO – LOOP WHILE: Tương tự DO WHILE – LOOP, thay đổi vị trí kiểm tra điều kiện (dẫn đến số khác biệt điểm thoát ra) Cú pháp Do Loop While - DO UNTIL – LOOP: Cũng tương tự với While Cú pháp Do Until Loop - Tương tự với While, có DO – LOOP UNTIL FOR – NEXT: Cho phép thực vòng lặp với số vòng biết trước Cú pháp For = To [Step ] Next [] - Biến đếm, điểm đầu, điểm cuối bước nhảy giá trị số Bước nhảy âm dương, bị bỏ trống mặc định FOR EACH – NEXT: Hoạt động tương tự FOR – NEXT thực số lần lặp theo số phần tử mảng hay tập hợp (đặc biệt chưa biết số lượng phần tử) Cú pháp For Each In Next - EXIT: Để tạo điểm thoát sớm khỏi vịng lặp, hàm, thuộc tính chương trình, bạn cần dùng hàm Exit phù hợp Các cú pháp Exit Do Exit For Exit Function Exit Sub Exit Propertiy MỘT SỐ VÍ DỤ 3.1 VÍ DỤ – LỌC DỮ LIỆU NHIỀU ĐIỀU KIỆN VỚI ADVANCED FILTER Để tạo lọc nhiều điều kiện cho bảng liệu (có kích thước lớn) lập trình VBA, bạn Code sau Sub loc_nang_cao() Dim rg As Range Dim criterial_rg As Range Dim copy_rg As Range ‘Khai bao vung du lieu, dieu kien, vung tra ket qua Set rg = Sheets(“Data”).Range(“B4”).CurrentRegion Set criteria_rg = Sheets(“Data”).Range(“J4”).CurrentRegion Set copy_rg = Sheets(“Data”).Range(“N4”) ‘Ap dung bo loc rg.AdvancedFilter xFIlterCopy, criteria_rg, copy_rg End Sub 3.2 VÍ DỤ – IN BẢNG CỬU CHƯƠNG Để lập bảng cửu chương cơng cụ lập trình VBA, cần dùng đến cấu trúc vòng lặp For, đoạn Code sau Sub bang_cuu_chuong() Dim i, j As Integer For i = To Step For j = To Step ThisWorkbook.Sheets(2).Cells(i,j) = I & “ x “ & j & “:=” & i * j Next Next End Sub 3.3 VÍ DỤ – IN ẤN NHANH HÀNG LOẠT Giả sử có bảng danh sách thí sinh với điểm thi THPT theo SBD, để in ấn hàng loạt bảng điểm thi cho tất thí sinh cơng cụ lập trình VBA, bạn cần làm sau Sub In_bang_diem() Dim i As Integer ‘Quet theo cot SBD i=2 While(ThisWorkbook.Sheets(1).Cells(i, 1) “” ThisWorkbook.Sheets(2)cells(4,4) = ThisWorkbook.Sheets(1)Cells(i, 1) ThisWorkbook.Sheets(2).Printout preview = False i=i+1 Wend End Sub 3.4 VÍ DỤ – XĨA TỒN BỘ CÁC SHEET KHƠNG ACTIVE Nếu Workbook bạn có nhiều Sheet mà bạn Sheet hoạt động (Active), bạn khơng muốn xóa nhầm, để xóa tất Sheet không Active cách tự động, bạn làm sau Sub xoa_sheet() Dim ws As Worksheet ‘Tat canh bao Application.DisplayAlerts = False ‘Tim cac Sheets khong Active For Each ws In ThisWorkbook.Sheets If ws.Name ThisWorkbook.ActiveSheet.Name Then ws.Delete End If Next ‘Bat lai canh bao Application.DisplayAlerts = True End Sub 3.5 VÍ DỤ – COPY CÁC FILE TỪ FOLDER SANG FOLDER KHÁC Giả sử bạn có thư mục chứa nhiều File muốn Copy sang thư mục khác Bạn có đường dẫn từ thư mục gốc thư mục đến Sheet Excel loại File mà bạn muốn Copy thực bước sau Sub copy_file() Dim FSO As Object Dim kieu_file As String Dim duong_dan_thu_muc_nguon As String Dim duong_dan_thu_muc_dich As String ‘Gan cac duong dan duong_dan_thu_muc_dich = ThisWorkbook.Sheets(1)Cells(6, 3) duong_dan_thu_muc_nguon = ThisWorkbook.Sheets(1)Cells(3, 3) kieu_file = ThisWorkbook.Sheets(1)Cells(8, 3) ‘Khoi tao bien luu File Set FSO = CreatObject(“scripting.FileSystemObject”) ‘Kiem tra xem File dich co ton tai khong If FSO.FolderExists(duong_dan_thu_muc_dich) = False Then MsgBox “Khong ton tai thu muc dich” Exit Sub End If ‘Kiem tra xem File nguon co ton tai khong If FSO.FolderExists(duong_dan_thu_muc_nguon) = False Then MsgBox “Khong ton tai thu muc nguon” Exit Sub End If ‘Copy File FSO.copyFile Source:=duong_dan_thu_muc_nguon & kieu_file, Destination:=duong_dan_thu_muc_dich MsgBox “Da copy cac file” & duong_dan_thu_muc_nguon & “toi” & duong_dan_thu_muc_dich End Sub 3.6 VÍ DỤ – COPY NHIỀU FILE EXCEL VÀO FILE DUY NHẤT Để copy nhiều File Excel thành Sheet nằm File nhất, bạn thực sau Sub coy_nhieu_file() ‘Tao duong dan Path = “duong_dan_folder_can_copy\” Filename = Dir (Path & “*.xlsx*”) ‘Copy cac File Do While Filename “” Workbook.Open Filename:=Path & Filename, ReadOnly:=True For Each Sheet In ActiveWorkbook.Sheets Sheet.Copy after:=ThisWorkbook.Sheets(1) Next Workbooks(Filename).close Filename = Dir() Loop End Sub 3.7 VÍ DỤ – HÀM NỐI CHUỖI VÀ TÍNH TỔNG CÁC SỐ Nếu bạn muốn tạo hàm Excel (cú pháp VLOOKUP/FIND,…) thực nối chuỗi tính tổng số thực bước sau Để tạo hàm, bạn thay từ khóa Sub Function Hàm nối chuỗi Function noi_chuoi(Pham_vi As Range, ky_tu_giua_cac_chuoi As String) Dim moi_ki_tu As Range ‘Noi chuoi For Each moi_ki_tu In Pham_vi noi_chuoi = noi_chuoi & moi_ki_tu & ki_tu_giua_cac_chuoi Next noi_chuoi = left(noi_chuoi, len(noi_chuoi) – len(ki_tu_giua_cac_chuoi)) End Function Hàm tính tổng số Function tinh_tong_cac_so(chuoi As String) tinh_tong_cac_so = Dim i As Integer Dim tung_ki_tu As String ‘Tinh tong For i = To Len(chuoi) tung_ki_tu = Mid(chuoi, i, 1) ‘Kiem tra tung ki tu If tung_ki_tu >= “0” And tung_ki_tu

Ngày đăng: 31/10/2022, 21:02

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan