VBA là gì và cách sử dụng cơ bản nhất trong Excel (Phần 2)

Trần Văn Huệ
Trần Văn Huệ
Oct 15 2020

Ở phần 2 của bài viết này, Gitiho tiếp tục giúp bạn đọc tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel

Xem thêm: Tìm hiểu về VBA phần 1

Lỗi macro

Khi viết các mã Excel VBA sẽ khó có thể tránh được các lỗi với các câu lệnh, nhưng làm thế nào để tìm ra các lỗi đó để khắc phục? Ở phần này của bài viết, gitiho sẽ hướng dẫn các bạn cách xử lý các lỗi macro trong Excel. Đầu tiên, hãy tạo một số lỗi.

Đặt một nút lệnh trên trang tính của bạn và thêm các dòng mã sau:

Xem thêm: Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel (Phần 1) để biết cách đặt một nút lệnh trên trang tính và các bước để thêm các dòng mã vào Excel VBA.

x = 2
Range("A1").Valu = x

Trong đó đoạn mã đầy đủ sẽ là:

Private Sub CommandButton1_Click () 
x = 2
Range("A1").Valu = x
End Sub

Bước 1: Khi bạn bấm vào nút lệnh trong Excel VBA sẽ nhận được kết quả thông báo lỗi như sau.

Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel

Bước 2: Bấm vào nút OK. Trong đó * biến x không được xác định. 

Bước 3: Trong cửa sổ Visual Basic Editor hiển thị, bạn bấm nút Reset để dừng trình gỡ lỗi.

Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel

Bước 4: Sửa lỗi bằng cách thêm dòng mã sau vào đầu mã.

Dim x As Integer

Lúc này đoạn mã đầy đủ sẽ là:

Private Sub CommandButton1_Click () 
Dim x As Integer
x = 2
Range("A1").Valu = x
End Sub

Bạn có thể đã nghe nói về kỹ thuật được gọi là gỡ lỗi trước đây. Với kỹ thuật này, bạn có thể thực hiện từng bước mã của mình.

Bước 5: Trong Visual Basic Editor, đặt con trỏ của bạn trước từ Private và nhấn F8.

Dòng đầu tiên chuyển sang màu vàng.

Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel

Bước 6: Nhấn F8 ba lần nữa.

Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel

Thông báo lỗi sau xuất hiện.

Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel

Như hình ảnh hiển thị cho thấy đối tượng Range có một thuộc tính là Value. Trong đó từ đã Value không được viết đúng chính tả (chỉ ghi là Valu) ở đây và chúng ta đã xác định được lỗi của mã VBA trong này. Gỡ lỗi là một cách tuyệt vời để không chỉ tìm lỗi mà còn hiểu mã tốt hơn. 

Xem thêm:  Hướng dẫn các phép toán trong VBA: Phép nhân, phép chia, phép cộng, mô đun

String Manipulation (Thao tác chuỗi)

Trong phần này của bài viết, Gitiho sẽ hướng dẫn các bạn cách tìm các hàm quan trọng nhất để thao tác với chuỗi trong Excel VBA .

Đặt một nút lệnh trên trang tính của bạn và thêm các dòng mã bên dưới. Để thực hiện các dòng mã, hãy bấm vào nút lệnh trên trang tính.

Join Strings (Nối chuỗi)

Ở đoạn mã dưới đây, chúng tôi sử dụng toán tử & để nối (nối) các chuỗi với nhau. Mã cụ thể sẽ như sau: 

Dim text1 As String, text2 As String
text1 = "Hi"
text2 = "Tim"
MsgBox text1 & " " & text2

Lúc này đoạn mã đầy đủ sẽ là:

Private Sub CommandButton1_Click () 
Dim text1 As String, text2 As String
text1 = "Hi"
text2 = "Tim"
MsgBox text1 & " " & text2
End Sub

Sau đó đóng cửa sổ Visual Basic Editor và bấm vào nút lệnh để chạy đoạn code trên trong Excel VBA, chúng ta sẽ nhận được kết quả như sau:

Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel

Lưu ý: Để chèn khoảng trắng, hãy sử dụng dấu ""

Left (Trái)

Để trích xuất các ký tự ngoài cùng bên trái từ một chuỗi, hãy sử dụng Left. Mã cụ thể sẽ như sau:

Dim text As String
text = "example text"
MsgBox Left(text, 4)

Sau khi đóng cửa sổ Visual Basic Editor và bấm vào nút lệnh Excel VBA, chúng ta sẽ nhận được kết quả như sau:

Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel

Right (Phải)

Để trích xuất các ký tự ngoài cùng bên phải từ một chuỗi, hãy sử dụng Right. Chúng ta cũng có thể chèn trực tiếp văn bản vào một hàm.

MsgBox Right("example text", 2)

Kết quả trả về sau khi bạn bấm vào nút lệnh Excel VBA sẽ như hình dưới đây:

Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel

Mid (Giữa)

Để trích xuất một chuỗi con, bắt đầu ở giữa một chuỗi, hãy sử dụng Mid. Bạn có thể chèn trực tiếp văn bản vào một hàm.

MsgBox Mid("example text", 9, 2)

Kết quả trả về, bạn sẽ nhận được thông báo như hình dưới đây:

Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel

Trong đó: Bắt đầu ở vị trí 9 (t) với độ dài 2. Bạn có thể bỏ qua đối số thứ ba nếu muốn trích xuất một chuỗi con bắt đầu ở giữa một chuỗi, cho đến cuối chuỗi.

Len

Để lấy độ dài của một chuỗi, hãy sử dụng Len. Mã chi tiết sẽ như sau:

MsgBox Len("example text")

Kết quả trả về khi bạn bấm nút lệnh Excel VBA sẽ nhận được thông báo như hình dưới đây:

Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel

Lưu ý: Bao gồm khoảng trống (vị trí 8)!

Instr

Để tìm vị trí của một chuỗi con trong một chuỗi, hãy sử dụng Instr. Mã chi tiết sẽ như sau:

MsgBox Instr("example text", "am")

Kết quả trả về khi bạn bấm nút lệnh Excel VBA sẽ nhận được thông báo như hình dưới đây:

Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel

Lưu ý: chuỗi "am" được tìm thấy ở vị trí 3.

Date and Time

Trong phần tiếp theo này, Gitiho sẽ hướng dẫn các bạn cách sử dụng các mã Excel VBA để làm việc với các đối tượng: Ngày, tháng, năm, ngày và giờ hiện tại; Giờ, phút, giây; Giá trị thời gian. 

Tìm hiểu cách làm việc với ngày và giờ trong Excel VBA .

Đầu tiên bạn đặt một nút lệnh trên trang tính của mình và thêm các dòng mã bên dưới vào cửa sổ trình soạn thảo Visual Basic Editor. 

Mỗi đoạn mã dưới đây phải được nhập vào giữa dòng Private Sub CommandButton1_Click () và End Sub.

Để chạy các dòng mã này, bạn hãy bấm vào nút lệnh đã đặt trên trang tính.

Năm, Tháng, Ngày của một Ngày

Mã macro dưới đây sẽ lấy năm của một ngày. Để khai báo ngày, hãy sử dụng câu lệnh Dim. Để khởi tạo một ngày, hãy sử dụng hàm DateValue. Đoạn mã sẽ như sau:
Dim exampleDate As Date
exampleDate = DateValue("Jan 19, 2020")
MsgBox Year(exampleDate)

Đoạn mã đầy đủ sẽ là:

Private Sub CommandButton1_Click () 
Dim exampleDate As Date
exampleDate = DateValue("Jan 19, 2020")
MsgBox Year(exampleDate)
End Sub

Khi đóng cửa sổ Visual Basic Editor và bấm vào nút lệnh để chạy đoạn code trên trong Excel VBA, chúng ta sẽ nhận được kết quả như sau:

Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel

Lưu ý: Sử dụng Month và Day để lấy tháng và ngày của một ngày.

DateAdd

Để thêm một số ngày vào một ngày, hãy sử dụng hàm DateAdd. Hàm DateAdd có ba đối số. Điền vào "d" cho đối số đầu tiên để thêm ngày. Điền vào 3 để đối số thứ hai thêm 3 ngày. Đối số thứ ba đại diện cho ngày mà số ngày sẽ được thêm vào.

Đoạn mã sẽ như sau:

Dim firstDate As Date, secondDate As Date
firstDate = DateValue("Jan 19, 2020")
secondDate = DateAdd("d", 3, firstDate)
MsgBox secondDate

Khi đóng cửa sổ Visual Basic Editor và bấm vào nút lệnh để chạy đoạn code trên trong Excel VBA, chúng ta sẽ nhận được kết quả như sau:

Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel

Lưu ý: Thay đổi "d" thành "m" để thêm một số tháng vào một ngày. Đặt con trỏ của bạn vào dòng DateAdd trong Visual Basic Editor và bấm phím F1 để được trợ giúp về các khoảng thời gian khác. 

Ngày và giờ hiện tại

Để lấy ngày và giờ hiện tại, hãy sử dụng chức năng Now. Đoạn mã chi tiết sẽ như sau:

MsgBox Now

Khi bấm vào nút lệnh để chạy đoạn code trên trong Excel VBA, chúng ta sẽ nhận được kết quả như sau:

Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel

Giờ, phút, giây

Nếu bạn muốn nhận giờ của một thời gian, hãy sử dụng hàm Hour với mã chi tiết như sau:

MsgBox Hour(Now)

Khi bấm vào nút lệnh để chạy đoạn code trên trong Excel VBA, chúng ta sẽ nhận được kết quả như sau:

Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel

Lưu ý: Tương tự sử dụng hàm Minute và Second để lấy phút và giây của thời gian.

Giá trị thời gian

Hàm TimeValue sẽ chuyển đổi một chuỗi thành số serial thời gian. Số serial của thời gian là một số từ 0 đến 1. Ví dụ: Buổi trưa (nửa ngày) được biểu thị bằng 0,5. Do đó đoạn mã chi tiết sẽ như sau: 

MsgBox TimeValue("9:20:01 am")

Kết quả trả về sẽ như hình dưới đây:

Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel

Bây giờ, để thấy rõ rằng Excel xử lý thời gian nội bộ dưới dạng số từ 0 đến 1, hãy thêm các dòng mã sau:

Dim y As Double
y = TimeValue("09:20:01")
MsgBox y

Kết quả trả về sẽ là:

Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel

Events (Sự kiện)

Sự kiện là các hành động do người dùng thực hiện để kích hoạt Excel VBA thực thi mã.

Thông báo sự kiện khi mở tệp Excel 

Mã được thêm vào sự kiện mở sổ làm việc (Workbook Open Event) sẽ được Excel VBA thực thi khi bạn mở workbook.

Bước 1: Mở trình soạn thảo Visual Basic Editor bằng cách bấm nút Visual Basic trên tab Developer hoặc nhấn tổ hợp phím Alt+F11.

Bước 2: Kích đúp vào Workbook ở phía dưới mục Project Explorer của cột bên trái.

Bước 3: Chọn Workbook từ danh sách thả xuống bên trái. Chọn Open từ danh sách thả xuống bên phải.

Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel

Bước 4: Thêm dòng mã sau vào sự kiện mở sổ làm việc (Workbook Open Event):

MsgBox "Good Morning"

Bước 5: Sau đó đóng cửa sổ Visual Basic Editor và đóng tệp Excel. Rồi mở lại tệp Excel. Kết quả bảng thông báo sau sẽ hiển thị: 

Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel

Thông báo sự kiện khi thay đổi trang tính (Worksheet) 

Đoạn mã dưới đây được thêm vào sự kiện thay đổi trang tính (Worksheet Change Event) sẽ được Excel VBA thực thi khi bạn thay đổi một ô trên worksheet.

Bước 1: Mở trình soạn thảo Visual Basic Editor bằng cách bấm nút Visual Basic trên tab Developer hoặc nhấn tổ hợp phím Alt+F11.

Bước 2: Kích đúp vào một sheet (ví dụ Sheet1) ở phía dưới mục Project Explorer của cột bên trái.

Bước 3: Chọn Worksheet từ danh sách thả xuống bên trái. Chọn Change từ danh sách thả xuống bên phải.

Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel

Thêm các dòng mã sau vào Worksheet Change Event

Bước 4: Bây giờ sự kiện thay đổi trang tính sẽ chú ý tất cả các thay đổi trên Sheet1. Như trong trường hợp này, chúng tôi chỉ muốn Excel VBA làm điều gì đó nếu có gì đó thay đổi trong ô B2. Để thực hiện, hãy thêm các dòng mã sau:

If Target.Address = "$B$2" Then
End If

Bước 5: Như vậy chúng tôi chỉ muốn Excel VBA hiển thị một bảng thông báo nếu người dùng nhập giá trị lớn hơn 80. Để đạt được điều này, hãy thêm dòng mã sau giữa If và End If.

If Target.Value > 80 Then MsgBox "Goal Completed"

Bước 6: Trên Sheet1, nhập một số lớn hơn 80 vào ô B2.

Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel

Kết quả bạn sẽ nhận được bảng thông báo như hình dưới đây:

Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel

Array (Mảng)

Array là một nhóm các biến. Trong Excel VBA, bạn có thể tham chiếu đến một biến (phần tử) cụ thể của mảng bằng cách sử dụng tên mảng và số chỉ mục.

Mảng một chiều (One-dimensional Array)

Để tạo mảng một chiều, hãy thực hiện các bước sau.

Đặt một nút lệnh trên trang tính của bạn và thêm các dòng mã sau vào cửa sổ Visual Basic Editor. Trong đó đoạn mã dưới đây phải được nhập vào giữa dòng Private Sub CommandButton1_Click () và End Sub.

Dim Films(1 To 5) As String
Films(1) = "Lord of the Rings"
Films(2) = "Speed"
Films(3) = "Star Wars"
Films(4) = "The Godfather"
Films(5) = "Pulp Fiction"
MsgBox Films(4)

Kết quả khi bạn bấm vào nút lệnh trên trang tính, bảng thông báo sau sẽ hiển thị:

Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel

Giải thích: Dòng mã đầu tiên sẽ khai báo một mảng String với tên Films. Mảng bao gồm năm phần tử. Tiếp theo, chúng ta khởi tạo từng phần tử của mảng. Cuối cùng, hiển thị phần tử thứ tư bằng MsgBox.

Mảng hai chiều (Two-dimensional Array)

Để tạo mảng hai chiều, hãy thực hiện các bước sau. Lần này chúng ta sẽ đọc tên từ trang tính.

Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel

Đặt một nút lệnh trên trang tính của bạn và thêm các dòng mã sau vào cửa sổ Visual Basic Editor:

Dim Films(1 To 5, 1 To 2) As String
Dim i As Integer, j As Integer
For i = 1 To 5
    For j = 1 To 2
        Films(i, j) = Cells(i, j).Value
    Next j
Next i
MsgBox Films(4, 2)

Kết quả khi bạn bấm vào nút lệnh trên trang tính, bảng thông báo sau sẽ hiển thị:

Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel

Giải thích: Dòng mã đầu tiên khai báo một mảng String với tên Films. Mảng có hai chiều. Nó bao gồm 5 hàng và 2 cột. Hai biến khác kiểu Integer được sử dụng cho Double Loop để khởi tạo từng phần tử của mảng. Cuối cùng sẽ hiển thị phần tử tại giao điểm của hàng 4 và cột 2.

Function và Sub 

Sự khác biệt giữa một hàm Function và một sub trong Excel VBA là một hàm có thể trả về một giá trị trong khi một sub thì không thể. Các hàm và sub trở nên rất hữu ích khi kích thước chương trình tăng lên.

Function

Nếu bạn muốn Excel VBA thực hiện một tác vụ trả về kết quả, bạn có thể sử dụng một hàm. Đặt một chức năng vào một moduln (Trong cửa sổ Visual Basic Editor, truy cập vào menu Insert, Module). Như trong ví dụ này, Function có tên Area.

Function Area(x As Double, y As Double) As Double
Area = x * y
End Function

Giải thích: Hàm này có hai đối số (kiểu Double) và một kiểu trả về (phần sau As cũng thuộc kiểu Double). Bạn có thể sử dụng tên của hàm (Area) trong mã của mình để cho biết bạn muốn trả về kết quả nào (ở đây là x*y).

Bây giờ bạn có thể tham chiếu đến hàm này (nói cách khác là gọi hàm) từ một nơi khác trong mã của mình bằng cách chỉ cần sử dụng tên của hàm và đưa ra một giá trị cho mỗi đối số.

Đặt một nút lệnh trên trang tính của bạn và thêm các dòng mã sau vào cửa sổ Visual Basic Editor:

Dim z As Double
z = Area(3, 5) + 2
MsgBox z

Giải thích: Hàm trả về một giá trị vì vậy bạn phải 'lấy' giá trị này trong mã của mình. Bạn có thể sử dụng một biến khác (z) cho việc này. Tiếp theo, có thể thêm một giá trị khác vào biến này (nếu muốn). Cuối cùng, hiển thị giá trị bằng MsgBox.

Kết quả khi bạn bấm vào nút lệnh trên trang tính, bảng thông báo sau sẽ hiển thị:

Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel

Sub

Nếu bạn muốn Excel VBA thực hiện một số hành động, bạn có thể sử dụng một Sub. Đặt một Sub vào một modul (Trong cửa sổ Visual Basic Editor, truy cập vào menu Insert, Module). Như trong ví dụ này, Sub có tên Area.

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

Giải thích: Sub này có hai đối số (kiểu Double). Bạn có thể tham chiếu đến sub này từ một nơi khác trong mã của bạn bằng cách sử dụng tên của sub và đưa ra một giá trị cho mỗi đối số.

Đặt một nút lệnh trên trang tính của bạn và thêm các dòng mã sau vào cửa sổ Visual Basic Editor:

Area 3, 5

Kết quả khi bạn bấm vào nút lệnh trên trang tính sẽ hiển thị như hình dưới đây:

Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel

Như vậy bạn có thể thấy sự khác biệt giữa Function và Sub. Function trả lại những giá trị 15. Chúng tôi đã thêm giá trị 2 vào kết quả này và hiển thị kết quả cuối cùng. Khi gọi Sub sẽ không còn quyền kiểm soát nhiều hơn kết quả (15) vì sub không thể trả về giá trị.

Application Object (Đối tượng ứng dụng)

Excel là một trong những dạng đối tượng. Chúng tôi gọi đó là các đối tượng ứng dụng (Application object). Các đối tượng ứng dụng cho phép truy cập đến rất nhiều lựa chọn liên quan đến Excel .

WorksheetFunction

Bạn có thể sử dụng thuộc tính WorksheetFunction trong Excel VBA để truy cập các hàm Excel.

Ví dụ để đặt một nút lệnh trên trang tính của bạn và thêm các dòng mã sau vào cửa sổ Visual Basic Editor:

Range("A3").Value = Application.WorksheetFunction.Average(Range("A1:A2"))

Kết quả khi bạn bấm vào nút lệnh trên trang tính, Excel VBA sẽ tính giá trị trung bình của các giá trị trong ô A1 và ô A2 và đặt kết quả vào ô A3.

Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel

Lưu ý: Thay vì Application.WorksheetFunction.Average, chỉ cần sử dụng WorksheetFunction.Average. Nếu bạn nhìn vào thanh công thức, có thể thấy rằng chính công thức đó không được chèn vào ô A3. Để chèn chính công thức vào ô A3, hãy sử dụng dòng mã sau:

Range("A3").Value = "=AVERAGE(A1:A2)"

ScreenUpdating

Đôi khi bạn có thể thấy hữu ích khi tắt ScreenUpdating trong khi thực thi mã. Kết quả là mã của bạn sẽ chạy nhanh hơn.

1. Ví dụ đặt một nút lệnh trên trang tính của bạn và thêm các dòng mã sau vào cửa sổ Visual Basic Editor:

Dim i As Integer
For i = 1 To 10000
    Range("A1").Value = i
Next i

Khi bạn bấm vào nút lệnh trên trang tính, Excel VBA sẽ hiển thị mỗi giá trị một phần nhỏ của giây và điều này có thể mất một chút thời gian.

Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel

2. Nhưng để tăng tốc quá trình xử lý, hãy cập nhật mã như sau.

Dim i As Integer

Application.ScreenUpdating = False
For i = 1 To 10000
    Range("A1").Value = i
Next i
Application.ScreenUpdating = True

Kết quả là mã của bạn sẽ chạy nhanh hơn nhiều và bạn sẽ chỉ thấy kết quả cuối cùng (10000).

DisplayAlerts

Bạn có thể hướng dẫn Excel VBA không hiển thị cảnh báo trong khi thực thi mã.

1. Ví dụ đặt một nút lệnh trên trang tính của bạn và thêm các dòng mã sau vào cửa sổ Visual Basic Editor:

ActiveWorkbook.Close

Khi bạn bấm vào nút lệnh trên trang tính, Excel VBA sẽ đóng tệp Excel của bạn và yêu cầu bạn lưu các thay đổi bạn đã thực hiện.

Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel

2. Để hướng dẫn Excel VBA không hiển thị cảnh báo này trong khi thực thi mã, hãy cập nhật mã sau vào cửa sổ Visual Basic Editor.

Application.DisplayAlerts = False
ActiveWorkbook.Close
Application.DisplayAlerts = True

Do đó, Excel VBA đóng tệp Excel của bạn mà không yêu cầu bạn lưu các thay đổi bạn đã thực hiện. Mọi thay đổi đều bị mất.

Tính toán

Theo mặc định, tính toán được đặt thành tự động. Do đó, Excel sẽ tự động tính toán lại bảng tính mỗi khi giá trị ảnh hưởng đến công thức thay đổi. Nếu bảng tính của bạn chứa nhiều công thức phức tạp, bạn có thể tăng tốc macro của mình bằng cách thiết lập tính toán thành thủ công.

1. Ví dụ: đặt một nút lệnh trên trang tính của bạn và thêm các dòng mã sau vào cửa sổ Visual Basic Editor:

Application.Calculation = xlCalculationManual

Như vậy, khi bạn nhấp vào nút lệnh trên trang tính, Excel VBA sẽ đặt tính toán thành thủ công.

2. Bạn có thể xác minh điều này bằng cách truy cập vào menu File > Options > Formulas.

Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel

3. Bây giờ khi bạn thay đổi giá trị của ô A1, giá trị của ô B1 sẽ không được tính lại.

Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel

Bạn có thể tính toán lại bảng tính của mình theo cách thủ công bằng cách nhấn F9.

4. Trong hầu hết các tình huống, bạn sẽ thiết lập tính toán thành tự động trở lại khi kết thúc mã của mình. Chỉ cần thêm dòng mã sau để đạt được điều này.

Application.Calculation = xlCalculationAutomatic

ActiveX Controls 

Trong phần này của bài viết, Gitiho sẽ hướng dẫn các bạn tìm hiểu cách tạo ActiveX Controls, chẳng hạn như nút lệnh, hộp văn bản, hộp danh sách …Để tạo ActiveX Controls, hãy thực hiện các bước sau.

Bước 1: Trên tab Developer, nhấn Insert.

Bước 2: Trong nhóm tính năng ActiveX Controls, hãy bấm vào nút Command Button trong menu xổ xuống để chèn nút lệnh điều khiển.

Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel

Bước 3: Kích giữ chuột trái và kéo để tạo một nút lệnh trên sheets bất kỳ trong file Excel, nơi bạn muốn đặt nút lệnh.

Bước 4: Kích chuột phải vào nút lệnh (đảm bảo nút Design Mode được chọn). 

Bước 5: Chọn tùy chọn View Code trong menu xổ xuống. Trình soạn thảo Visual Basic xuất hiện.

Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel

Lưu ý: Bạn có thể thay đổi chú thích và tên của một điều khiển bằng cách kích chuột phải vào điều khiển (đảm bảo Design Mode được chọn) và chọn tùy chọn Properties. Thay đổi chú thích của nút lệnh thành 'Apply Blue Text Color'. Bây giờ, chúng ta sẽ đặt tên CommandButton1 cho nút bấm.

Bước 6: Thêm dòng mã được hiển thị bên dưới giữa Private Sub CommandButton1_Click () và End Sub.

Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel

Bước 7: Chọn phạm vi B2:B4 và bấm vào nút lệnh (đảm bảo nút Design Mode trên thanh công cụ ribbon được bỏ chọn).

Kết quả sẽ hiển thị như hình dưới đây:

Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel

UserForm 

Ở phần này Gitiho sẽ hướng dẫn bạn cách tạo UserForm trong VBA. Sử dụng UserForm trong VBA sẽ giúp bạn tạo một ứng dụng đúng nghĩa. Với giao diện, các sự kiện và lệnh được liên kết với đối tượng trong UserForm VBA, bạn có thể tạo được một ứng dụng có giao diện thực hiện theo các yêu cầu được lập trình, giống như hình dưới đây.

Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel

Chèn Controls

Để thêm Controls vào UserForm, hãy thực hiện các bước sau.

Bước 1: Mở trình soạn thảo Visual Basic Editor bằng cách, trên tab Developer, bấm nút Visual Basic hoặc nhấn tổ hợp phím Alt+F11. Nếu Project Explorer không hiển thị, hãy truy cập vào menu View > Project Explorer.

Bước 2: Nhấn phím Insert > UserForm. Nếu Toolbox không tự động xuất hiện, truy cập vào menu View > Toolbox. Màn hình của bạn sẽ được thiết lập như bên dưới.

Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel

Trong đó:

(1): Khung tạo giao diện người dùng. Nơi bạn có thể bố trí các đối tượng tương tác, hiện thị từ hộp công cụ Toolbox (2)

(2): Các đối tượng để tạo giao diện như Label (nhãn đặt tên), TextBox (ô nhập liệu), ListBox (danh sách) …

Bước 3: Chèn các control được liệt kê trong bảng bên dưới. Khi điều này được hoàn thành, kết quả sẽ phù hợp với hình ảnh của Userform được hiển thị trước đó. 

Ví dụ: Để tạo điều khiển hộp văn bản bằng cách kích vào TextBox từ Toolbox. Tiếp theo, bạn có thể kéo một hộp văn bản trên Userform. Khi bạn đến khung Car, hãy nhớ vẽ khung này trước khi bạn đặt hai nút tùy chọn vào đó.

Bước 4: Thay đổi tên và chú thích của các control theo bảng dưới đây. Tên (Name) được sử dụng trong mã VBA Excel. Phụ đề (Captions) là những thứ xuất hiện trên màn hình của bạn. Bạn nên thay đổi tên của các control. Điều này sẽ làm cho mã của bạn dễ đọc hơn. Để thay đổi tên và chú thích của các control, truy cập vào menu View > Properties Window và kích vào từng control riêng lẻ một.

Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel

Lưu ý: Hộp tổ hợp (combo box) là một danh sách thả xuống từ đó người dùng có thể chọn một mục hoặc điền vào lựa chọn của riêng mình. Nhưng chỉ có thể chọn một trong các nút tùy chọn.

Hiển thị Userform

Để hiển thị Userform, hãy đặt một nút lệnh trên trang tính của bạn và thêm dòng mã sau:

Private Sub CommandButton1_Click()
DinnerPlannerUserForm.Show
End Sub

Bây giờ chúng ta sẽ tạo Sub UserForm_Initialize. Khi bạn sử dụng phương thức Show cho UserForm thì Sub này sẽ tự động được thực thi.

Bước 1: Mở trình soạn thảo Visual Basic Editor bằng cách, truy cập thẻ Developer, bấm nút Visual Basic hoặc nhấn tổ hợp phím Alt+F11.

Bước 2: Kích chọn Worksheet ở phía dưới mục Project Explorer của cột bên trái, kích chuột phải vào DinnerPlannerUserForm và chọn View Code.

Bước 3: Chọn Userform từ danh sách thả xuống bên trái. Tiếp theo chọn Initialize từ danh sách thả xuống bên phải.

Bước 4: Nhập vào các dòng mã sau:

Private Sub UserForm_Initialize()
'Empty NameTextBox
NameTextBox.Value = ""
'Empty PhoneTextBox
PhoneTextBox.Value = ""
'Empty CityListBox
CityListBox.Clear
'Fill CityListBox
With CityListBox
    .AddItem "San Francisco"
    .AddItem "Oakland"
    .AddItem "Richmond"
End With
'Empty DinnerComboBox
DinnerComboBox.Clear
'Fill DinnerComboBox
With DinnerComboBox
    .AddItem "Italian"
    .AddItem "Chinese"
    .AddItem "Frites and Meat"
End With
'Uncheck DataCheckBoxes
DateCheckBox1.Value = False
DateCheckBox2.Value = False
DateCheckBox3.Value = False
'Set no car as default
CarOptionButton2.Value = True
'Empty MoneyTextBox
MoneyTextBox.Value = ""
'Set Focus on NameTextBox
NameTextBox.SetFocus
End Sub

Giải thích: Hộp văn bản được làm trống, hộp danh sách và hộp tổ hợp được lấp đầy, hộp kiểm không được chọn … , v.v.

Gán các Macro

Như vậy chúng ta đã tạo được phần đầu của UserForm. Mặc dù có vẻ đã sẵn sàng, nhưng khi chúng ta bấm vào các nút lệnh trên UserForm lại không có gì xảy ra.

Bước 1: Mở Trình soạn thảo Visual Basic.

Bước 2: Trong khung Project Explorer bên trái, kích đúp vào mục DinnerPlannerUserForm.

Bước 3: Kích đúp vào nút Money spin.

Bước 4: Nhập vào các dòng mã sau:

Private Sub MoneySpinButton_Change()
MoneyTextBox.Text = MoneySpinButton.Value
End Sub

Giải thích: Dòng mã này cập nhật hộp văn bản khi bạn sử dụng nút Spin.

Bước 5: Kích đúp vào nút OK.

Bước 6: Tiếp tục nhập vào các dòng mã sau:

Private Sub OKButton_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 = NameTextBox.Value
Cells(emptyRow, 2).Value = PhoneTextBox.Value
Cells(emptyRow, 3).Value = CityListBox.Value
Cells(emptyRow, 4).Value = DinnerComboBox.Value
If DateCheckBox1.Value = True Then Cells(emptyRow, 5).Value = DateCheckBox1.Caption
If DateCheckBox2.Value = True Then Cells(emptyRow, 5).Value = Cells(emptyRow, 5).Value & " " & DateCheckBox2.Caption
If DateCheckBox3.Value = True Then Cells(emptyRow, 5).Value = Cells(emptyRow, 5).Value & " " & DateCheckBox3.Caption
If CarOptionButton1.Value = True Then
    Cells(emptyRow, 6).Value = "Yes"
Else
    Cells(emptyRow, 6).Value = "No"
End If
Cells(emptyRow, 7).Value = MoneyTextBox.Value
End Sub

Giải thích: đầu tiên, chúng tôi kích hoạt Sheet1. Tiếp theo, xác định emptyRow. Các biến emptyRow là hàng trống đầu tiên và tăng lên mỗi khi một bản ghi được thêm vào. Cuối cùng, chúng tôi chuyển thông tin từ Userform sang các cột cụ thể của emptyRow.

Bước 7: Kích đúp vào nút Clear.

Bước 8: Tiếp tục thêm vào các dòng mã sau:

Private Sub ClearButton_Click()
Call UserForm_Initialize
End Sub

Giải thích: Dòng mã này gọi Sub UserForm_Initialize khi bạn bấm vào nút Clear.

Bước 9: Kích đúp vào nút Cancel.

Bước 10: Nhập vào dòng mã sau:

Private Sub CancelButton_Click()
Unload Me
End Sub

Giải thích: Dòng mã này sẽ đóng Userform khi bạn nhấp vào nút Cancel.

Kiểm tra UserForm

Đóng cửa sổ Visual Basic Editor và nhập các nhãn được hiển thị bên dưới vào hàng 1 và kiểm tra các UserForm.

Kết quả sẽ hiển thị như hình dưới đây:

Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel


Cuối cùng, đừng quên tham khảo khóa học EXG01 - Tuyệt đỉnh Excel - Trở thành bậc thầy Excel trong 16 giờ hoặc khoá học VBAG01 – Tuyệt đỉnh VBA – Viết code trong tầm tay rất hay và bổ ích của Gitiho bạn nhé! Hẹn gặp lại các bạn trong những bài viết tiếp theo. 

0/5 - (0 bình chọn)

0/5 - (0 bình chọn)

Bài viết liên quan

Hướng dẫn về một số hàm DAX căn bản trong Power Pivot (Phần 2)

Hướng dẫn về một số hàm DAX căn bản trong Power Pivot (Phần 2)

Hướng dẫn cách phân biệt Data Table với Lookup Table trong Power Pivot

Hướng dẫn cách phân biệt Data Table với Lookup Table trong Power Pivot

Hướng dẫn cách mở thẻ Power Pivot trên thanh Menu của Excel

Hướng dẫn cách mở thẻ Power Pivot trên thanh Menu của Excel

Hướng dẫn cách phân biệt giữa Power Pivot và Pivot Table

Hướng dẫn cách phân biệt giữa Power Pivot và Pivot Table

Hướng dẫn cách kết nối các bảng trong Power Pivot

Hướng dẫn cách kết nối các bảng trong Power Pivot

Hướng dẫn cách đổi tên bảng và tên cột trong Power Pivot

Hướng dẫn cách đổi tên bảng và tên cột trong Power Pivot

@ 2020 - Bản quyền của Công ty cổ phần công nghệ giáo dục Gitiho Việt Nam
Giấy chứng nhận Đăng ký doanh nghiệp số: 0109077145, cấp bởi Sở kế hoạch và đầu tư TP. Hà Nội