Tạo biểu mẫu người dùng VBA

Biểu mẫu người dùng VBA

Userform là một phần rất quan trọng của lập trình trong VBA. Nó cho phép bạn xây dựng giao diện người dùng trông chuyên nghiệp để giao tiếp với người dùng ứng dụng VBA của bạn. Nó cũng cho phép bạn kiểm soát hoàn toàn người dùng về những gì họ đang làm với sổ làm việc của bạn.

Tất nhiên, bạn có thể sử dụng các ô trang tính để chấp nhận các tham số từ người dùng, nhưng biểu mẫu người dùng tạo ra trải nghiệm người dùng tốt hơn nhiều.

Bằng cách mở rộng chiều cao và chiều rộng của biểu mẫu người dùng của bạn bằng kích thước của cửa sổ Excel, bạn có thể làm cho ứng dụng của mình trông giống như một ứng dụng Windows bình thường mà người dùng hoàn toàn không biết rằng họ đang sử dụng Excel làm máy chủ lưu trữ.

Tất cả các điều khiển Windows thông thường, chẳng hạn như thả xuống, hộp danh sách, hộp đánh dấu đều có sẵn cho bạn. Bạn cũng có một loạt các phương pháp, sự kiện và thuộc tính để sử dụng để nâng cao trải nghiệm người dùng.

Một điểm quan trọng là khi bạn hiển thị biểu mẫu người dùng được tích hợp sẵn hoặc là phương thức, bạn không thể chỉnh sửa mã của mình trong VBE cũng như truy cập vào bất kỳ chức năng nào của Excel. Chỉ khi đóng biểu mẫu thì con trỏ mới xuất hiện trong mã của bạn.

Được xây dựng trong Biểu mẫu người dùng VBA

Excel VBA dưới dạng một số biểu mẫu dựng sẵn có thể được sử dụng để giao tiếp với người dùng.

Hộp tin nhắn

Đây là biểu mẫu được sử dụng phổ biến nhất trong VBA. Nó chỉ hiển thị một tin nhắn văn bản, có thể thông báo cho người dùng rằng họ đã nhập đầu vào không hợp lệ hoặc quá trình VBA đã chạy xong. Ở dạng đơn giản nhất, chúng hiển thị một chuỗi văn bản, nhưng bạn cũng có thể thêm một biểu tượng chẳng hạn như câu hỏi hoặc dấu chấm than và đặt tiêu đề khác cho hộp thư.

Đây là một ví dụ cơ bản. Chỉ có một nút để nhấp và thanh tiêu đề cho biết 'Microsoft Excel'

Mã để tạo ra điều này rất đơn giản:

123 Sub TestMsgBox ()MsgBox "Quá trình này đã hoàn tất"Kết thúc Sub

Bạn có thể sử dụng các thông số khác nhau để thêm các nút, biểu tượng và thay đổi thanh tiêu đề

123456789 Sub TestMsgBox ()Dim Ret As VariantRet = MsgBox ("Bạn có chắc không?", VbYesNo Hoặc vbQuestion, "Ứng dụng của tôi")Nếu Ret = vbYes Thì'Quy trình của bạn ở đâyKhácThoát SubKết thúc nếuKết thúc Sub

Mã này thêm vào nút "Có" và "Không" và biểu tượng dấu chấm hỏi, đồng thời đặt thanh tiêu đề. Lưu ý rằng bạn có thể kết hợp các kiểu của hộp thông báo bằng cách sử dụng toán tử 'Hoặc'

Ngoài ra, khi bạn trả về một giá trị từ một hộp thông báo, biến trả về phải được định nghĩa là một biến thể hoặc vbMsgBoxResult và câu lệnh hộp thông báo phải sử dụng dấu ngoặc vuông,

Hộp đầu vào

Có một hộp nhập liệu rất đơn giản được tích hợp trong VBA, mặc dù nó khá hạn chế trong những gì bạn có thể làm với nó. Nếu bạn có thể, tốt hơn là nên thiết kế một biểu mẫu người dùng tùy chỉnh

12345 Sub TestInputBox ()Dim Ret As StringRet = InputBox ("Vui lòng nhập tên của bạn", "Nhập tên")MsgBox RetKết thúc Sub

Bạn cũng có thể thêm giá trị mặc định cho đầu vào vào các tham số.

Lấy tên tệp mở

Điều này cho phép bạn sử dụng hộp thoại tệp Windows trong mã VBA của bạn. Nó trông rất ấn tượng với người dùng khi nó đang chạy, nhưng nó rất đơn giản để kết hợp và bạn tự động nhận được tất cả các chức năng hộp thoại tệp với nó.

Mã hạn chế người dùng chỉ xem các tệp Excel. Thật không may, họ có thể nhập tên tệp không phải Excel vào hộp Tên tệp và nhấp vào nút mở, vì vậy bạn sẽ cần một số mã để đảm bảo rằng tệp Excel đã được chọn.

Sử dụng lệnh ‘ChDir’ để thay đổi thư mục mặc định theo yêu cầu của riêng bạn trước khi hiển thị hộp thoại tệp

Lưu ý việc sử dụng các ký tự đại diện trong tham số FileFilter. Các tệp Excel để hiển thị có thể là trước năm 2007, có macro hoặc là tệp nhị phân để bộ lọc là ‘.xls *’.

123456 Sub TestFileDialog ()Dim MyFile As StringChDir "C: \ temp"MyFile = Application.GetOpenFilename ("Tệp Excel (* .xls *), *. Xls *", "Chọn tệp")MsgBox MyFileKết thúc Sub

Nếu được yêu cầu, bạn có thể cho phép người dùng chọn nhiều tệp cùng một lúc bằng cách sử dụng tham số MultiSelect. Giá trị mặc định là Sai (chỉ một lựa chọn)

12345678 Sub TestFileDialog ()Dim MyFile As VariantChDir "C: \ temp"MyFile = Application.GetOpenFilename ("Tệp Excel (* .xls *), *. Xls *", "Chọn tệp",, Đúng)Cho mỗi f Trong MyFileMsgBox fTiếp theo fKết thúc Sub

Người dùng giữ phím Shift trong hộp thoại tệp để chọn nhiều tệp.

Vòng lặp For Each hiển thị đường dẫn đầy đủ và tên của từng tệp được chọn

Hộp thoại Mặc định của Excel

Trong Excel VBA, có một bộ sưu tập Hộp thoại mà bạn có thể sử dụng để hiển thị bất kỳ hộp thoại Excel tiêu chuẩn nào. Nhược điểm là bạn không thể truy cập các tham số mà người dùng đã chọn hoặc thay đổi giao diện của hộp thoại, nhưng những hộp thoại này có thể hữu ích trong việc hướng người dùng đến một hàm Excel tiêu chuẩn và cho phép họ chọn các tham số cụ thể trong hộp thoại.

Một ví dụ điển hình về điều này là hiển thị hộp thoại ‘In’ từ VBA:

123 Sub TestPrintDialog ()Application.Dialogs (xlDialogPrint) .ShowKết thúc Sub

Khi bạn mở dấu ngoặc trong bộ sưu tập Hộp thoại, bạn sẽ thấy danh sách một số lượng lớn các hằng số cho các hộp thoại dựng sẵn. Rất đáng để thử nghiệm với một số tùy chọn này trong mã của bạn

Chèn một biểu mẫu người dùng mới

Bạn có thể thiết kế biểu mẫu người dùng tùy chỉnh của riêng mình bằng cách chèn biểu mẫu người dùng vào Visual Basic Editor (VBE)

Bạn thực hiện việc này bằng cách chọn Chèn | UserForm trên thanh menu VBE.

Nhấp vào 'UserForm' và một biểu mẫu trống mới sẽ xuất hiện sẵn sàng để bạn phát triển

Bản thân biểu mẫu thực tế (được hiển thị dưới dạng ‘UserForm1’) trông khá nhỏ, nhưng bạn có thể sử dụng các ô điều khiển xung quanh nó để phóng to hoặc thu nhỏ nó bằng cách kéo các ô điều khiển bằng con trỏ.

Có một cửa sổ thuộc tính ở góc dưới cùng bên trái của màn hình. Vì tiêu điểm nằm trực tiếp trên chính biểu mẫu, điều này chứa tất cả các thuộc tính cho biểu mẫu cụ thể cho biểu mẫu đó.

Lưu ý rằng khi bạn bắt đầu thêm các điều khiển như hộp tổ hợp và nút lệnh, tất cả các điều khiển này đều có tập hợp các thuộc tính riêng và chúng có thể rất khác nhau về những gì bạn có thể làm với từng điều khiển đó.

Các thuộc tính mà bạn thấy hiện chỉ áp dụng cho chính biểu mẫu.

Thuộc tính 'Name' là tên được sử dụng để xác định đối tượng biểu mẫu của bạn trong mã VBA. Bạn có thể muốn sử dụng một cái gì đó có ý nghĩa hơn cho tên đối tượng, để khi bạn xem lại mã của mình, bạn có thể biết rõ dạng nào đang được sử dụng.

Thuộc tính ‘Name’ cũng sẽ phản ánh qua cửa sổ ‘Project Explorer’ ở góc trên cùng bên trái của màn hình

Bạn sẽ muốn thay đổi thanh tiêu đề của biểu mẫu thành thứ gì đó khác với ‘UserForm1’ và bạn có thể thực hiện việc này bằng cách nhập văn bản mới của mình tại thuộc tính ‘Caption’

Bạn có thể thực hiện một số thay đổi lớn đối với cách người dùng nhìn thấy biểu mẫu của bạn. Bạn có thể thay đổi màu sắc, thêm hình ảnh, ví dụ: biểu trưng của công ty, thay đổi vị trí bằng cách sử dụng ‘Trái’ và ‘Trên cùng’, thay đổi kích thước bằng cách sử dụng ‘Chiều cao’ và ‘Chiều rộng’, thay đổi con trỏ chuột, v.v.

Tất cả các thuộc tính này cũng có thể được thay đổi theo chương trình cho bất kỳ điều khiển nào mà bạn đã thêm vào biểu mẫu của mình. Ví dụ: người dùng có thể chọn từ điều khiển hộp danh sách và bạn có thể muốn tắt hoặc ẩn các điều khiển khác dựa trên lựa chọn của người dùng

Sử dụng Hộp công cụ

Bạn sẽ nhận thấy rằng khi bạn nhấp vào chính biểu mẫu đó, một cửa sổ bật lên của hộp công cụ sẽ xuất hiện. Nếu bạn nhấp vào bất kỳ nơi nào khác, ví dụ: ngăn thuộc tính, nó sẽ biến mất, nhưng xuất hiện lại khi bạn bấm vào biểu mẫu.

Hộp công cụ cung cấp cơ chế thực sự của thiết kế biểu mẫu. Điều này cho phép bạn thêm các điều khiển Windows bình thường mà người dùng quen thuộc vào biểu mẫu của bạn.

Bạn sẽ nhận thấy rằng trên biểu mẫu, có một mạng lưới các dấu chấm. Đây là một ‘snapgrid’ để khi bạn thêm một điều khiển vào biểu mẫu, nó sẽ tự động căn chỉnh vị trí cho các hàng và cột dấu chấm. Điều này giúp ích rất nhiều cho việc căn chỉnh các điều khiển của bạn để bạn không có được vẻ ngoài thô kệch của các điều khiển

Nếu bạn nhấp vào một điều khiển và sau đó quyết định không sử dụng điều khiển đó, nhấp vào biểu tượng ‘Mũi tên’ ở góc trên cùng bên trái của hộp công cụ sẽ thay đổi con trỏ của bạn trở lại bình thường.

Bạn có thể thêm các điều khiển bổ sung vào hộp công cụ bằng cách sử dụng Công cụ | Điều khiển bổ sung trên menu VBE. Có một số lượng đáng kể trong số này có sẵn, nhưng tùy thuộc vào bạn phiên bản Windows và Excel, chúng không phải lúc nào cũng hoạt động vì vậy một số thử nghiệm thường được yêu cầu.

Ngoài ra, người dùng của bạn có thể không có quyền truy cập vào một số điều khiển bổ sung này hoặc đang chạy các phiên bản Windows và Excel cũ hơn, điều này có thể gây ra sự cố. Trong các tổ chức lớn, đặc biệt nếu họ là toàn cầu, không có thứ gì gọi là PC xây dựng tiêu chuẩn mà bạn có thể dựa vào!

Thêm nút thoát vào biểu mẫu của bạn

Một nút Lệnh rất đơn giản để thêm vào biểu mẫu. Điều này trông giống như các nút mà bạn thấy trong các biểu mẫu Windows khác, thường là nút ‘OK’ hoặc ‘Cancel’.

Nhấp vào biểu tượng Nút lệnh trong hộp công cụ. Đây là biểu tượng thứ hai từ bên trái trên hàng biểu tượng dưới cùng. Xem hình trên. Nó có các chữ cái ‘ab’ trên đó.

Bạn có thể giữ nút chuột và kéo điều khiển vào biểu mẫu của mình hoặc bạn có thể di chuyển con trỏ đến biểu mẫu, nơi nó sẽ thay đổi thành con trỏ 'chữ thập' và bạn có thể định vị và kích thước nút của mình

Nếu bạn kéo điều khiển vào biểu mẫu, bạn sẽ nhận được kích thước mặc định của nút. Di chuyển con trỏ đến biểu mẫu cho phép bạn thay đổi kích thước của nút bằng cách kéo con trỏ 'chéo' trên biểu mẫu của bạn

Biểu mẫu của bạn bây giờ sẽ giống như sau:

Nút sẽ có văn bản mặc định làm chú thích, nhưng bạn sẽ muốn thay đổi nó theo yêu cầu của riêng mình. Bạn có thể nhấp vào văn bản trong nút (‘CommandButton1’) và điều này sẽ cho phép bạn chỉnh sửa chú thích trực tiếp.

Bạn cũng có thể thay đổi nó trong cửa sổ thuộc tính (góc dưới cùng bên trái của màn hình). Bạn sẽ thấy một thuộc tính có tên là 'Chú thích' và bạn có thể chỉnh sửa giá trị cho thuộc tính này. Thay đổi điều này thành 'Thoát'

Giống như các thuộc tính biểu mẫu, thuộc tính 'Name' xác định tên sẽ được sử dụng trong mã VBA của bạn. Bạn có thể muốn sử dụng một cái tên có ý nghĩa và rõ ràng hơn trong mã của mình. Bạn có thể nhập giá trị này vào thuộc tính "Name".

Bạn có thể định vị lại nút bằng cách kéo nút trên biểu mẫu và bạn có thể thay đổi kích thước bằng cách nhấp vào các nút điều khiển (hộp vuông màu trắng) và kéo các nút điều khiển để làm cho nó lớn hơn hoặc nhỏ hơn

Bạn cũng có thể định lại kích thước nút bằng cách thay đổi các giá trị Chiều cao và Chiều rộng trong cửa sổ thuộc tính

Bạn có thể xem biểu mẫu của mình trong Excel bằng cách nhấp vào hình tam giác màu xanh lục trong thanh công cụ VBE hoặc nhấn F5

Bạn có thể gọi biểu mẫu của mình từ mã VBA trong một mô-đun bằng cách sử dụng phương thức 'Hiển thị'

123 Sub ShowForm ()UserForm1.ShowKết thúc Sub

Biểu mẫu người dùng của bạn thực sự là một đối tượng toàn cầu và có thể được gọi từ bất kỳ đâu trong mã của bạn

Hiện tại, nút lệnh của bạn không làm gì cả vì không có mã VBA đằng sau nó. Bạn phải viết cái này cho mình! Tất cả những gì có thể xảy ra vào lúc này là bạn có thể nhấp vào 'Đóng' X ở góc trên cùng bên phải của biểu mẫu.

Để thêm mã VBA, nhấp đúp vào nút trên biểu mẫu

Thao tác này sẽ đưa bạn đến cửa sổ mã VBA bình thường và sẽ hiển thị sự kiện nhấp chuột mặc định.

Bạn sử dụng phương pháp ‘Ẩn’ để đóng biểu mẫu và bạn cũng có thể thêm bất kỳ mã nào khác, chẳng hạn như hộp thông báo để xác nhận với người dùng điều gì đã xảy ra.

Lưu ý rằng cửa sổ mã có hai trình đơn thả xuống ở trên cùng. Cái đầu tiên cho phép bạn chọn các điều khiển biểu mẫu của mình và cái thứ hai hiển thị tất cả các sự kiện có sẵn để bạn thêm mã. Sự kiện rõ ràng đối với một nút là sự kiện 'Nhấp chuột', nhưng có những sự kiện khác chẳng hạn như 'Nhấp đúp' hoặc 'Di chuyển chuột'

Khi bạn chạy biểu mẫu của mình ngay bây giờ, nút thực sự làm một việc gì đó. Biểu mẫu biến mất và một hộp thông báo được hiển thị xác nhận rằng biểu mẫu đã được đóng

Tất nhiên, bạn có thể phóng to mã thoát. Bạn có thể muốn hiển thị một biểu mẫu khác hoặc thực hiện hành động đối với các tham số mà người dùng đã nhập vào biểu mẫu của bạn

Thêm điều khiển nhãn vào biểu mẫu

Điều khiển nhãn là để nhắc người dùng về loại dữ liệu họ cần nhập vào điều khiển trên biểu mẫu, ví dụ: hộp văn bản, trình đơn thả xuống, v.v. Theo mặc định, một nhãn không có đường viền, nhưng chúng có thể được thêm vào thông qua cửa sổ thuộc tính nếu được yêu cầu.

Là một điều khiển, chúng chỉ được đọc cho người dùng và chỉ đơn giản là một cách để đưa văn bản lên biểu mẫu, cho dù đó là một tiêu đề in đậm hay một chỉ dẫn về những gì cần nhập hoặc chọn.

Để thêm nhãn, hãy nhấp vào biểu tượng ‘A’ trong hộp công cụ (hàng trên cùng, thứ hai từ trái sang) và nhấp đúp vào nhãn hoặc di chuyển con trỏ của bạn đến biểu mẫu và chọn vị trí và kích thước.

Sử dụng thuộc tính ‘Chú thích’ trong cửa sổ thuộc tính hoặc nhấp vào điều khiển nhãn, bạn có thể nhập văn bản cho điều khiển nhãn.

Lưu ý rằng văn bản sẽ bao bọc theo kích thước của điều khiển nhãn và nếu chuỗi văn bản quá dài, nó sẽ không xuất hiện hoàn toàn trên biểu mẫu, vì vậy bạn cần phải cẩn thận với kích thước của điều khiển nhãn.

Sử dụng cửa sổ thuộc tính, bạn có thể thay đổi giao diện của điều khiển nhãn, với các màu sắc, phông chữ, kiểu lưng khác nhau, ví dụ: nếu nó phủ lên một hình ảnh và bạn muốn nó trong suốt

Không cần tạo mã để kiểm soát nhãn. Mục đích chính là thêm văn bản vào biểu mẫu để người dùng có thể xem tất cả các điều khiển khác hoạt động như thế nào

Thêm điều khiển văn bản vào biểu mẫu

Điều khiển văn bản được sử dụng để cho phép người dùng nhập văn bản, ví dụ: nhập tên hoặc nhận xét

Điều khiển văn bản được thêm từ hộp công cụ bằng cách nhấp vào biểu tượng điều khiển văn bản (hàng trên cùng, thứ ba từ trái sang) và nhấp đúp hoặc kéo điều khiển vào vị trí trên biểu mẫu của bạn.

Điều khiển văn bản thường bị nhầm lẫn với điều khiển nhãn, nhưng điều khiển văn bản là điều khiển cho người dùng nhập

Văn bản 'Nhập tên của bạn' là một điều khiển nhãn, như được mô tả trước đây và hiện chúng tôi có một hộp văn bản màu trắng sẵn sàng để người dùng nhập nội dung nào đó vào

Sử dụng cửa sổ thuộc tính, bạn có thể thay đổi màu sắc, phông chữ, hiệu ứng đặc biệt hoặc sử dụng các ký tự mật khẩu cho hộp văn bản của mình. Tính linh hoạt rất lớn có sẵn

Một thuộc tính rất quan trọng đối với hộp văn bản là thuộc tính ‘MultiLine’. Nếu bạn muốn người dùng nhập một lượng lớn văn bản vào điều khiển văn bản, ví dụ: nhận xét, thì thuộc tính ‘MultiLine’ phải được đặt thành True.

Nó là mặc định của False, có nghĩa là bạn làm cho hộp văn bản của mình lớn đến đâu, văn bản được nhập sẽ nằm trên một dòng liên tục và sẽ cuộn ra khỏi hộp văn bản. Nó sẽ không quấn quanh trong hộp.

Không có cửa sổ bật lên khi bạn nhấp chuột phải vào hộp văn bản của mình khi nó đang chạy, nhưng CTRL + V sẽ hoạt động cho Dán và CTRL + C sẽ hoạt động cho Cắt, nếu người dùng muốn cắt và dán văn bản vào và từ nơi khác các ứng dụng

Một lần nữa, bạn phải viết mã của riêng mình để xử lý văn bản mà người dùng đã nhập. Bạn có thể muốn chuyển nó vào một ô trong trang tính

Bạn có thể thêm mã này vào sự kiện 'Thay đổi' cho hộp văn bản

123 Private Sub TextBox1_Change ()Trang tính ("Trang tính1"). Phạm vi ("A1"). Giá trị = TextBox1.ValueKết thúc Sub

Bạn cũng có thể muốn nhập một số mã xác thực để kiểm tra xem người dùng không nhập rác, điều này sẽ có tác động tai hại đến ứng dụng của bạn

Sự kiện thay đổi không tốt cho điều này vì nó được gọi mỗi khi người dùng nhập một ký tự mới. Người dùng có thể bắt đầu nhập một chuỗi văn bản và ngay lập tức nhận thấy rằng họ đã phá vỡ các quy tắc xác thực của bạn trước khi họ hoàn thành một văn bản hợp lệ.

Bạn sử dụng sự kiện 'Thoát'. Điều này được kích hoạt khi người dùng di chuyển tiêu điểm sang một điều khiển khác trên biểu mẫu, có nghĩa là người dùng không còn nhập dữ liệu nữa.

123456 Private Sub TextBox1_Exit (ByVal Huỷ As MSForms.ReturnBoolean)Nếu IsNull (TextBox1.Value) Hoặc Len (TextBox1.Value) <4 ThìMsgBox "Tên không hợp lệ", vbCriticalTextBox1.SetFocusKết thúc nếuKết thúc Sub

Khi người dùng bấm vào một điều khiển khác trên biểu mẫu, mã này sẽ kiểm tra giá trị null trong hộp văn bản hoặc ít hơn 4 ký tự. Nếu kiểm tra là đúng, thì hộp thông báo có biểu tượng quan trọng sẽ xuất hiện để thông báo cho người dùng rằng tên không hợp lệ và tiêu điểm được chuyển trở lại hộp văn bản vi phạm để người dùng sửa.

Lưu ý rằng ngay cả khi người dùng nhấp vào nút Thoát, sự kiện thoát hộp văn bản sẽ được thực hiện đầu tiên, do đó, điều này ngăn người dùng thoát ra mà không sửa đầu vào

Khởi tạo và kích hoạt sự kiện trên biểu mẫu

Khi VBA lần đầu tiên tạo và xây dựng một biểu mẫu, nó sẽ kích hoạt sự kiện ‘Khởi tạo’. Tuy nhiên, vì biểu mẫu cũng được hiển thị tại thời điểm này, nó cũng kích hoạt sự kiện ‘Kích hoạt’. Kể từ đó trở đi, mỗi khi biểu mẫu xuất hiện bằng cách sử dụng phương thức ‘Hiển thị’ hoặc biểu mẫu xuất hiện như một phần của hệ thống phân cấp biểu mẫu, thì sự kiện ‘Kích hoạt’ được kích hoạt, nhưng không phải sự kiện ‘Khởi tạo’.

Sự kiện ‘Khởi tạo’ chỉ xảy ra một lần, nhưng sự kiện ‘Kích hoạt’ có thể xảy ra nhiều lần

Trên biểu mẫu của bạn, bạn có thể muốn thiết lập các giá trị mặc định từ trang tính trong các điều khiển đầu vào, ví dụ: hộp văn bản, để những hộp này xuất hiện trong lần sử dụng biểu mẫu đầu tiên, nhưng người dùng có thể ghi đè các giá trị mặc định và các giá trị mới này sẽ vẫn ở nguyên vị trí miễn là mã đang chạy

12345678 Private Sub UserForm_Initialize ()TextBox1.Value = Sheets ("Sheet1"). Phạm vi ("A1"). Giá trịNếu TextBox1.Value = ”” thìTextBox1.Vosystem = FalseKhácTextBox1.Vosystem = TrueKết thúc nếuKết thúc Sub

Bạn có thể tìm thấy sự kiện ‘Khởi tạo’ trong menu thả xuống thứ hai trong cửa sổ mã và tên biểu mẫu người dùng trong menu thả xuống đầu tiên.

Mã này sẽ sử dụng giá trị tại ô A1 trên ‘Sheet1’ làm giá trị mặc định trong hộp văn bản được tạo trước đó trong bài viết này. Khi biểu mẫu xuất hiện lần đầu tiên, giá trị mặc định sẽ xuất hiện. Sau đó, người dùng có thể ghi đè giá trị mặc định và giá trị này sẽ được giữ lại. Nếu CellA1 trống, hộp văn bản sẽ bị ẩn nếu không, hộp văn bản sẽ được hiển thị

Giá trị mặc định cũng có thể được mã hóa cứng:

1 TextBox1.Value = “John Smith”

Bạn cũng có thể muốn đảm bảo rằng các giá trị mà người dùng đã nhập sẽ xuất hiện lại bất cứ khi nào người dùng kích hoạt biểu mẫu đó trong phiên Excel cụ thể đó. Mã VBA có thể dễ dàng ghi các giá trị trở lại các ô trong sổ làm việc bằng cách sử dụng sự kiện ‘Thoát’ trên một điều khiển và cài đặt lại chúng bằng sự kiện ‘Kích hoạt’ trên biểu mẫu

123 Private Sub TextBox1_Exit (ByVal Cancel as MSForms.ReturnBoolean)Trang tính ("Trang 1"). Phạm vi ("A10"). Giá trị = TextBox1.ValueKết thúc Sub
123 Private Sub UserForm_Activate ()TextBox1.Value = Sheets ("Sheet1"). Phạm vi ("A10"). Giá trịKết thúc Sub

Mã này sẽ làm cho các giá trị của người dùng trở nên bền vững và cũng đảm bảo rằng chúng được lưu với phần còn lại của sổ làm việc

Lưu đơn đăng ký và biểu mẫu của bạn

Khi bạn lưu sổ làm việc Excel chứa các biểu mẫu của mình, tất cả các biểu mẫu và mã VBA của chúng cũng được lưu. Tuy nhiên, bất kỳ giá trị nào mà biểu mẫu giữ trong khi chúng được hiển thị sẽ bị mất.

Điều quan trọng là phải viết mã để khi người dùng thoát khỏi sổ làm việc hoặc biểu mẫu, các giá trị được ghi trở lại các ô trong sổ làm việc và do đó được giữ nguyên.

Hình thức phương thức và phi phương thức

Bản thân biểu mẫu có thuộc tính ‘Show Modal’. Điều này được đặt theo mặc định thành True, nhưng nó có thể được thay đổi thành False (không theo phương thức)

Nếu biểu mẫu là phương thức, điều đó có nghĩa là không có chức năng nào trong Excel có thể được truy cập trong khi biểu mẫu đang được hiển thị. Điều này bao gồm mã của bạn trong cửa sổ VBE. Bạn có thể xem mã, nhưng con trỏ và bàn phím bị tắt.

Trong một biểu mẫu không theo phương thức, bạn có thể truy cập tất cả các chức năng của Excel, bao gồm cả cửa sổ VBE, trong khi biểu mẫu đang được hiển thị.

Điều này quan trọng theo quan điểm kiểm soát hành vi của người dùng

Đóng biểu mẫu

Tuy nhiên, bạn viết mã của mình để buộc người dùng đi theo một lộ trình nhất định, họ có thể dễ dàng vượt qua nó bằng cách nhấp vào 'Đóng' X ở góc trên cùng bên phải của biểu mẫu

Bạn có thể ngăn điều này xảy ra bằng cách sửa đổi sự kiện ‘QueryClose’ của biểu mẫu

1234 Private Sub UserForm_QueryClose (Cancel As Integer, CloseMode As Integer)Hủy bỏ = ĐúngMsgBox "Tác vụ này bị vô hiệu hóa"Kết thúc Sub

Sự kiện ‘QueryClose’ được kích hoạt khi người dùng nhấp vào ‘Close’ X của biểu mẫu. Mã này hủy hành động, vì vậy người dùng buộc phải sử dụng nút 'Thoát' của bạn và mã mà bạn có đằng sau nó.

Bật và tắt điều khiển

Tất cả các điều khiển trên biểu mẫu của bạn có một thuộc tính gọi là 'Đã bật' được đặt thành Đúng hoặc Sai. Nếu nó là False, thì điều khiển có màu xám. Nó có thể được nhìn thấy nhưng không thể được sử dụng.

Ngoài ra còn có một thuộc tính gọi là 'Hiển thị', một lần nữa được đặt thành Đúng hoặc Sai.

Bạn có thể viết mã để làm cho một điều khiển nhất định không thể sử dụng được hoặc để làm cho nó hoàn toàn ẩn đối với người dùng. Sử dụng câu lệnh 'If', bạn có thể chọn các trường hợp khi bạn cần thực hiện việc này

Ví dụ: ban đầu bạn có thể tắt nút ‘Thoát’ cho đến khi người dùng nhập một giá trị vào TextBox1 (tên)

123 Private Sub UserForm_Initialize ()CommandButton1.Enabled = SaiKết thúc Sub
1234567 Private Sub TextBox1_Change ()Nếu Len (TextBox1.Value)> 0 ThìCommandButton1.Enabled = TrueKhácCommandButton1.Enabled = SaiKết thúc nếuKết thúc Sub

Mã này sử dụng sự kiện 'Khởi tạo' biểu mẫu để tắt nút thoát (Nút lệnh 1) khi biểu mẫu lần đầu tiên xuất hiện và sau đó sử dụng sự kiện 'Thay đổi' trên TextBox1 (tên) để bật nút Thoát nếu có thứ gì đó đã được nhập hoặc tắt nó nếu ô trống.

Sự kiện 'Thay đổi' được kích hoạt mỗi khi nhập hoặc xóa ký tự mới khỏi hộp văn bản. Nếu người dùng cố gắng nhập văn bản để kích hoạt nút, sau đó xóa tất cả văn bản, nút sẽ bị vô hiệu hóa ngay lập tức

wave wave wave wave wave