_ Biểu mẫu đăng ký khóa học là một biểu mẫu đơn giản minh họa các nguyên tắc thiết kế UserForm và mã hóa VBA liên quan._

Nó sử dụng một loạt các điều khiển bao gồm hộp văn bản, hộp tổ hợp, các nút tùy chọn được nhóm trong một khung, hộp kiểm và các nút lệnh.

Khi người dùng nhấp vào nút OK, đầu vào của họ sẽ được nhập vào hàng có sẵn tiếp theo trên trang tính.

Mô tả biểu mẫu excel:

Có hai hộp văn bản đơn giản (Name: _ và _Phone: _) để người dùng có thể nhập văn bản miễn phí và hai hộp kết hợp (_DepartmentCourse)

cho phép người dùng chọn một mục từ danh sách.

Có ba nút tùy chọn (Introduction, Inter InstantAdvanced) được nhóm trong một khung (Level) để người dùng chỉ có thể chọn một trong các tùy chọn.

Có hai hộp kiểm (Lunch RequiredVegetarian), vì chúng không được nhóm trong một khung, cả hai đều có thể được chọn nếu cần.

Tuy nhiên, nếu người đặt phòng không muốn ăn trưa, chúng tôi không cần biết họ có ăn chay hay không. Vì vậy, hộp kiểm Vegetarian có màu xám cho đến khi được yêu cầu.

Có ba nút lệnh (OK, CancelClear Form), mỗi nút thực hiện một chức năng được xác định trước khi nhấp vào.

Cài đặt thuộc tính điều khiển:

Control

Type

Property

Setting

UserForm

UserForm

Name

frmCourseBooking

Caption

Course Booking Form

Name

Text Box

Name

txtName

Phone

Text Box

Name

txtPhone

Department

Combo Box

Name

cboDepartment

Course

Combo Box

Name

cboCourse

Level

Frame

Name

fraLevel

Caption

Level

Introduction

Option Button

Name

optIntroduction

Intermediate

Option Button

Name

optIntermediate

Advanced

Option Button

Name

optAdvanced

Lunch Required

Check Box

Name

chkLunch

Vegetarian

Check Box

Name

chkVegetarian

Enabled

False

OK

Command Button

Name

cmdOk

Caption

OK

Default

True

Cancel

Command Button

Name

cmdCancel

Caption

Cancel

Cancel

True

Clear Form

Command Button

Name

cmdClearForm

=== Tạo biểu mẫu trong Excel Nếu bạn muốn tự tạo biểu mẫu, chỉ cần sao chép bố cục được hiển thị trong hình minh họa ở trên. Thực hiện theo các bước sau:

  1. Mở sổ làm việc mà bạn muốn biểu mẫu thuộc về (Biểu mẫu người dùng như macro phải được đính kèm vào sổ làm việc) và chuyển sang Trình soạn thảo Visual Basic.

  2. Trong Visual Basic Editor, hãy nhấp vào nút Insert UserForm (hoặc đi tới Insert> UserForm).

  3. Nếu hộp công cụ không tự xuất hiện (trước tiên hãy nhấp vào biểu mẫu để đảm bảo rằng nó không ẩn), hãy nhấp vào nút Hộp công cụ (hoặc đi tới Xem> Hộp công cụ).

  4. Để đặt một điều khiển trên biểu mẫu, hãy nhấp vào nút thích hợp trên hộp công cụ rồi nhấp vào biểu mẫu. Các điều khiển có thể được di chuyển bằng cách kéo chúng theo các cạnh của chúng hoặc thay đổi kích thước bằng cách kéo các nút xung quanh chu vi của chúng.

  5. Để chỉnh sửa các thuộc tính của một điều khiển, hãy đảm bảo rằng điều khiển đã chọn được chọn rồi thực hiện các thay đổi thích hợp trong cửa sổ Thuộc tính. Nếu bạn không thể thấy cửa sổ thuộc tính, hãy chuyển đến Chế độ xem> Cửa sổ thuộc tính.

  6. Để xóa một điều khiển khỏi biểu mẫu, hãy chọn nó và nhấp vào phím Xóa trên bàn phím của bạn.

Một UserForm sẽ không thực sự làm bất cứ điều gì cho đến khi mã điều khiển biểu mẫu và các điều khiển khác nhau của nó được tạo. Bước tiếp theo là viết mã điều khiển chính biểu mẫu.

Thêm mã: 1 Khởi tạo biểu mẫu === == Khởi tạo biểu mẫu:

Hầu hết các biểu mẫu cần một số loại thiết lập khi chúng mở. Điều này có thể đang đặt giá trị mặc định, đảm bảo trường trống hoặc tạo danh sách các hộp tổ hợp. Quá trình này được gọi là Initialising the Form và nó được thực hiện bởi một macro có tên là UserForm_Initialize (trong trường hợp bạn bối rối với cách viết khác nhau của từ “initialis (z) e”, đó là vì tôi nói tiếng Anh và VBA nói tiếng Mỹ – nhưng đừng lo lắng, VBA sẽ đánh vần nó cho bạn!). Đây là cách tạo mã để khởi chạy Biểu mẫu đăng ký khóa học:

  1. Để xem cửa sổ mã của biểu mẫu, hãy chuyển đến Xem> Mã hoặc nhấp vào F7.

  2. Khi cửa sổ mã mở ra lần đầu, nó có chứa một thủ tục UserForm_Click () trống. Sử dụng danh sách thả xuống ở đầu cửa sổ mã để chọn UserForm và Initialize. Điều này sẽ tạo ra thủ tục bạn cần. Bây giờ bạn có thể xóa thủ tục UserForm_Click ().

  3. Nhập mã sau vào thủ tục:

Private Sub UserForm_Initialize()

txtName.Value = ""

txtPhone.Value = ""

With cboDepartment

.AddItem "Sales"

.AddItem "Marketing"

.AddItem "Administration"

.AddItem "Design"

.AddItem "Advertising"

.AddItem "Dispatch"

.AddItem "Transportation"

End With

cboDepartment.Value = ""

With cboCourse

.AddItem "Access"

.AddItem "Excel"

.AddItem "PowerPoint"

.AddItem "Word"

.AddItem "FrontPage"

End With

cboCourse.Value = ""

optIntroduction = True

chkLunch = False

chkVegetarian = False

txtName.SetFocus

End Sub

Cách thức hoạt động của mã khởi tạo:

Mục đích của thủ tục UserForm_Initialize () là chuẩn bị biểu mẫu người dùng trong VBA để sử dụng, đặt các giá trị mặc định cho các điều khiển khác nhau và tạo danh sách mà hộp tổ hợp sẽ hiển thị.

Những dòng này đặt nội dung của hai hộp văn bản thành trống:

txtName.Value = ""

txtPhone.Value = ""

Tiếp theo là hướng dẫn cho các hộp kết hợp. Trước hết nội dung của danh sách được chỉ định, sau đó giá trị ban đầu của hộp tổ hợp được đặt thành trống.

With cboDepartment

.AddItem "Sales"

.AddItem "Marketing"

(as many as necessary…)

End With

cboDepartment.Value = “”

Nếu được yêu cầu, một lựa chọn ban đầu có thể được thực hiện từ nhóm tùy chọn, trong trường hợp này:

optIntroduction = True Cả hai hộp kiểm được đặt thành Sai (tức là không đánh dấu). Đặt thành True nếu bạn muốn hộp kiểm xuất hiện đã được đánh dấu:

chkLunch = False chkVegetarian = False Cuối cùng, tiêu điểm được đưa đến hộp văn bản đầu tiên. Thao tác này đặt con trỏ của người dùng vào hộp văn bản để họ không cần phải nhấp vào hộp trước khi bắt đầu nhập:

txtName.SetFocus === Thêm mã: 2 Làm cho các nút hoạt động Có ba nút lệnh trên biểu mẫu và mỗi nút phải được cung cấp bởi thủ tục riêng của nó. Bắt đầu với những cái đơn giản…

Mã hóa nút hủy:

Trước đó, chúng ta đã sử dụng Cửa sổ Thuộc tính để đặt thuộc tính Hủy của nút Hủy thành True. Khi bạn đặt thuộc tính Cancel của một nút lệnh thành True, điều này có tác dụng “nhấp” vào nút đó khi người dùng nhấn phím Esc trên bàn phím của họ. Nhưng chỉ điều này sẽ không gây ra bất cứ điều gì xảy ra với biểu mẫu. Bạn cần tạo mã cho sự kiện nhấp vào nút, trong trường hợp này, sẽ đóng biểu mẫu. Đây là cách thực hiện:

  1. Với UserForm mở để chỉnh sửa trong Visual Basic Editor, hãy bấm đúp vào nút Hủy. Cửa sổ mã của biểu mẫu mở ra với thủ tục cmdCancel_Click () đã sẵn sàng để chỉnh sửa.

  2. Mã để đóng một biểu mẫu rất đơn giản. Thêm một dòng mã vào thủ tục để nó trông giống như sau:

Private Sub cmdCancel_Click()

Unload Me

End Sub

Mã hóa nút Xóa biểu mẫu:

Tôi đã thêm một nút để xóa biểu mẫu trong trường hợp người dùng muốn thay đổi quyết định và đặt lại mọi thứ và để dễ dàng hơn nếu họ có nhiều lượt đặt trước cùng một lúc. Tất cả những gì nó phải làm là chạy lại thủ tục Khởi tạo. Một macro có thể được yêu cầu chạy một macro khác (hoặc một loạt macro nếu cần) bằng cách sử dụng từ khóa Gọi:

  1. Nhấp đúp vào nút Clear Form. Cửa sổ mã của biểu mẫu mở ra với thủ tục cmdClearForm_Click () đã sẵn sàng để chỉnh sửa.

  2. Thêm một dòng mã vào thủ tục để nó trông giống như sau:

Private Sub cmdClearForm_Click()

Call UserForm_Initialize

End Sub

Mã hóa nút OK:

Đây là đoạn mã phải thực hiện công việc chuyển các lựa chọn của người dùng và nhập văn bản vào trang tính. Khi chúng tôi đặt thuộc tính Hủy của nút Hủy thành Đúng, chúng tôi cũng đặt thuộc tính Mặc định của nút OK thành True. Thao tác này phải nhấp vào nút OK khi người dùng nhấn phím Enter (hoặc Return) trên bàn phím của họ (miễn là họ chưa sử dụng phím Tab để chuyển tab sang nút khác).

Đây là mã để làm cho nút hoạt động:

  1. Nhấp đúp vào nút OK. Cửa sổ mã của biểu mẫu mở ra với thủ tục cmdOK_Click () đã sẵn sàng để chỉnh sửa.

  2. Chỉnh sửa thủ tục để thêm đoạn mã sau:

Private Sub cmdOK_Click()

ActiveWorkbook.Sheets("Course Bookings").Activate

Range("A1").Select

Do

If IsEmpty(ActiveCell) = FalseThen

ActiveCell.Offset(1, 0).Select

End If

Loop Until IsEmpty(ActiveCell) = True

ActiveCell.Value = txtName.Value

ActiveCell.Offset(0, 1) = txtPhone.Value

ActiveCell.Offset(0, 2) = cboDepartment.Value

ActiveCell.Offset(0, 3) = cboCourse.Value

If optIntroduction = True Then

ActiveCell.Offset(0, 4).Value = "Intro"

ElseIf optIntermediate = True Then

ActiveCell.Offset(0, 4).Value = "Intermed"

Else

ActiveCell.Offset(0, 4).Value = "Adv"

End If

If chkLunch = True Then

ActiveCell.Offset(0, 5).Value = "Yes"

Else

ActiveCell.Offset(0, 5).Value = "No"

End If

If chkVegetarian = True Then

ActiveCell.Offset(0, 6).Value = "Yes"

Else

If chkLunch = False Then

ActiveCell.Offset(0, 6).Value = ""

Else

ActiveCell.Offset(0, 6).Value = "No"

End If

End If

Range("A1").Select

End Sub

Cách hoạt động của mã CmdOK_Click:

Hai dòng đầu tiên đảm bảo rằng sổ làm việc chính xác đang hoạt động và di chuyển vùng chọn đến ô A1:

ActiveWorkbook.Sheets("Course Bookings").Activate

Range("A1").Select

The next few lines moves the selection down the worksheet until it finds an empty cell:

Do

If IsEmpty(ActiveCell) = False Then

ActiveCell.Offset(1, 0).Select

End If

Loop Until IsEmpty(ActiveCell) = True

Bốn dòng tiếp theo bắt đầu ghi nội dung của biểu mẫu vào trang tính, sử dụng ô đang hoạt động (nằm trong cột A) làm tham chiếu và di chuyển trong hàng một ô tại một thời điểm:

ActiveCell.Value = txtName.Value

ActiveCell.Offset(0, 1) = txtPhone.Value

ActiveCell.Offset(0, 2) = cboDepartment.Value

ActiveCell.Offset(0, 3) = cboCourse.Value

Bây giờ chúng ta đến các nút tùy chọn. Chúng đã được đặt trong một khung trên biểu mẫu để người dùng chỉ có thể chọn một. Câu lệnh IF được sử dụng để hướng dẫn Excel phải làm gì cho mỗi tùy chọn:

If optIntroduction = True Then

ActiveCell.Offset(0, 4).Value = "Intro"

ElseIf optIntermediate = True Then

ActiveCell.Offset(0, 4).Value = "Intermed"

Else

ActiveCell.Offset(0, 4).Value = "Adv"

End If

Câu lệnh VBA IF dễ quản lý hơn nhiều so với hàm IF của Excel.

Bạn có thể có nhiều tùy chọn tùy thích, chỉ cần chèn thêm ElseIf cho mỗi tùy chọn. Nếu chỉ có hai tùy chọn, bạn sẽ không cần ElseIf, chỉ cần If và Else là đủ (đừng quên – tất cả chúng đều cần End If).

Có một câu lệnh IF khác cho mỗi hộp kiểm. Đối với hộp chọn Bữa trưa Bắt buộc, một dấu chọn trong hộp có nghĩa là “Có” người đó yêu cầu bữa trưa và không đánh dấu có nghĩa là “Không” họ không yêu cầu.

If chkLunch = True Then

ActiveCell.Offset(0, 5).Value = "Yes"

Else

ActiveCell.Offset(0, 5).Value = "No"

End If

Chúng tôi có thể sử dụng câu lệnh IF tương tự cho hộp kiểm Ăn chay, nhưng nếu người đó không yêu cầu bữa trưa thì việc họ có ăn chay hay không cũng không liên quan. Dù sao đi nữa, sẽ là sai lầm nếu cho rằng họ không ăn chay đơn giản vì họ không yêu cầu bữa trưa. Do đó, câu lệnh IF chứa câu lệnh if thứ hai, lồng nhau:

If chkVegetarian = True Then

ActiveCell.Offset(0, 6).Value = "Yes"

Else

If chkLunch = False Then

ActiveCell.Offset(0, 6).Value = ""

Else

ActiveCell.Offset(0, 6).Value = "No"

End If

End If

Đánh dấu vào ô có nghĩa là “Có” người đó ăn chay. Nếu không có dấu chọn trong hộp, câu lệnh IF lồng nhau sẽ nhìn vào hộp kiểm Yêu cầu Bữa trưa. Nếu hộp kiểm Ăn trưa Bắt buộc có dấu tích trong đó thì không đánh dấu trong hộp chọn Người ăn chay có nghĩa là người đó không ăn chay nên nó sẽ chèn “Không” vào ô. Tuy nhiên, nếu hộp chọn Bữa trưa Bắt buộc không có dấu tích trong đó, thì chúng ta không biết người đó có ăn chay hay không (dù sao cũng không quan trọng) nên ô này được để trống (“”).

Cuối cùng lựa chọn được đưa trở lại đầu trang tính, sẵn sàng cho mục tiếp theo:

Phạm vi (“A1”). Chọn === Thêm mã 3: Thao tác với biểu mẫu Cuối cùng, một ví dụ về cách có thể thao tác các điều khiển trên biểu mẫu khi đang sử dụng. Khi các thuộc tính điều khiển được đặt, thuộc tính Đã bật của hộp kiểm Ăn chay được đặt thành False. Khi một điều khiển không được kích hoạt, user không thể nhập giá trị vào đó, mặc dù nó có thể giữ một giá trị đã có và VBA có thể thêm, bớt hoặc thay đổi giá trị.

Chúng ta không cần biết người đó có ăn chay hay không (ngay cả khi họ ăn chay!) Nếu họ không đặt bữa trưa. Vì vậy, hộp kiểm Ăn chay vẫn bị vô hiệu hóa trừ khi một đánh dấu được đặt trong hộp kiểm Yêu cầu Bữa trưa. Sau đó, người dùng có thể tự do đánh dấu vào hộp kiểm Ăn chay nếu họ muốn. Nếu họ đánh dấu vào nó, chúng tôi sẽ biết rằng họ đã trả lời “Có” và nếu họ không, chúng tôi biết rằng họ đã trả lời “Không”.

Chúng ta có thể chuyển thuộc tính Đã bật từ False sang True bằng cách có một thủ tục chạy tự động bất cứ khi nào giá trị của hộp kiểm Bắt buộc ăn trưa thay đổi. May mắn thay, nhiều điều khiển hơn có thủ tục Change và thủ tục chúng tôi sử dụng ở đây là chkLunch_Change (). Chúng tôi sẽ sử dụng điều này để bật hộp kiểm Ăn chay khi hộp kiểm Yêu cầu Bữa trưa được chọn và vô hiệu hóa nó khi hộp kiểm Bắt buộc Ăn trưa không được chọn.

Chỉ còn một điều nữa chúng ta cần làm. Giả sử ai đó đánh dấu vào hộp kiểm Bắt buộc ăn trưa và cũng đánh dấu vào hộp kiểm Ăn chay. Sau đó, họ đổi ý và bỏ dấu tích khỏi hộp chọn Bữa trưa Bắt buộc. Hộp kiểm Ăn chay sẽ bị vô hiệu hóa nhưng dấu tích đã được đưa vào trước đó sẽ vẫn còn.

Một dòng mã bổ sung có thể đảm bảo đánh dấu được loại bỏ khi hộp bị vô hiệu hóa. Đây là toàn bộ:

Private Sub chkLunch_Change()

If chkLunch = True Then

chkVegetarian.Enabled = True

Else

chkVegetarian.Enabled = False

chkVegetarian = False

End If

End Sub

Mở biểu mẫu Biểu mẫu hiện đã sẵn sàng để sử dụng vì vậy nó cần được mở bằng một macro đơn giản. Điều đó có thể được gắn vào nút thanh công cụ tùy chỉnh, nút lệnh được vẽ trên trang tính hoặc bất kỳ đồ họa nào (nhấp chuột phải vào đồ họa và chọn Gán Macro). Nếu cần, hãy tạo một mô-đun mới cho sổ làm việc và thêm thủ tục này:

Sub OpenCourseBookingForm()

frmCourseBooking.Show

End Sub

Nếu bạn thích blog của chúng tôi, hãy chia sẻ nó với bạn bè của bạn trên Facebook. Và bạn cũng có thể theo dõi chúng tôi trên Twitter và Facebook.

Chúng tôi rất muốn nghe ý kiến ​​từ bạn, hãy cho chúng tôi biết cách chúng tôi có thể cải thiện, bổ sung hoặc đổi mới công việc của mình và làm cho nó tốt hơn cho bạn. Viết thư cho chúng tôi tại [email protected]