VBA - Hướng dẫn nhanh

VBA là viết tắt của Visual Basic cho Aứng dụng một ngôn ngữ lập trình hướng sự kiện của Microsoft hiện được sử dụng chủ yếu với các ứng dụng văn phòng của Microsoft như MSExcel, MS-Word và MS-Access.

Nó giúp các nhà công nghệ xây dựng các ứng dụng và giải pháp tùy chỉnh để nâng cao khả năng của các ứng dụng đó. Ưu điểm của tiện ích này là bạn KHÔNG CẦN cài đặt trực quan cơ bản trên PC của chúng tôi, tuy nhiên, việc cài đặt Office sẽ ngầm giúp đạt được mục đích.

Bạn có thể sử dụng VBA trong tất cả các phiên bản văn phòng, ngay từ MS-Office 97 đến MS-Office 2013 và cả với bất kỳ phiên bản mới nhất nào hiện có. Trong số các VBA, Excel VBA là phổ biến nhất. Ưu điểm của việc sử dụng VBA là bạn có thể xây dựng các công cụ rất mạnh trong MS Excel bằng cách sử dụng lập trình tuyến tính.

Ứng dụng của VBA

Bạn có thể thắc mắc tại sao lại sử dụng VBA trong Excel vì bản thân MS-Excel cung cấp vô số hàm có sẵn. MS-Excel chỉ cung cấp các hàm sẵn có cơ bản có thể không đủ để thực hiện các phép tính phức tạp. Trong hoàn cảnh đó, VBA trở thành giải pháp rõ ràng nhất.

Ví dụ, rất khó để tính toán khoản trả nợ hàng tháng của một khoản vay bằng các công thức có sẵn của Excel. Đúng hơn, rất dễ dàng để lập trình một VBA cho một phép tính như vậy.

Truy cập VBA Editor

Trong cửa sổ Excel, nhấn "ALT + F11". Một cửa sổ VBA mở ra như được hiển thị trong ảnh chụp màn hình sau.

Trong chương này, bạn sẽ học cách viết một macro đơn giản theo từng bước.

Step 1- Đầu tiên, bật menu 'Nhà phát triển' trong Excel 20XX. Để làm tương tự, hãy nhấp vào Tệp → Tùy chọn.

Step 2- Nhấp vào tab 'Tùy chỉnh ruy-băng' và chọn 'Nhà phát triển'. Nhấp vào 'OK'.

Step 3 - Ruy-băng 'Nhà phát triển' xuất hiện trong thanh menu.

Step 4 - Nhấp vào nút 'Visual Basic' để mở VBA Editor.

Step 5- Bắt đầu viết kịch bản bằng cách thêm một nút. Nhấp vào Chèn → Chọn nút.

Step 6 - Thực hiện nhấp chuột phải và chọn 'thuộc tính'.

Step 7 - Chỉnh sửa tên và chú thích như trong ảnh chụp màn hình sau.

Step 8 - Bây giờ nhấp đúp vào nút và phác thảo quy trình phụ sẽ được hiển thị như trong ảnh chụp màn hình sau.

Step 9 - Bắt đầu viết mã bằng cách thêm một tin nhắn.

Private Sub say_helloworld_Click()
   MsgBox "Hi"
End Sub

Step 10- Nháy nút để thực hiện thủ tục con. Đầu ra của quy trình phụ được hiển thị trong ảnh chụp màn hình sau. Đảm bảo rằng bạn đã bật chế độ thiết kế. Chỉ cần nhấp vào nó để bật nếu nó không được bật.

Note - Trong các chương tiếp theo, chúng tôi sẽ trình bày bằng cách sử dụng một nút đơn giản, như được giải thích từ bước # 1 đến 10. Do đó, điều quan trọng là phải hiểu kỹ chương này.

Trong chương này, bạn sẽ tự làm quen với các thuật ngữ VBA trong excel thường được sử dụng. Các thuật ngữ này sẽ được sử dụng trong các mô-đun tiếp theo, do đó việc hiểu từng thuật ngữ này là rất quan trọng.

Mô-đun

Mô-đun là khu vực mà mã được viết. Đây là một Workbook mới, do đó không có bất kỳ Mô-đun nào.

Để chèn Mô-đun, điều hướng đến Chèn → Mô-đun. Khi một mô-đun được chèn vào, 'module1' sẽ được tạo.

Trong các mô-đun, chúng ta có thể viết mã VBA và mã được viết trong một Thủ tục. Thủ tục / Thủ tục phụ là một loạt các câu lệnh VBA hướng dẫn những việc cần làm.

Thủ tục

Thủ tục là một nhóm các câu lệnh được thực hiện như một tổng thể, hướng dẫn Excel cách thực hiện một tác vụ cụ thể. Nhiệm vụ được thực hiện có thể là một nhiệm vụ rất đơn giản hoặc rất phức tạp. Tuy nhiên, bạn nên chia nhỏ các thủ tục phức tạp thành các thủ tục nhỏ hơn.

Hai loại thủ tục chính là Sub và Function.

Chức năng

Hàm là một nhóm mã có thể sử dụng lại, có thể được gọi ở bất kỳ đâu trong chương trình của bạn. Điều này giúp loại bỏ sự cần thiết phải viết đi viết lại cùng một đoạn mã. Điều này giúp người lập trình phân chia một chương trình lớn thành một số chức năng nhỏ và dễ quản lý.

Ngoài các Hàm có sẵn, VBA cũng cho phép viết các hàm do người dùng xác định và các câu lệnh được viết giữa FunctionEnd Function.

Thủ tục phụ

Các thủ tục con hoạt động tương tự như các hàm. Trong khi các thủ tục con KHÔNG trả về một giá trị, các hàm có thể có hoặc không trả về một giá trị. Thủ tục con CÓ THỂ được gọi mà không có từ khóa cuộc gọi. Các thủ tục phụ luôn được đính kèm trongSubEnd Sub các câu lệnh.

Các chú thích được sử dụng để ghi lại logic chương trình và thông tin người dùng mà các lập trình viên khác có thể làm việc liền mạch trên cùng một đoạn mã trong tương lai.

Nó bao gồm thông tin như được phát triển bởi, được sửa đổi bởi và cũng có thể bao gồm logic được kết hợp. Các bình luận bị trình thông dịch bỏ qua trong khi thực thi.

Chú thích trong VBA được biểu thị bằng hai phương thức.

  • Bất kỳ câu lệnh nào bắt đầu bằng một Dấu ngoặc kép (') được coi là nhận xét. Sau đây là một ví dụ.

' This Script is invoked after successful login 
' Written by : TutorialsPoint 
' Return Value : True / False
  • Bất kỳ câu lệnh nào bắt đầu bằng từ khóa "REM". Sau đây là một ví dụ.

REM This Script is written to Validate the Entered Input 
REM Modified by  : Tutorials point/user2

Các MsgBox function hiển thị một hộp thông báo và đợi người dùng nhấp vào một nút và sau đó một hành động được thực hiện dựa trên nút được nhấp bởi người dùng.

Cú pháp

MsgBox(prompt[,buttons][,title][,helpfile,context])

Mô tả về Thông Số

  • Prompt- Một tham số bắt buộc. Chuỗi được hiển thị dưới dạng thông báo trong hộp thoại. Độ dài tối đa của lời nhắc là khoảng 1024 ký tự. Nếu thông báo kéo dài nhiều hơn một dòng, thì các dòng có thể được phân tách bằng cách sử dụng ký tự xuống dòng (Chr (13)) hoặc ký tự dòng (Chr (10)) giữa mỗi dòng.

  • Buttons- Một tham số tùy chọn. Biểu thức số chỉ định loại nút sẽ hiển thị, kiểu biểu tượng để sử dụng, danh tính của nút mặc định và phương thức của hộp thông báo. Nếu để trống, giá trị mặc định cho các nút là 0.

  • Title- Một tham số tùy chọn. Biểu thức chuỗi hiển thị trong thanh tiêu đề của hộp thoại. Nếu tiêu đề được để trống, tên ứng dụng sẽ được đặt trên thanh tiêu đề.

  • Helpfile- Một tham số tùy chọn. Biểu thức Chuỗi xác định tệp Trợ giúp được sử dụng để cung cấp trợ giúp theo ngữ cảnh cho hộp thoại.

  • Context- Một tham số tùy chọn. Biểu thức số xác định số ngữ cảnh Trợ giúp được tác giả Trợ giúp chỉ định cho chủ đề Trợ giúp thích hợp. Nếu ngữ cảnh được cung cấp, thì hồ sơ trợ giúp cũng phải được cung cấp.

Các Buttons tham số có thể nhận bất kỳ giá trị nào sau đây:

  • 0 vbOKOnly - Chỉ hiển thị nút OK.

  • 1 vbOKCancel - Hiển thị các nút OK và Cancel.

  • 2 vbAbortRetryIgnore - Hiển thị các nút Hủy bỏ, Thử lại và Bỏ qua.

  • 3 vbYesNoCancel - Hiển thị các nút Có, Không và Hủy.

  • 4 vbYesNo - Hiển thị các nút Có và Không.

  • 5 vbRetryCancel - Hiển thị các nút Thử lại và Hủy bỏ.

  • 16 vbCritical - Hiển thị biểu tượng Tin nhắn quan trọng.

  • 32 vbQuestion - Hiển thị biểu tượng Truy vấn Cảnh báo.

  • 48 vbExclamation - Hiển thị biểu tượng Thông báo Cảnh báo.

  • 64 vbInformation - Hiển thị biểu tượng Thông báo Thông tin.

  • 0 vbDefaultButton1 - Nút đầu tiên là mặc định.

  • 256 vbDefaultButton2 - Nút thứ hai là mặc định.

  • 512 vbDefaultButton3 - Nút thứ ba là mặc định.

  • 768 vbDefaultButton4 - Nút thứ tư là mặc định.

  • 0 vbApplicationModal Phương thức ứng dụng - Ứng dụng hiện tại sẽ không hoạt động cho đến khi người dùng trả lời hộp thông báo.

  • 4096 vbSystemModal System modal - Tất cả các ứng dụng sẽ không hoạt động cho đến khi người dùng trả lời hộp thông báo.

Các giá trị trên được chia hợp lý thành bốn nhóm: first group(0 đến 5) cho biết các nút sẽ được hiển thị trong hộp thông báo. Cácsecond group (16, 32, 48, 64) mô tả kiểu của biểu tượng sẽ được hiển thị, third group (0, 256, 512, 768) cho biết nút nào phải là nút mặc định và fourth group (0, 4096) xác định phương thức của hộp thông báo.

Giá trị trả lại

Hàm MsgBox có thể trả về một trong các giá trị sau đây có thể được sử dụng để xác định nút người dùng đã nhấp trong hộp thông báo.

  • 1 - vbOK - OK đã được nhấp
  • 2 - vbCancel - Đã nhấp vào Huỷ
  • 3 - vbAbort - Đã nhấp vào Hủy bỏ
  • 4 - vbRetry - Đã nhấp vào thử lại
  • 5 - vbIgnore - Đã nhấp vào bỏ qua
  • 6 - vbYes - Có đã được nhấp
  • 7 - vbNo - Không được nhấp

Thí dụ

Function MessageBox_Demo() 
   'Message Box with just prompt message 
   MsgBox("Welcome")     
   
   'Message Box with title, yes no and cancel Butttons  
   int a = MsgBox("Do you like blue color?",3,"Choose options") 
   ' Assume that you press No Button  
   msgbox ("The Value of a is " & a) 
End Function

Đầu ra

Step 1 - Chức năng trên có thể được thực thi bằng cách nhấp vào nút "Chạy" trên Cửa sổ VBA hoặc bằng cách gọi chức năng từ Trang tính Excel như được hiển thị trong ảnh chụp màn hình sau.

Step 2 - Hộp Tin nhắn Đơn giản được hiển thị với thông báo "Chào mừng" và nút "OK"

Step 3 - Sau khi nhấp OK, một hộp thoại khác được hiển thị với thông báo cùng với các nút "có, không và hủy".

Step 4- Sau khi nhấp vào nút 'Không', giá trị của nút đó (7) được lưu trữ dưới dạng số nguyên và hiển thị dưới dạng hộp thông báo cho người dùng như được hiển thị trong ảnh chụp màn hình sau. Sử dụng giá trị này, có thể hiểu người dùng đã nhấp vào nút nào.

Các InputBox functionnhắc người dùng nhập giá trị. Sau khi nhập các giá trị, nếu người dùng nhấp vào nút OK hoặc nhấn ENTER trên bàn phím, chức năng InputBox sẽ trả về văn bản trong hộp văn bản. Nếu người dùng nhấp vào nút Hủy, hàm sẽ trả về một chuỗi trống ("").

Cú pháp

InputBox(prompt[,title][,default][,xpos][,ypos][,helpfile,context])

Mô tả về Thông Số

  • Prompt- Một tham số bắt buộc. Chuỗi được hiển thị dưới dạng thông báo trong hộp thoại. Độ dài tối đa của lời nhắc là khoảng 1024 ký tự. Nếu thông báo kéo dài nhiều hơn một dòng, thì các dòng có thể được phân tách bằng cách sử dụng ký tự xuống dòng (Chr (13)) hoặc ký tự dòng (Chr (10)) giữa mỗi dòng.

  • Title- Một tham số tùy chọn. Biểu thức chuỗi hiển thị trong thanh tiêu đề của hộp thoại. Nếu tiêu đề được để trống, tên ứng dụng sẽ được đặt trên thanh tiêu đề.

  • Default- Một tham số tùy chọn. Một văn bản mặc định trong hộp văn bản mà người dùng muốn được hiển thị.

  • XPos- Một tham số tùy chọn. Vị trí củaXtrục đại diện cho khoảng cách lời nhắc từ phía bên trái của màn hình theo chiều ngang. Nếu để trống, hộp nhập liệu sẽ được căn giữa theo chiều ngang.

  • YPos- Một tham số tùy chọn. Vị trí củaYtrục biểu thị khoảng cách lời nhắc từ phía bên trái của màn hình theo chiều dọc. Nếu để trống, hộp nhập liệu được căn giữa theo chiều dọc.

  • Helpfile- Một tham số tùy chọn. Biểu thức Chuỗi xác định tệp trợ giúp được sử dụng để cung cấp Trợ giúp theo ngữ cảnh cho hộp thoại.

  • context- Một tham số tùy chọn. Biểu thức số xác định số ngữ cảnh Trợ giúp được tác giả Trợ giúp chỉ định cho chủ đề Trợ giúp thích hợp. Nếu ngữ cảnh được cung cấp, thì hồ sơ trợ giúp cũng phải được cung cấp.

Thí dụ

Hãy để chúng tôi tính diện tích của một hình chữ nhật bằng cách nhận các giá trị từ người dùng tại thời điểm chạy với sự trợ giúp của hai hộp nhập liệu (một cho chiều dài và một cho chiều rộng).

Function findArea() 
   Dim Length As Double 
   Dim Width As Double 
   
   Length = InputBox("Enter Length ", "Enter a Number") 
   Width = InputBox("Enter Width", "Enter a Number") 
   findArea = Length * Width 
End Function

Đầu ra

Step 1 - Để thực hiện tương tự, hãy gọi bằng tên hàm và nhấn Enter như trong ảnh chụp màn hình sau.

Step 2- Khi thực hiện, hộp nhập đầu tiên (chiều dài) được hiển thị. Nhập giá trị vào ô nhập liệu.

Step 3 - Sau khi nhập giá trị đầu tiên, ô nhập thứ hai (chiều rộng) được hiển thị.

Step 4- Khi nhập số thứ hai, nhấp vào nút OK. Khu vực được hiển thị như trong ảnh chụp màn hình sau.

Variablelà một vị trí bộ nhớ được đặt tên được sử dụng để chứa một giá trị có thể thay đổi trong quá trình thực thi tập lệnh. Sau đây là các quy tắc cơ bản để đặt tên một biến.

  • Bạn phải sử dụng một chữ cái làm ký tự đầu tiên.

  • Bạn không thể sử dụng dấu cách, dấu chấm (.), Dấu chấm than (!) Hoặc các ký tự @, &, $, # trong tên.

  • Tên không được dài quá 255 ký tự.

  • Bạn không thể sử dụng các từ khóa dành riêng cho Visual Basic làm tên biến.

Syntax

Trong VBA, bạn cần khai báo các biến trước khi sử dụng chúng.

Dim <<variable_name>> As <<variable_type>>

Loại dữ liệu

Có nhiều kiểu dữ liệu VBA, có thể được chia thành hai loại chính, đó là kiểu dữ liệu số và không phải kiểu số.

Các kiểu dữ liệu số

Bảng sau hiển thị các kiểu dữ liệu số và phạm vi giá trị được phép.

Kiểu Phạm vi giá trị
Byte 0 đến 255
Số nguyên -32,768 đến 32,767
Dài -2.147.483.648 đến 2.147.483.648
Độc thân

-3.402823E + 38 đến -1.401298E-45 cho các giá trị âm

1,401298E-45 đến 3,402823E + 38 cho các giá trị dương.

Gấp đôi

-1,79769313486232e + 308 đến -4,94065645841247E-324 cho các giá trị âm

4.94065645841247E-324 đến 1.79769313486232e + 308 cho các giá trị dương.

Tiền tệ -922.337.203.685.477.5808 đến 922.337.203.685.477.5807
Thập phân

+/- 79,228,162,514,264,337,593,543,950,335 nếu không sử dụng số thập phân

+/- 7.9228162514264337593543950335 (28 chữ số thập phân).

Các kiểu dữ liệu không phải số

Bảng sau hiển thị các kiểu dữ liệu không phải số và phạm vi giá trị được phép.

Kiểu Phạm vi giá trị
Chuỗi (độ dài cố định) 1 đến 65.400 ký tự
Chuỗi (độ dài thay đổi) 0 đến 2 tỷ ký tự
Ngày 1 tháng 1, 100 đến 31 tháng 12, 9999
Boolean Đúng hay sai
Vật Bất kỳ đối tượng nhúng nào
Biến thể (số) Bất kỳ giá trị nào lớn gấp đôi
Biến thể (văn bản) Giống như chuỗi có độ dài thay đổi

Example

Hãy để chúng tôi tạo một nút và đặt tên là 'Variables_demo' để chứng minh việc sử dụng các biến.

Private Sub say_helloworld_Click()
   Dim password As String
   password = "Admin#1"

   Dim num As Integer
   num = 1234

   Dim BirthDay As Date
   BirthDay = DateValue("30 / 10 / 2020")

   MsgBox "Passowrd is " & password & Chr(10) & "Value of num is " &
      num & Chr(10) & "Value of Birthday is " & BirthDay
End Sub

Output

Khi thực thi tập lệnh, đầu ra sẽ như trong ảnh chụp màn hình sau.

Hằng số là một vị trí bộ nhớ được đặt tên được sử dụng để giữ một giá trị KHÔNG THỂ thay đổi trong quá trình thực thi tập lệnh. Nếu người dùng cố gắng thay đổi giá trị Hằng số, thì việc thực thi tập lệnh sẽ dẫn đến lỗi. Các hằng được khai báo giống như cách khai báo các biến.

Sau đây là các quy tắc để đặt tên cho một hằng số.

  • Bạn phải sử dụng một chữ cái làm ký tự đầu tiên.

  • Bạn không thể sử dụng dấu cách, dấu chấm (.), Dấu chấm than (!) Hoặc các ký tự @, &, $, # trong tên.

  • Tên không được dài quá 255 ký tự.

  • Bạn không thể sử dụng các từ khóa dành riêng cho Visual Basic làm tên biến.

Cú pháp

Trong VBA, chúng ta cần gán một giá trị cho các Hằng số đã khai báo. Lỗi sẽ xảy ra nếu chúng ta cố gắng thay đổi giá trị của hằng số.

Const <<constant_name>> As <<constant_type>> = <<constant_value>>

Thí dụ

Hãy để chúng tôi tạo một nút "Constant_demo" để trình bày cách làm việc với các hằng số.

Private Sub Constant_demo_Click() 
   Const MyInteger As Integer = 42 
   Const myDate As Date = #2/2/2020# 
   Const myDay As String = "Sunday" 
   
   MsgBox "Integer is " & MyInteger & Chr(10) & "myDate is " 
      & myDate & Chr(10) & "myDay is " & myDay  
End Sub

Đầu ra

Khi thực thi tập lệnh, đầu ra sẽ được hiển thị như trong ảnh chụp màn hình sau.

An Operator có thể được xác định bằng biểu thức đơn giản - 4 + 5 bằng 9. Ở đây, 4 và 5 được gọi là operands và + được gọi là operator. VBA hỗ trợ các loại toán tử sau:

  • Toán tử số học
  • Toán tử so sánh
  • Toán tử logic (hoặc quan hệ)
  • Toán tử ghép nối

Các toán tử số học

Các toán tử số học sau được hỗ trợ bởi VBA.

Giả sử biến A giữ 5 và biến B giữ 10, thì -

Hiển thị các ví dụ

Nhà điều hành Sự miêu tả Thí dụ
+ Thêm hai toán hạng A + B sẽ cho 15
- Trừ toán hạng thứ hai với toán hạng đầu tiên A - B sẽ cho -5
* Nhân cả hai toán hạng A * B sẽ cho 50
/ Chia tử số cho mẫu số B / A sẽ cho 2
% Toán tử mô đun và phần còn lại sau một phép chia số nguyên B% A sẽ cho 0
^ Toán tử lũy thừa B ^ A sẽ cho 100000

Các toán tử so sánh

Có các toán tử so sánh sau được hỗ trợ bởi VBA.

Giả sử biến A giữ 10 và biến B giữ 20, thì -

Hiển thị các ví dụ

Nhà điều hành Sự miêu tả Thí dụ
= Kiểm tra xem giá trị của hai toán hạng có bằng nhau hay không. Nếu có, thì điều kiện là đúng. (A = B) là Sai.
<> Kiểm tra xem giá trị của hai toán hạng có bằng nhau hay không. Nếu các giá trị không bằng nhau, thì điều kiện là đúng. (A <> B) là True.
> Kiểm tra xem giá trị của toán hạng bên trái có lớn hơn giá trị của toán hạng bên phải hay không. Nếu có, thì điều kiện là đúng. (A> B) là Sai.
< Kiểm tra xem giá trị của toán hạng bên trái có nhỏ hơn giá trị của toán hạng bên phải hay không. Nếu có, thì điều kiện là đúng. (A <B) là True.
> = Kiểm tra xem giá trị của toán hạng bên trái có lớn hơn hoặc bằng giá trị của toán hạng bên phải hay không. Nếu có, thì điều kiện là đúng. (A> = B) là Sai.
<= Kiểm tra xem giá trị của toán hạng bên trái nhỏ hơn hoặc bằng giá trị của toán hạng bên phải. Nếu có, thì điều kiện là đúng. (A <= B) là True.

Các toán tử logic

Các toán tử logic sau được hỗ trợ bởi VBA.

Giả sử biến A giữ 10 và biến B giữ 0, sau đó -

Hiển thị các ví dụ

Nhà điều hành Sự miêu tả Thí dụ
Được gọi là toán tử logic AND. Nếu cả hai điều kiện đều Đúng, thì Biểu thức là đúng. a <> 0 VÀ b <> 0 là Sai.
HOẶC LÀ Được gọi là Toán tử logic HOẶC. Nếu bất kỳ điều kiện nào trong hai điều kiện là True, thì điều kiện đó là true. a <> 0 HOẶC b <> 0 là đúng.
KHÔNG PHẢI Được gọi là Toán tử logic NOT. Được sử dụng để đảo ngược trạng thái logic của toán hạng của nó. Nếu một điều kiện là đúng, thì toán tử logic NOT sẽ sai. NOT (a <> 0 OR b <> 0) là false.
XOR Được gọi là Loại trừ logic. Nó là sự kết hợp của Toán tử NOT và OR. Nếu một và chỉ một trong số các biểu thức được đánh giá là True, kết quả là True. (a <> 0 XOR b <> 0) là true.

Các toán tử kết hợp

Các toán tử Nối sau được hỗ trợ bởi VBA.

Giả sử biến A giữ 5 và biến B giữ 10 thì -

Hiển thị các ví dụ

Nhà điều hành Sự miêu tả Thí dụ
+ Thêm hai Giá trị làm Biến. Giá trị là Số A + B sẽ cho 15
& Kết hợp hai giá trị A & B sẽ cho 510

Giả sử biến A = "Microsoft" và biến B = "VBScript", sau đó -

Nhà điều hành Sự miêu tả Thí dụ
+ Kết hợp hai giá trị A + B sẽ cung cấp cho MicrosoftVBScript
& Kết hợp hai giá trị A & B sẽ cung cấp cho MicrosoftVBScript

Note- Các toán tử nối có thể được sử dụng cho cả số và chuỗi. Đầu ra phụ thuộc vào ngữ cảnh, nếu các biến giữ giá trị số hoặc giá trị chuỗi.

Việc ra quyết định cho phép lập trình viên kiểm soát luồng thực thi của một tập lệnh hoặc một trong các phần của nó. Việc thực thi được điều chỉnh bởi một hoặc nhiều câu lệnh điều kiện.

Sau đây là dạng chung của cấu trúc ra quyết định điển hình được tìm thấy trong hầu hết các ngôn ngữ lập trình.

VBA cung cấp các loại câu lệnh ra quyết định sau. Nhấp vào các liên kết sau để kiểm tra chi tiết của chúng.

Sr.No. Tuyên bố & Mô tả
1 câu lệnh if

An if câu lệnh bao gồm một biểu thức Boolean theo sau là một hoặc nhiều câu lệnh.

2 if..else statement

An if elsecâu lệnh bao gồm một biểu thức Boolean theo sau là một hoặc nhiều câu lệnh. Nếu điều kiện là Đúng, các câu lệnh dướiIfcác câu lệnh được thực thi. Nếu điều kiện sai,Else một phần của tập lệnh được thực thi.

3 if ... elseif..else statement

An if câu lệnh được theo sau bởi một hoặc nhiều ElseIf các câu lệnh, bao gồm các biểu thức Boolean và sau đó là một tùy chọn else statement, thực thi khi tất cả điều kiện trở thành sai.

4 câu lệnh if lồng nhau

An if hoặc là elseif tuyên bố bên trong khác if hoặc là elseif các câu lệnh).

5 chuyển đổi tuyên bố

A switch câu lệnh cho phép một biến được kiểm tra tính bình đẳng với một danh sách các giá trị.

Có thể có một tình huống khi bạn cần thực thi một khối mã nhiều lần. Nói chung, các câu lệnh được thực hiện tuần tự: Câu lệnh đầu tiên trong một hàm được thực hiện đầu tiên, tiếp theo là câu lệnh thứ hai, v.v.

Các ngôn ngữ lập trình cung cấp các cấu trúc điều khiển khác nhau cho phép các đường dẫn thực thi phức tạp hơn.

Một câu lệnh lặp cho phép chúng ta thực hiện một câu lệnh hoặc một nhóm câu lệnh nhiều lần. Sau đây là dạng chung của câu lệnh lặp trong VBA.

VBA cung cấp các loại vòng lặp sau để xử lý các yêu cầu về vòng lặp. Nhấp vào các liên kết sau để kiểm tra chi tiết của chúng.

Sr.No. Loại vòng lặp & Mô tả
1 vòng lặp for

Thực thi một chuỗi các câu lệnh nhiều lần và viết tắt mã quản lý biến vòng lặp.

2 vòng lặp cho ..each

Điều này được thực thi nếu có ít nhất một phần tử trong nhóm và được lặp lại cho mỗi phần tử trong một nhóm.

3 vòng lặp while..wend

Điều này kiểm tra điều kiện trước khi thực thi phần thân của vòng lặp.

4 làm .. vòng lặp trong khi

Các câu lệnh do..While sẽ được thực hiện miễn là điều kiện là Đúng. (Tức là,) Vòng lặp sẽ được lặp lại cho đến khi điều kiện là Sai.

5 làm .. cho đến khi lặp lại

Các câu lệnh do..Until sẽ được thực hiện miễn là điều kiện là Sai. (Tức là,) Vòng lặp sẽ được lặp lại cho đến khi điều kiện là Đúng.

Tuyên bố kiểm soát vòng lặp

Các câu lệnh điều khiển vòng lặp thay đổi việc thực thi từ trình tự bình thường của nó. Khi việc thực thi rời khỏi một phạm vi, tất cả các câu lệnh còn lại trong vòng lặp KHÔNG được thực thi.

VBA hỗ trợ các câu lệnh điều khiển sau. Nhấp vào các liên kết sau để kiểm tra chi tiết của chúng.

Không. Tuyên bố & Mô tả Kiểm soát
1 Exit For statement

Chấm dứt For loop câu lệnh và chuyển việc thực thi đến câu lệnh ngay sau vòng lặp

2 Câu lệnh Exit Do

Chấm dứt Do While câu lệnh và chuyển việc thực thi đến câu lệnh ngay sau vòng lặp

Chuỗi là một chuỗi các ký tự, có thể bao gồm bảng chữ cái, số, ký tự đặc biệt hoặc tất cả chúng. Một biến được cho là một chuỗi nếu nó được đặt trong dấu ngoặc kép "".

Cú pháp

variablename = "string"

Ví dụ

str1 = "string"   ' Only Alphabets
str2 = "132.45"   ' Only Numbers
str3 = "!@#$;*"  ' Only Special Characters
Str4 = "Asc23@#"  ' Has all the above

Hàm chuỗi

Có các chức năng Chuỗi VBA được xác định trước, giúp các nhà phát triển làm việc với chuỗi rất hiệu quả. Sau đây là các phương thức chuỗi được hỗ trợ trong VBA. Vui lòng nhấp vào từng phương pháp để biết chi tiết.

Sr.No. Tên & Mô tả chức năng
1 InStr

Trả về lần xuất hiện đầu tiên của chuỗi con được chỉ định. Tìm kiếm diễn ra từ trái sang phải.

2 GuideRev

Trả về lần xuất hiện đầu tiên của chuỗi con được chỉ định. Tìm kiếm diễn ra từ bên phải sang bên trái.

3 Chữ hoa

Trả về chữ thường của chuỗi được chỉ định.

4 Ucase

Trả về chữ hoa của chuỗi được chỉ định.

5 Trái

Trả về một số ký tự cụ thể từ phía bên trái của chuỗi.

6 Đúng

Trả về một số ký tự cụ thể từ phía bên phải của chuỗi.

7 Giữa

Trả về một số ký tự cụ thể từ một chuỗi dựa trên các tham số được chỉ định.

số 8 Ltrim

Trả về một chuỗi sau khi loại bỏ khoảng trắng ở bên trái của chuỗi được chỉ định.

9 Rtrim

Trả về một chuỗi sau khi loại bỏ khoảng trắng ở phía bên phải của chuỗi được chỉ định.

10 Xén

Trả về một giá trị chuỗi sau khi loại bỏ cả khoảng trống ở đầu và ở cuối.

11 Len

Trả về độ dài của chuỗi đã cho.

12 Thay thế

Trả về một chuỗi sau khi thay thế một chuỗi bằng một chuỗi khác.

13 Không gian

Điền vào một chuỗi với số khoảng trắng được chỉ định.

14 StrComp

Trả về giá trị số nguyên sau khi so sánh hai chuỗi được chỉ định.

15 Chuỗi

Trả về một chuỗi với một ký tự được chỉ định cho số lần được chỉ định.

16 StrReverse

Trả về một chuỗi sau khi đảo ngược chuỗi ký tự của chuỗi đã cho.

Chức năng Ngày và Giờ trong VBScript giúp các nhà phát triển chuyển đổi ngày và giờ từ định dạng này sang định dạng khác hoặc thể hiện giá trị ngày hoặc giờ ở định dạng phù hợp với một điều kiện cụ thể.

Hàm ngày

Sr.No. Mô tả chức năng
1 Ngày

Một Hàm, trả về ngày hệ thống hiện tại.

2 CDate

Một Hàm, chuyển đổi một đầu vào nhất định thành ngày.

3 DateAdd

Một Hàm, trả về một ngày mà một khoảng thời gian cụ thể đã được thêm vào.

4 DateDiff

Một Hàm, trả về sự khác biệt giữa hai khoảng thời gian.

5 DatePart

Một Hàm, trả về một phần cụ thể của giá trị ngày đầu vào đã cho.

6 DateSerial

Một Hàm, trả về một ngày hợp lệ cho năm, tháng và ngày nhất định.

7 FormatDateTime

Một Hàm, định dạng ngày dựa trên các tham số được cung cấp.

số 8 IsDate

Một Hàm, trả về Giá trị Boolean cho dù tham số được cung cấp có phải là ngày hay không.

9 ngày

Một Hàm, trả về một số nguyên từ 1 đến 31 đại diện cho ngày của ngày được chỉ định.

10 tháng

Một Hàm, trả về một số nguyên từ 1 đến 12 đại diện cho tháng của ngày được chỉ định.

11 Năm

Một Hàm, trả về một số nguyên đại diện cho năm của ngày được chỉ định.

12 Tên tháng

Một Hàm, trả về tên của tháng cụ thể cho ngày được chỉ định.

13 WeekDay

Một Hàm, trả về một số nguyên (1 đến 7) đại diện cho ngày trong tuần cho ngày được chỉ định.

14 WeekDayName

Một Hàm, trả về tên ngày trong tuần cho ngày được chỉ định.

Chức năng thời gian

Sr.No. Mô tả chức năng
1 Hiện nay

Một Hàm, trả về ngày và giờ hệ thống hiện tại.

2 Giờ

Một Hàm, trả về một số nguyên từ 0 đến 23 đại diện cho phần giờ của thời gian nhất định.

3 Phút

Một Hàm, trả về một số nguyên từ 0 đến 59 đại diện cho phần phút của thời gian nhất định.

4 Thứ hai

Một Hàm, trả về một số nguyên từ 0 đến 59 đại diện cho phần giây của thời gian nhất định.

5 Thời gian

Một Hàm, trả về thời gian hệ thống hiện tại.

6 Hẹn giờ

Một Hàm, trả về số giây và mili giây kể từ 12:00 SA.

7 TimeSerial

Một Hàm, trả về thời gian cho đầu vào cụ thể là giờ, phút và giây.

số 8 Giá trị thời gian

Một Hàm, chuyển đổi chuỗi đầu vào thành định dạng thời gian.

Chúng tôi biết rất rõ rằng một biến là một vùng chứa để lưu trữ một giá trị. Đôi khi, các nhà phát triển có thể nắm giữ nhiều giá trị trong một biến duy nhất tại một thời điểm. Khi một chuỗi giá trị được lưu trữ trong một biến duy nhất, thì nó được gọi làarray variable.

Khai báo mảng

Mảng được khai báo giống như cách khai báo biến ngoại trừ việc khai báo biến mảng sử dụng dấu ngoặc đơn. Trong ví dụ sau, kích thước của mảng được đề cập trong dấu ngoặc.

'Method 1 : Using Dim
Dim arr1()	'Without Size

'Method 2 : Mentioning the Size
Dim arr2(5)  'Declared with size of 5

'Method 3 : using 'Array' Parameter
Dim arr3
arr3 = Array("apple","Orange","Grapes")
  • Mặc dù, kích thước mảng được chỉ định là 5, nó có thể chứa 6 giá trị khi chỉ mục mảng bắt đầu từ ZERO.

  • Chỉ số mảng không được âm.

  • Mảng VBScript có thể lưu trữ bất kỳ loại biến nào trong một mảng. Do đó, một mảng có thể lưu trữ một số nguyên, chuỗi hoặc ký tự trong một biến mảng duy nhất.

Gán giá trị cho một mảng

Các giá trị được gán cho mảng bằng cách chỉ định một giá trị chỉ số mảng so với từng giá trị được gán. Nó có thể là một chuỗi.

Thí dụ

Thêm một nút và thêm chức năng sau.

Private Sub Constant_demo_Click()
   Dim arr(5)
   arr(0) = "1"           'Number as String
   arr(1) = "VBScript"    'String
   arr(2) = 100 		     'Number
   arr(3) = 2.45 		     'Decimal Number
   arr(4) = #10/07/2013#  'Date
   arr(5) = #12.45 PM#    'Time
  
   msgbox("Value stored in Array index 0 : " & arr(0))
   msgbox("Value stored in Array index 1 : " & arr(1))
   msgbox("Value stored in Array index 2 : " & arr(2))
   msgbox("Value stored in Array index 3 : " & arr(3))
   msgbox("Value stored in Array index 4 : " & arr(4))
   msgbox("Value stored in Array index 5 : " & arr(5))
End Sub

Khi bạn thực hiện hàm trên, nó sẽ tạo ra kết quả sau.

Value stored in Array index 0 : 1
Value stored in Array index 1 : VBScript
Value stored in Array index 2 : 100
Value stored in Array index 3 : 2.45
Value stored in Array index 4 : 7/10/2013
Value stored in Array index 5 : 12:45:00 PM

Mảng đa chiều

Mảng không chỉ giới hạn ở một thứ nguyên, tuy nhiên, chúng có thể có tối đa 60 thứ nguyên. Mảng hai chiều là mảng được sử dụng phổ biến nhất.

Thí dụ

Trong ví dụ sau, một mảng đa chiều được khai báo với 3 hàng và 4 cột.

Private Sub Constant_demo_Click()
   Dim arr(2,3) as Variant	' Which has 3 rows and 4 columns
   arr(0,0) = "Apple" 
   arr(0,1) = "Orange"
   arr(0,2) = "Grapes"           
   arr(0,3) = "pineapple" 
   arr(1,0) = "cucumber"           
   arr(1,1) = "beans"           
   arr(1,2) = "carrot"           
   arr(1,3) = "tomato"           
   arr(2,0) = "potato"             
   arr(2,1) = "sandwitch"            
   arr(2,2) = "coffee"             
   arr(2,3) = "nuts"            
           
   msgbox("Value in Array index 0,1 : " &  arr(0,1))
   msgbox("Value in Array index 2,2 : " &  arr(2,2))
End Sub

Khi bạn thực hiện hàm trên, nó sẽ tạo ra kết quả sau.

Value stored in Array index : 0 , 1 : Orange
Value stored in Array index : 2 , 2 : coffee

Tuyên bố ReDim

Câu lệnh ReDim được sử dụng để khai báo các biến mảng động và cấp phát hoặc phân bổ lại không gian lưu trữ.

Cú pháp

ReDim [Preserve] varname(subscripts) [, varname(subscripts)]

Mô tả về Thông Số

  • Preserve - Một tham số tùy chọn được sử dụng để bảo toàn dữ liệu trong một mảng hiện có khi bạn thay đổi kích thước của thứ nguyên cuối cùng.

  • Varname - Một tham số bắt buộc, biểu thị tên của biến, phải tuân theo các quy ước đặt tên biến chuẩn.

  • Subscripts - Một tham số bắt buộc, cho biết kích thước của mảng.

Thí dụ

Trong ví dụ sau, một mảng đã được xác định lại và sau đó các giá trị được giữ nguyên khi kích thước hiện có của mảng được thay đổi.

Note - Khi thay đổi kích thước mảng nhỏ hơn ban đầu, dữ liệu trong các phần tử bị loại bỏ sẽ bị mất.

Private Sub Constant_demo_Click()
   Dim a() as variant
   i = 0
   redim a(5)
   a(0) = "XYZ"
   a(1) = 41.25
   a(2) = 22
  
   REDIM PRESERVE a(7)
   For i = 3 to 7
   a(i) = i
   Next
  
   'to Fetch the output
   For i = 0 to ubound(a)
      Msgbox a(i)
   Next
End Sub

Khi bạn thực hiện hàm trên, nó sẽ tạo ra kết quả sau.

XYZ
41.25
22
3
4
5
6
7

Phương thức mảng

Có nhiều hàm sẵn có khác nhau trong VBScript giúp các nhà phát triển xử lý các mảng một cách hiệu quả. Tất cả các phương thức được sử dụng cùng với mảng được liệt kê bên dưới. Vui lòng nhấp vào tên phương thức để biết chi tiết về nó.

Sr.No. Mô tả chức năng
1 LBound

Một Hàm, trả về một số nguyên tương ứng với chỉ số con nhỏ nhất của các mảng đã cho.

2 UBound

Một Hàm, trả về một số nguyên tương ứng với chỉ số con lớn nhất của các mảng đã cho.

3 Tách ra

Một Hàm, trả về một mảng có chứa một số giá trị được chỉ định. Phân chia dựa trên dấu phân cách.

4 Tham gia

Một Hàm, trả về một chuỗi có chứa một số chuỗi con được chỉ định trong một mảng. Đây là một chức năng hoàn toàn ngược lại với Phương pháp tách.

5 Bộ lọc

Một Hàm, trả về một mảng dựa trên 0 chứa một tập hợp con của mảng chuỗi dựa trên tiêu chí lọc cụ thể.

6 IsArray

Một Hàm, trả về một giá trị boolean cho biết biến đầu vào có phải là một mảng hay không.

7 Xóa

Một Hàm, khôi phục bộ nhớ được cấp phát cho các biến mảng.

A functionlà một nhóm mã có thể sử dụng lại có thể được gọi ở bất kỳ đâu trong chương trình của bạn. Điều này giúp loại bỏ sự cần thiết phải viết đi viết lại cùng một đoạn mã. Điều này cho phép các lập trình viên chia một chương trình lớn thành một số chức năng nhỏ và dễ quản lý.

Ngoài các hàm có sẵn, VBA cũng cho phép viết các hàm do người dùng định nghĩa. Trong chương này, bạn sẽ học cách viết các hàm của riêng bạn trong VBA.

Định nghĩa hàm

Một hàm VBA có thể có một câu lệnh trả về tùy chọn. Điều này là bắt buộc nếu bạn muốn trả về giá trị từ một hàm.

Ví dụ: bạn có thể chuyển hai số trong một hàm và sau đó bạn có thể mong đợi từ hàm trả về phép nhân của chúng trong chương trình gọi của bạn.

Note - Một hàm có thể trả về nhiều giá trị được phân tách bằng dấu phẩy như một mảng được gán cho chính tên hàm.

Trước khi sử dụng một hàm, chúng ta cần xác định hàm cụ thể đó. Cách phổ biến nhất để xác định một hàm trong VBA là sử dụngFunction từ khóa, theo sau là một tên hàm duy nhất và nó có thể có hoặc không có danh sách các tham số và câu lệnh với End Functiontừ khóa cho biết kết thúc của hàm. Sau đây là cú pháp cơ bản.

Cú pháp

Thêm một nút và thêm chức năng sau.

Function Functionname(parameter-list)
   statement 1
   statement 2
   statement 3
   .......
   statement n
End Function

Thí dụ

Thêm hàm sau để trả về vùng. Lưu ý rằng một giá trị / giá trị có thể được trả về với chính tên hàm.

Function findArea(Length As Double, Optional Width As Variant)
   If IsMissing(Width) Then
      findArea = Length * Length
   Else
      findArea = Length * Width
   End If
End Function

Gọi một hàm

Để gọi một hàm, hãy gọi hàm bằng tên hàm như được hiển thị trong ảnh chụp màn hình sau.

Đầu ra của khu vực như hình dưới đây sẽ được hiển thị cho người dùng.

Sub Procedures tương tự như các chức năng, tuy nhiên có một số khác biệt.

  • Các thủ tục con KHÔNG trả về một giá trị trong khi các hàm có thể trả về hoặc không trả về một giá trị.

  • Thủ tục con CÓ THỂ được gọi mà không có từ khóa cuộc gọi.

  • Các thủ tục con luôn được bao gồm trong các câu lệnh Sub và End Sub.

Thí dụ

Sub Area(x As Double, y As Double)
   MsgBox x * y
End Sub

Thủ tục gọi điện

Để gọi một Thủ tục ở đâu đó trong tập lệnh, bạn có thể thực hiện cuộc gọi từ một hàm. Chúng ta sẽ không thể sử dụng theo cách tương tự như cách của một hàm vì thủ tục con SẼ KHÔNG trả về giá trị.

Function findArea(Length As Double, Width As Variant)
   area Length, Width    ' To Calculate Area 'area' sub proc is called
End Function

Bây giờ bạn sẽ chỉ có thể gọi hàm chứ không thể gọi thủ tục phụ như được hiển thị trong ảnh chụp màn hình sau.

Khu vực được tính toán và chỉ hiển thị trong hộp Thông báo.

Ô kết quả hiển thị ZERO vì giá trị vùng KHÔNG được trả về từ hàm. Nói tóm lại, bạn không thể thực hiện một cuộc gọi trực tiếp đến một thủ tục con từ trang tính excel.

VBA, một chương trình hướng sự kiện có thể được kích hoạt khi bạn thay đổi ô hoặc phạm vi giá trị ô theo cách thủ công. Sự kiện thay đổi có thể giúp mọi thứ dễ dàng hơn, nhưng bạn có thể rất nhanh chóng kết thúc một trang đầy định dạng. Có hai loại sự kiện.

  • Sự kiện bảng tính
  • Sự kiện sổ làm việc

Sự kiện bảng tính

Sự kiện trang tính được kích hoạt khi có sự thay đổi trong trang tính. Nó được tạo bằng cách nhấp chuột phải vào tab trang tính và chọn 'xem mã', sau đó dán mã.

Người dùng có thể chọn từng trang tính đó và chọn "Trang tính" từ trình đơn thả xuống để nhận danh sách tất cả các sự kiện Trang tính được hỗ trợ.

Sau đây là các sự kiện trang tính được hỗ trợ mà người dùng có thể thêm vào.

Private Sub Worksheet_Activate() 
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)    
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) 
Private Sub Worksheet_Calculate() 
Private Sub Worksheet_Change(ByVal Target As Range) 
Private Sub Worksheet_Deactivate() 
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) 
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Thí dụ

Giả sử, chúng ta chỉ cần hiển thị một thông báo trước khi nhấp đúp.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
   MsgBox "Before Double Click"
End Sub

Đầu ra

Khi nhấp đúp vào bất kỳ ô nào, hộp thông báo sẽ được hiển thị cho người dùng như thể hiện trong ảnh chụp màn hình sau.

Sự kiện sổ làm việc

Sự kiện sổ làm việc được kích hoạt khi có thay đổi trong toàn bộ sổ làm việc. Chúng tôi có thể thêm mã cho các sự kiện sổ làm việc bằng cách chọn 'ThisWorkbook' và chọn 'workbook' từ menu thả xuống như được hiển thị trong ảnh chụp màn hình sau. Ngay lập tức thủ tục con Workbook_open được hiển thị cho người dùng như trong ảnh chụp màn hình sau.

Sau đây là các sự kiện Sổ làm việc được hỗ trợ mà người dùng có thể thêm vào.

Private Sub Workbook_AddinUninstall() 
Private Sub Workbook_BeforeClose(Cancel As Boolean) 
Private Sub Workbook_BeforePrint(Cancel As Boolean) 
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 
Private Sub Workbook_Deactivate() 
Private Sub Workbook_NewSheet(ByVal Sh As Object) 
Private Sub Workbook_Open() 
Private Sub Workbook_SheetActivate(ByVal Sh As Object) 
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) 
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) 
Private Sub Workbook_SheetCalculate(ByVal Sh As Object) 
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) 
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object) 
Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink) 
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) 
Private Sub Workbook_WindowActivate(ByVal Wn As Window) 
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window) 
Private Sub Workbook_WindowResize(ByVal Wn As Window)

Thí dụ

Giả sử, chúng ta chỉ cần hiển thị thông báo cho người dùng rằng một trang tính mới được tạo thành công, bất cứ khi nào một trang tính mới được tạo.

Private Sub Workbook_NewSheet(ByVal Sh As Object)
   MsgBox "New Sheet Created Successfully"
End Sub

Đầu ra

Khi tạo một bảng excel mới, một thông báo sẽ được hiển thị cho người dùng như trong ảnh chụp màn hình sau.

Có ba loại lỗi trong lập trình: (a) Lỗi cú pháp, (b) Lỗi thời gian chạy và (c) Lỗi lôgic.

Lỗi cú pháp

Lỗi cú pháp, còn được gọi là lỗi phân tích cú pháp, xảy ra tại thời điểm diễn giải VBScript. Ví dụ: dòng sau đây gây ra lỗi cú pháp vì nó thiếu dấu ngoặc đóng.

Function ErrorHanlding_Demo()
   dim x,y
   x = "Tutorialspoint"
   y = Ucase(x
End Function

Lỗi thời gian chạy

Lỗi thời gian chạy, còn được gọi là ngoại lệ, xảy ra trong quá trình thực thi, sau khi diễn giải.

Ví dụ: dòng sau đây gây ra lỗi thời gian chạy vì ở đây cú pháp đúng nhưng trong thời gian chạy, nó đang cố gọi fnmultiply, đây là một hàm không tồn tại.

Function ErrorHanlding_Demo1()
   Dim x,y
   x = 10
   y = 20
   z = fnadd(x,y)
   a = fnmultiply(x,y)
End Function

Function fnadd(x,y)
   fnadd = x + y
End Function

Lỗi logic

Lỗi logic có thể là loại lỗi khó theo dõi nhất. Những lỗi này không phải là kết quả của lỗi cú pháp hoặc lỗi thời gian chạy. Thay vào đó, chúng xảy ra khi bạn mắc lỗi logic điều khiển tập lệnh của bạn và bạn không nhận được kết quả như mong đợi.

Bạn không thể mắc phải những lỗi đó, bởi vì nó phụ thuộc vào yêu cầu kinh doanh của bạn loại logic nào bạn muốn đưa vào chương trình của mình.

Ví dụ: chia một số cho không hoặc một tập lệnh được viết đi vào vòng lặp vô hạn.

Đối tượng Err

Giả sử nếu chúng ta gặp lỗi thời gian chạy, thì việc thực thi sẽ dừng lại bằng cách hiển thị thông báo lỗi. Là một nhà phát triển, nếu chúng tôi muốn ghi lại lỗi, thìError Đối tượng được sử dụng.

Thí dụ

Trong ví dụ sau, Err.Number đưa ra số lỗi và Err.Description đưa ra mô tả lỗi.

Err.Raise 6   ' Raise an overflow error.
MsgBox "Error # " & CStr(Err.Number) & " " & Err.Description
Err.Clear   ' Clear the error.

Xử lý lỗi

VBA cho phép một quy trình xử lý lỗi và cũng có thể được sử dụng để vô hiệu hóa quy trình xử lý lỗi. Nếu không có câu lệnh On Error, bất kỳ lỗi thời gian chạy nào xảy ra đều nghiêm trọng: thông báo lỗi được hiển thị và quá trình thực thi dừng đột ngột.

On Error { GoTo [ line | 0 | -1 ] | Resume Next }

Sr.No. Từ khoá & Mô tả
1

GoTo line

Bật quy trình xử lý lỗi bắt đầu ở dòng được chỉ định trong đối số dòng bắt buộc. Dòng được chỉ định phải có cùng quy trình với câu lệnh On Error, nếu không sẽ xảy ra lỗi thời gian biên dịch.

2

GoTo 0

Tắt trình xử lý lỗi đã bật trong quy trình hiện tại và đặt lại thành Không có gì.

3

GoTo -1

Tắt ngoại lệ đã bật trong quy trình hiện tại và đặt lại thành Không có gì.

4

Resume Next

Chỉ định rằng khi lỗi thời gian chạy xảy ra, điều khiển sẽ chuyển đến câu lệnh ngay sau câu lệnh xảy ra lỗi và việc thực thi tiếp tục từ thời điểm đó.

Thí dụ

Public Sub OnErrorDemo()
   On Error GoTo ErrorHandler   ' Enable error-handling routine.
   Dim x, y, z As Integer
   x = 50
   y = 0
   z = x / y   ' Divide by ZERO Error Raises
  
   ErrorHandler:    ' Error-handling routine.
   Select Case Err.Number   ' Evaluate error number.
      Case 10   ' Divide by zero error
         MsgBox ("You attempted to divide by zero!")
      Case Else
         MsgBox "UNKNOWN ERROR  - Error# " & Err.Number & " : " & Err.Description
   End Select
   Resume Next
End Sub

Khi lập trình bằng VBA, có một vài đối tượng quan trọng mà người dùng phải xử lý.

  • Đối tượng ứng dụng
  • Đối tượng sổ làm việc
  • Đối tượng trang tính
  • Đối tượng phạm vi

Đối tượng ứng dụng

Đối tượng Ứng dụng bao gồm:

  • Các tùy chọn và cài đặt trên toàn ứng dụng.
  • Các phương thức trả về các đối tượng cấp cao nhất, chẳng hạn như ActiveCell, ActiveSheet, v.v.

Thí dụ

'Example 1 :
Set xlapp = CreateObject("Excel.Sheet") 
xlapp.Application.Workbooks.Open "C:\test.xls"

'Example 2 :
Application.Windows("test.xls").Activate

'Example 3:
Application.ActiveCell.Font.Bold = True

Đối tượng sổ làm việc

Đối tượng Workbook là một thành viên của bộ sưu tập Workbooks và chứa tất cả các đối tượng Workbook hiện đang mở trong Microsoft Excel.

Thí dụ

'Ex 1 : To close Workbooks
Workbooks.Close

'Ex 2 : To Add an Empty Work Book
Workbooks.Add

'Ex 3: To Open a Workbook
Workbooks.Open FileName:="Test.xls", ReadOnly:=True

'Ex : 4 - To Activate WorkBooks
Workbooks("Test.xls").Worksheets("Sheet1").Activate

Đối tượng trang tính

Đối tượng Trang tính là một thành viên của bộ sưu tập Trang tính và chứa tất cả các đối tượng Trang tính trong sổ làm việc.

Thí dụ

'Ex 1 : To make it Invisible
Worksheets(1).Visible = False

'Ex 2 : To protect an WorkSheet
Worksheets("Sheet1").Protect password:=strPassword, scenarios:=True

Đối tượng phạm vi

Phạm vi Đối tượng đại diện cho một ô, một hàng, một cột hoặc một vùng chọn ô chứa một hoặc nhiều khối ô liên tục.

'Ex 1 : To Put a value in the cell A5
Worksheets("Sheet1").Range("A5").Value = "5235"

'Ex 2 : To put a value in range of Cells
Worksheets("Sheet1").Range("A1:A4").Value = 5

Bạn cũng có thể đọc Tệp Excel và ghi nội dung của ô vào Tệp Văn bản bằng VBA. VBA cho phép người dùng làm việc với các tệp văn bản bằng hai phương pháp:

  • Đối tượng Hệ thống Tệp
  • sử dụng lệnh Viết

Đối tượng Hệ thống Tệp (FSO)

Như tên cho thấy, FSO giúp các nhà phát triển làm việc với ổ đĩa, thư mục và tệp. Trong phần này, chúng ta sẽ thảo luận về cách sử dụng FSO.

Sr.No. Loại đối tượng & Mô tả
1

Drive

Ổ đĩa là một Đối tượng. Chứa các phương thức và thuộc tính cho phép bạn thu thập thông tin về một ổ đĩa được gắn vào hệ thống.

2

Drives

Ổ đĩa là một Bộ sưu tập. Nó cung cấp danh sách các ổ đĩa được gắn vào hệ thống, về mặt vật lý hoặc logic.

3

File

Tệp là một đối tượng. Nó chứa các phương thức và thuộc tính cho phép các nhà phát triển tạo, xóa hoặc di chuyển một tệp.

4

Files

Tệp là một Bộ sưu tập. Nó cung cấp danh sách tất cả các tệp có trong một thư mục.

5

Folder

Thư mục là một Đối tượng. Nó cung cấp các phương thức và thuộc tính cho phép các nhà phát triển tạo, xóa hoặc di chuyển các thư mục.

6

Folders

Thư mục là một Bộ sưu tập. Nó cung cấp danh sách tất cả các thư mục trong một thư mục.

7

TextStream

TextStream là một đối tượng. Nó cho phép các nhà phát triển đọc và ghi các tệp văn bản.

Lái xe

Drivelà một đối tượng, cung cấp quyền truy cập vào các thuộc tính của một ổ đĩa cụ thể hoặc chia sẻ mạng. Các thuộc tính sau được hỗ trợ bởiDrive đối tượng -

  • AvailableSpace
  • DriveLetter
  • DriveType
  • FileSystem
  • FreeSpace
  • IsReady
  • Path
  • RootFolder
  • SerialNumber
  • ShareName
  • TotalSize
  • VolumeName

Thí dụ

Step 1- Trước khi tiến hành viết script bằng FSO, chúng ta nên bật Microsoft Scripting Runtime. Để làm tương tự, hãy điều hướng đến Công cụ → Tham khảo như được hiển thị trong ảnh chụp màn hình sau.

Step 2 - Thêm "Microsoft Scripting RunTime" và Click OK.

Step 3 - Thêm dữ liệu mà bạn muốn ghi vào tệp văn bản và thêm nút lệnh.

Step 4 - Bây giờ là lúc để Script.

Private Sub fn_write_to_text_Click()
   Dim FilePath As String
   Dim CellData As String
   Dim LastCol As Long
   Dim LastRow As Long
  
   Dim fso As FileSystemObject
   Set fso = New FileSystemObject
   Dim stream As TextStream
  
   LastCol = ActiveSheet.UsedRange.Columns.Count
   LastRow = ActiveSheet.UsedRange.Rows.Count
    
   ' Create a TextStream.
   Set stream = fso.OpenTextFile("D:\Try\Support.log", ForWriting, True)
  
   CellData = ""
  
   For i = 1 To LastRow
      For j = 1 To LastCol
         CellData = Trim(ActiveCell(i, j).Value)
         stream.WriteLine "The Value at location (" & i & "," & j & ")" & CellData
      Next j
   Next i
  
   stream.Close
   MsgBox ("Job Done")
End Sub

Đầu ra

Khi thực thi tập lệnh, hãy đảm bảo rằng bạn đặt con trỏ vào ô đầu tiên của trang tính. Tệp Support.log được tạo như thể hiện trong ảnh chụp màn hình sau trong "D: \ Try".

Nội dung của tệp được hiển thị trong ảnh chụp màn hình sau.

Viết lệnh

Không giống như FSO, chúng tôi KHÔNG cần thêm bất kỳ tham chiếu nào, tuy nhiên, chúng tôi sẽ KHÔNG thể làm việc với ổ đĩa, tệp và thư mục. Chúng tôi sẽ có thể chỉ thêm luồng vào tệp văn bản.

Thí dụ

Private Sub fn_write_to_text_Click()
   Dim FilePath As String
   Dim CellData As String
   Dim LastCol As Long
   Dim LastRow As Long
  
   LastCol = ActiveSheet.UsedRange.Columns.Count
   LastRow = ActiveSheet.UsedRange.Rows.Count
    
   FilePath = "D:\Try\write.txt"
   Open FilePath For Output As #2
  
   CellData = ""
   For i = 1 To LastRow
      For j = 1 To LastCol
         CellData = "The Value at location (" & i & "," & j & ")" & Trim(ActiveCell(i, j).Value)
         Write #2, CellData
      Next j
   Next i
  
   Close #2
   MsgBox ("Job Done")
End Sub

Đầu ra

Sau khi thực thi tập lệnh, tệp "write.txt" được tạo ở vị trí "D: \ Try" như thể hiện trong ảnh chụp màn hình sau.

Nội dung của tệp được hiển thị trong ảnh chụp màn hình sau.

Sử dụng VBA, bạn có thể tạo biểu đồ dựa trên các tiêu chí nhất định. Hãy để chúng tôi xem xét nó bằng cách sử dụng một ví dụ.

Step 1 - Nhập dữ liệu mà đồ thị phải được tạo.

Step 2 - Tạo 3 nút - một nút để tạo biểu đồ thanh, nút khác để tạo biểu đồ hình tròn và nút khác để tạo biểu đồ cột.

Step 3 - Phát triển Macro để tạo từng loại biểu đồ này.

' Procedure to Generate Pie Chart
Private Sub fn_generate_pie_graph_Click()
   Dim cht As ChartObject
   For Each cht In Worksheets(1).ChartObjects
      cht.Chart.Type = xlPie
   Next cht
End Sub

' Procedure to Generate Bar Graph
Private Sub fn_Generate_Bar_Graph_Click()
   Dim cht As ChartObject
   For Each cht In Worksheets(1).ChartObjects
      cht.Chart.Type = xlBar
   Next cht
End Sub

' Procedure to Generate Column Graph
Private Sub fn_generate_column_graph_Click()
   Dim cht As ChartObject
   For Each cht In Worksheets(1).ChartObjects
      cht.Chart.Type = xlColumn
   Next cht
End Sub

Step 4- Khi nhấp vào nút tương ứng, biểu đồ được tạo. Trong đầu ra sau, nhấp vào nút tạo Biểu đồ hình tròn.

A User Formlà một hộp thoại được tạo tùy chỉnh giúp cho việc nhập dữ liệu của người dùng dễ kiểm soát hơn và dễ sử dụng hơn cho người dùng. Trong chương này, bạn sẽ học cách thiết kế một biểu mẫu đơn giản và thêm dữ liệu vào excel.

Step 1- Điều hướng đến Cửa sổ VBA bằng cách nhấn Alt + F11 và Điều hướng đến Menu "Chèn" và chọn "Biểu mẫu người dùng". Sau khi chọn, biểu mẫu người dùng được hiển thị như trong ảnh chụp màn hình sau.

Step 2 - Thiết kế các biểu mẫu bằng cách sử dụng các điều khiển cho trước.

Step 3- Sau khi thêm mỗi điều khiển, các điều khiển phải được đặt tên. Chú thích tương ứng với những gì xuất hiện trên biểu mẫu và tên tương ứng với tên logic sẽ xuất hiện khi bạn viết mã VBA cho phần tử đó.

Step 4 - Sau đây là tên của từng điều khiển được thêm vào.

Điều khiển Tên lôgic Chú thích
Từ frmempform Mẫu nhân viên
Hộp nhãn ID nhân viên trống rỗng Mã hiệu công nhân
Hộp nhãn đầu tiên tên đầu tiên Tên đầu tiên
Họ tên Hộp nhãn họ Họ
Hộp nhãn dob dob Ngày sinh
Hộp nhãn mailid tài khoản mail ID email
Hộp Nhãn Hộ chiếu Người nắm hộ chiếu Người nắm hộ chiếu
Hộp văn bản ID trống txtempid KHÔNG áp dụng
Hộp văn bản tên txtfirstname KHÔNG áp dụng
Hộp văn bản họ txtlastname KHÔNG áp dụng
Hộp văn bản ID email txtemailid KHÔNG áp dụng
Hộp kết hợp ngày cmbdate KHÔNG áp dụng
Hộp kết hợp tháng cmbmonth KHÔNG áp dụng
Hộp kết hợp năm cmbyear KHÔNG áp dụng
Có nút radio radioyes Đúng
Không có nút radio radiono Không
Nút gửi btnsubmit Gửi đi
Nút hủy btncancel Huỷ bỏ

Step 5 - Thêm mã cho sự kiện tải biểu mẫu bằng cách nhấp chuột phải vào biểu mẫu và chọn 'Mã Xem'.

Step 6 - Chọn 'Userform' từ các đối tượng thả xuống và chọn phương thức 'Initialize' như thể hiện trong ảnh chụp màn hình sau.

Step 7 - Khi Tải biểu mẫu, hãy đảm bảo rằng các hộp văn bản được xóa, các hộp thả xuống được lấp đầy và các nút Radio được đặt lại.

Private Sub UserForm_Initialize()
   'Empty Emp ID Text box and Set the Cursor 
   txtempid.Value = ""
   txtempid.SetFocus
   
   'Empty all other text box fields
   txtfirstname.Value = ""
   txtlastname.Value = ""
   txtemailid.Value = ""
   
   'Clear All Date of Birth Related Fields
   cmbdate.Clear
   cmbmonth.Clear
   cmbyear.Clear
   
   'Fill Date Drop Down box - Takes 1 to 31
   With cmbdate
      .AddItem "1"
      .AddItem "2"
      .AddItem "3"
      .AddItem "4"
      .AddItem "5"
      .AddItem "6"
      .AddItem "7"
      .AddItem "8"
      .AddItem "9"
      .AddItem "10"
      .AddItem "11"
      .AddItem "12"
      .AddItem "13"
      .AddItem "14"
      .AddItem "15"
      .AddItem "16"
      .AddItem "17"
      .AddItem "18"
      .AddItem "19"
      .AddItem "20"
      .AddItem "21"
      .AddItem "22"
      .AddItem "23"
      .AddItem "24"
      .AddItem "25"
      .AddItem "26"
      .AddItem "27"
      .AddItem "28"
      .AddItem "29"
      .AddItem "30"
      .AddItem "31"
   End With
   
   'Fill Month Drop Down box - Takes Jan to Dec
   With cmbmonth
      .AddItem "JAN"
      .AddItem "FEB"
      .AddItem "MAR"
      .AddItem "APR"
      .AddItem "MAY"
      .AddItem "JUN"
      .AddItem "JUL"
      .AddItem "AUG"
      .AddItem "SEP"
      .AddItem "OCT"
      .AddItem "NOV"
      .AddItem "DEC"
   End With
   
   'Fill Year Drop Down box - Takes 1980 to 2014
   With cmbyear
      .AddItem "1980"
      .AddItem "1981"
      .AddItem "1982"
      .AddItem "1983"
      .AddItem "1984"
      .AddItem "1985"
      .AddItem "1986"
      .AddItem "1987"
      .AddItem "1988"
      .AddItem "1989"
      .AddItem "1990"
      .AddItem "1991"
      .AddItem "1992"
      .AddItem "1993"
      .AddItem "1994"
      .AddItem "1995"
      .AddItem "1996"
      .AddItem "1997"
      .AddItem "1998"
      .AddItem "1999"
      .AddItem "2000"
      .AddItem "2001"
      .AddItem "2002"
      .AddItem "2003"
      .AddItem "2004"
      .AddItem "2005"
      .AddItem "2006"
      .AddItem "2007"
      .AddItem "2008"
      .AddItem "2009"
      .AddItem "2010"
      .AddItem "2011"
      .AddItem "2012"
      .AddItem "2013"
      .AddItem "2014"
   End With
   
   'Reset Radio Button. Set it to False when form loads.
   radioyes.Value = False
   radiono.Value = False

End Sub

Step 8- Bây giờ hãy thêm mã vào nút Gửi. Khi nhấp vào nút gửi, người dùng sẽ có thể thêm các giá trị vào trang tính.

Private Sub btnsubmit_Click()
   Dim emptyRow As Long
  
   'Make Sheet1 active
   Sheet1.Activate
  
   'Determine emptyRow
   emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1
  
   'Transfer information
   Cells(emptyRow, 1).Value = txtempid.Value
   Cells(emptyRow, 2).Value = txtfirstname.Value
   Cells(emptyRow, 3).Value = txtlastname.Value
   Cells(emptyRow, 4).Value = cmbdate.Value & "/" & cmbmonth.Value & "/" & cmbyear.Value
   Cells(emptyRow, 5).Value = txtemailid.Value
  
   If radioyes.Value = True Then
      Cells(emptyRow, 6).Value = "Yes"
   Else
      Cells(emptyRow, 6).Value = "No"
   End If
End Sub

Step 9 - Thêm phương thức đóng biểu mẫu khi người dùng nhấp vào nút Hủy.

Private Sub btncancel_Click()
   Unload Me
End Sub

Step 10- Thực hiện biểu mẫu bằng cách nhấp vào nút "Chạy". Nhập các giá trị vào biểu mẫu và nhấp vào nút 'Gửi'. Tự động các giá trị sẽ chảy vào trang tính như được hiển thị trong ảnh chụp màn hình sau.