Cách tạo biểu mẫu trong Microsoft Excel
_ 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 (_Department và Course)
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 Instant và Advanced) đượ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 Required và Vegetarian), 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, Cancel và Clear 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:
-
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.
-
Trong Visual Basic Editor, hãy nhấp vào nút Insert UserForm (hoặc đi tới Insert> UserForm).
-
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ụ).
-
Để đặ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.
-
Để 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.
-
Để 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:
-
Để 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.
-
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 ().
-
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:
-
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.
-
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:
-
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.
-
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:
-
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.
-
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]