PDA

View Full Version : Sử dụng chức năng Validation thay thế combo trong forms



PhanTuHuong
16-06-06, 10:20 AM
Trước kia, để lấy một giá trị trong một CSDL, ta thường dùng hàm Index. Và để chuyên nghiệp hơn thì dùng nút combo trong forms. Tất nhiên là phải khai báo các thông tin về vùng dữ liệu- Input range (CSDL), ô liên kết - cell link, số dòng thả xuống- drop down lines. Bài toán trở nên phức tạp vì nhiều liên kết.
Nhưng bây giờ bạn có thể dùng chức năng Validation bằng cách như sau:
- Chọn ô nhận dữ liệu. VD: F11
- Vào Data/ Validation. Cửa sổ Data Validation hiện ra.
- Trong setting ta chọn list, và khai báo vùng dữ liệu (CSDL) trong Source.
- Cuối cùng bạn đã được ô liên kết với CSDL. Khi di chuyển chuột đến thì ô đó hiện ra nút cuộn xuống ở bên phải.

http://i63.photobucket.com/albums/h133/tuhuong/untitled-1.jpg

- Ngoài ra bạn có thể bổ sung 1 số thông tin trong Input massage, hay bẫy lỗi Error Alert
- Ngoài ra còn một số chức năng khác trong Data Validation\ Settings\ Allow

PhanTuHuong
20-06-06, 11:20 AM
Tôi xin bổ sung file minh họa kèm theo.

Còn nội dung toàn bộ thì thì anh Luky Luck đã trình bày rồi.

PhanTuHuong
20-06-06, 11:23 AM
File minh họa kèm theo

adam_tran
11-07-06, 01:38 PM
Ta có thể đưa vào Validation - List nhiều danh sách phụ thuộc vào 1 giá trị nảo đó. Ví dụ bạn muốn quản lý công nợ nhiều loại, 131, 141, 138, 331, 338 v...v trên cùng 1 sheet. Nếu mở tài khoản cấp 2 thì bạn rất dễ lẫn lộn, mở thêm 1 cột phụ cho mã đối tượng là cách hay nhất, nhưng để chung một danh sách thì rất khó nhớ. Validation - List sẽ giúp bạn chọn đối tượng tương ứng với tài khoản.
Có nhiều cách để làm được điều này (nhiều công thức cũng như cách tổ chức). File kèm theo là 1 cách. Các công thức đều nằm trong 3 name động:
dmObjectCode: Mã các TK trong DM, các loại khác để Other
dmObColumn: Xác định cột đối tượng với 1000 dòng
dmObject: Cắt bớt cột đối tượng, bỏ những dòng trắng.

adam_tran
12-07-06, 03:27 PM
Nếu bạn muốn dữ liệu nhập không có giá trị trùng, thí dụ mã hàng trong DMHH chẳng hạn, bạn vào Validation, mục Criteria bạn chọn Custom nhập vào biểu thức:
(Giả sữ cột A)
=COUNTIF(A:A, A1) <=1

Để tránh nhập ngày theo kiểu text, bạn nhập vào biểu thức

=NOT(ISTEXT(A1))

Đào Việt Cường
12-07-06, 04:37 PM
Dear all,
-------
Theo em, ở mức độ đơn giản, những người dùng Excel thường chọn Validation hơn là dùng Combo box. Tuy nhiên ở một số trường hợp phức tạp, chúng ta nên lựa chọn Combo box sẽ hiệu quả hơn. Em xin nêu một số lý do của em khi em muốn chọn Combo box mà không phải là Validation:
1. Không muốn tạo sự kiện Worksheet_Change:
Sự kiện này xảy ra khi có bất cứ một ô nào bị "Edit". Validation là một thuộc tính của cell do đó mỗi lần giá trị thay đổi, biến cố Change xảy ra. Điều này rất phiền toái khi chúng ta có xử lý sự kiện Change của Worksheet.
Chúng ta có thể thay thế sự kiện này bằng sự kiện Change của Combo box mà không cần bận tâm đến sự kiện thay đổi của Worksheet
2. Nguồn dữ liệu:
Đây là điểm khác nhau cơ bản giữa hai đối tượng này. Nếu quan sát kỹ chúng ta thấy rằng Validation thường sử dụng nguồn là một Range hoặc Name. Có những hạn chế nhất định nếu chúng ta sử dụng Validation với nguồn dữ liệu riêng lẻ, bao gồm tập hợp {n} phần tử độ lập hoặc không nằm trên Worksheet. Chúng ta chỉ có thể tạo ra một danh sách 255 phần tử độc lập cho Validation, nhưng với Combo box chúng ta có thể gán được với số phần từ nhiều hơn thế!
3. Nhu cầu về tạo nhiều cột khi sổ danh sách liệt kê:
Tất nhiên Validation vẫn có thể làm được nhưng vẫn "phải động vào một ít VBA" nhưng theo em thì Combo box vẫn làm điều này tốt hơn. Ta chỉ việc thiết lập lại thuộc tính ColunmCount là xong.

www.giaiphapexcel.com (http://www.giaiphapexcel.com) còn có nghĩa là giúp chúng ta lựa chọn giải pháp nào tối ưu nhất!

Tuấn Giang
16-04-07, 03:53 PM
Cho em hỏi chút về COMBO BOX,

Trong một sheet em lập 3 cái COMBO BOX, nguồn dữ liệu lấy từ một sheet khác. ColumnCount là 2, CellLinked đến một ô trong sheet hiện hạnh. Nhưng không hiểu sao chỉ 2 cái đầu là chạy bình thường, còn cái thứ 3 thì không chạy. Cụ thế như sau:

1. Khi bấm vào hình tam giác chỉ xuống thì chỉ hiện dữ liệu ở Column 1 mà không có dữ liệu Column 2.

2. Chọn thử một dữ liệu bất kỳ thì không thấy hiện dữ liệu đó trong COMBO BOX, cũng không thấy nó hiện lên ở CellLinked.

Em đã kiểm tra kỹ thì thấy có 2 điểm khác so với những COMBO BOX kia (2 Cái thực hiện được bình thường), đó là 2 chỉ tiêu TEXT và VALUE trên thể Alphabetic không thấy hiện giá trị.

Em thử điền giá trị vào đó nhưng nó không nhận.

Vậy vấn đề của nó là gì vậy? Và cách nào để khắc phục? Các bác chỉ dùm nhé, em đang rất cần.

Thanks,

Nguyễn Duy Tuân
17-04-07, 02:18 AM
Giả sử tôi cần tạo một Combo Box, có danh sách là 2 cột lấy trong Sheet2 vùng A1:B10. Ô liên kết (nhận và truyền giá trị từ Combo Box) là A1 của Sheet hiện tại.

1- Tạo Combo Box từ "Control Toolbox"
2- Nhấp chuột phải trên đối tượng chọn "Property"
3- Gián giá trị cho Property của đối tượng
ListFillRange = Sheet2!A1:B10
LinkCell = A1

Vì danh sách gồm 2 cột, bạn quan tâm tới những Property sau:

BoundColumn là 1 'Giá trị nhận ở cột 1
ColumnCount là 2
ColumnWidths là 50;250 'Cột 1 trộng 50, cột 2 rộng 250 . Không có dấu =
ListWidth là 300 'Vì 50 + 250 = 300

Bạn làm thật cẩn thận xem có được không?



1. Không muốn tạo sự kiện Worksheet_Change:
Sự kiện này xảy ra khi có bất cứ một ô nào bị "Edit". Validation là một thuộc tính của cell do đó mỗi lần giá trị thay đổi, biến cố Change xảy ra. Điều này rất phiền toái khi chúng ta có xử lý sự kiện Change của Worksheet.
...

Lập trình trên Excel thì các sự kiện của nó như: "Worksheet_Change";"Worksheet_SelectionChange"...rất quan trọng. Ta không nên né tránh nó. Chính vì thế anh mới một bài nói về vấn đề này hình như là "Tăng tốc độ trên Excel...".
Để đảm bảo hệ thống Excel chạy bình thường thì cấu trúc code nên viết như sau:

Sub Test()
On Error GoTo EndSub: 'Cần phải có để đảm bảo EnableEvents nhận lại giá trị ban đầu.

Dim bEnableEvents As Boolean
'Lưu giá trị cũ và gán giá trị mới cho EnableEvents của Excel
bEnableEvents = Application.EnableEvents
Application.EnableEvents = False 'Khóa tất cả các sự kiện của Excel

'--Ví du Code của người dùng----
'---Range("A1").Value="xzy"
'......

EndSub:

'Hoàn trả giá trị cũ cho EnableEvents của Excel
Application.EnableEvents = bEnableEvents

End Sub

Mr Okebab
20-04-07, 12:52 PM
Đây là file VD như anh Tuân đã trình bày. (Chỉ một phần thôi)

Validation+Combobox (http://www.giaiphapexcel.com/forum/attachment.php?attachmentid=1210&d=1177048143)

Em thấy đây là một giải pháp rất hay.
Cảm ơn anh nhiều!

pxthanhcda
04-06-07, 01:08 AM
Trước kia, để lấy một giá trị trong một CSDL, ta thường dùng hàm Index. Và để chuyên nghiệp hơn thì dùng nút combo trong forms. Tất nhiên là phải khai báo các thông tin về vùng dữ liệu- Input range (CSDL), ô liên kết - cell link, số dòng thả xuống- drop down lines. Bài toán trở nên phức tạp vì nhiều liên kết.
Nhưng bây giờ bạn có thể dùng chức năng Validation bằng cách như sau:
- Chọn ô nhận dữ liệu. VD: F11
- Vào Data/ Validation. Cửa sổ Data Validation hiện ra.
- Trong setting ta chọn list, và khai báo vùng dữ liệu (CSDL) trong Source.
- Cuối cùng bạn đã được ô liên kết với CSDL. Khi di chuyển chuột đến thì ô đó hiện ra nút cuộn xuống ở bên phải.

http://i63.photobucket.com/albums/h133/tuhuong/untitled-1.jpg

- Ngoài ra bạn có thể bổ sung 1 số thông tin trong Input massage, hay bẫy lỗi Error Alert
- Ngoài ra còn một số chức năng khác trong Data Validation\ Settings\ Allow Bạn cho mình hỏi tạo cái Drop Down 1(Combo) như thế nào.Minh tạo từ Control box nhưng không giống.

Mr Okebab
04-06-07, 08:30 AM
Bạn cho mình hỏi tạo cái Drop Down 1(Combo) như thế nào.Minh tạo từ Control box nhưng không giống.

ControlBox thuộc thanh công cụ VisualBasic
Còn cái trên là ComboBox thuộc thanh công cụ Form bạn ạ
(Click chuột phải lên thanh công cụ, chọn Form)

Thân!

pxthanhcda
05-06-07, 05:11 AM
Cảm ơn bạn Mr Okebabđã chỉ giúp.Thế mà bấy lâu nây minh kô bít:''"

Quangphuong
24-07-07, 09:20 AM
Tôi xin bổ sung file minh họa kèm theo.

Còn nội dung toàn bộ thì thì anh Luky Luck đã trình bày rồi.đsfsfsd
bạn giúp tôi với nhé, tôi đang rất cần

kimlan
19-12-07, 10:42 AM
Tôi xin bổ sung file minh họa kèm theo.

Còn nội dung toàn bộ thì thì anh Luky Luck đã trình bày rồi.
bạn có thể chỉ cho mình làm giống file bạn posst lên mạng đó.Làm thế nào để cho combo box chạy theo hết cột xuống dưới với lại làm cách nào nó ko hiện combo box đứng một chỗ mà có thể di chuyển theo ý mình chọn mỗi khi con trỏ ở đâu thì nó ở đó.Giống file bạn phamtuhuong mình gởi kèm theo luôn nè.

anhtuan1066
19-12-07, 02:30 PM
bạn có thể chỉ cho mình làm giống file bạn posst lên mạng đó.Làm thế nào để cho combo box chạy theo hết cột xuống dưới với lại làm cách nào nó ko hiện combo box đứng một chỗ mà có thể di chuyển theo ý mình chọn mỗi khi con trỏ ở đâu thì nó ở đó.Giống file bạn phamtuhuong mình gởi kèm theo luôn nè.
Nếu bạn là người mới học thì tôi nghĩ bạn khó lòng nuốt trôi nỗi mấy code này chứ đừng nói là làm dc giống nó.. Dù có giãi thích chưa chắc bạn đã hiểu.. Giờ bạn chỉ có 2 lựa chọn:
-Một là mang về xài luôn ko cần suy nghĩ
-Hai là xài tạm cái Validation có sẳn trong Excel... mai này học hỏi thêm rồi hẳn tính
ANH TUẤN

anktdn
28-03-08, 01:01 PM
Các Bác cho em hỏi, vì sao khi sử dụng combo box từ Control Toolbox thì nó chỉ chấp nhận dạng text , còn value thì không chấp nhận, các Bác có thể khắc phụ vấn đề này được không?

anhtuan1066
28-03-08, 01:11 PM
Bạn có thể khắc phục nó bằng cách: Hảy nhân cell link với 1 (hoặc dùng hàm VALUE ) trước khi mang nó ra tính toán...
ANH TUẤN

thietkevt
25-04-08, 04:14 AM
Trường hợp anh TuanVNUNI làm Validation có thêm cột phụ để diễn giải, nhưng không chỉnh được độ rộng của cột, chỉ chỉnh được độ rộng của toàn List (dùng ListWidth)
Xin có anh nào biết chỉ cho nhé (File của anh Tuân là : Validation_Ext.xls)
(Load file tại đây http://www.giaiphapexcel.com/forum/showthread.php?t=1369)

tedaynui
25-04-08, 07:11 AM
Trường hợp anh TuanVNUNI làm Validation có thêm cột phụ để diễn giải, nhưng không chỉnh được độ rộng của cột, chỉ chỉnh được độ rộng của toàn List (dùng ListWidth)
Xin có anh nào biết chỉ cho nhé (File của anh Tuân là : Validation_Ext.xls)
(Load file tại đây http://www.giaiphapexcel.com/forum/showthread.php?t=1369)
Để chỉnh độ rộng của cột, bạn chỉnh trong Properties / ColumnWidths (VD : 20 pt;45 pt; 100pt --> ứng với độ rộng của từng cột 1;2;3)

TDN

thietkevt
22-05-08, 11:18 AM
Để chỉnh độ rộng của cột, bạn chỉnh trong Properties / ColumnWidths (VD : 20 pt;45 pt; 100pt --> ứng với độ rộng của từng cột 1;2;3)

TDN

Vấn đề là anh Tuân dùng file dll để điều khiển, vì vậy viết code như bạn nói toàn là báo lỗi!

bongmaao
27-05-11, 04:58 PM
Mình đã đọc những bài hướng dẫn tạo combobox trong excel nhưng mình không thể làm ra được, Bạn nào có thể hướng dẫn thật chi tiết va có tập tin đính kèm không? Mình không biết nhiều nên đọc không hiểu gì hết.
Xin cảm ơn nhiều !

sealand
27-05-11, 05:28 PM
Bạn là dân mới mình gửi bạn file exe này. Nhấn chạy nó sẽ thấy ví dụ đơn giản nhất

leduonghung
29-08-12, 03:47 PM
Ta có thể đưa vào Validation - List nhiều danh sách phụ thuộc vào 1 giá trị nảo đó. Ví dụ bạn muốn quản lý công nợ nhiều loại, 131, 141, 138, 331, 338 v...v trên cùng 1 sheet. Nếu mở tài khoản cấp 2 thì bạn rất dễ lẫn lộn, mở thêm 1 cột phụ cho mã đối tượng là cách hay nhất, nhưng để chung một danh sách thì rất khó nhớ. Validation - List sẽ giúp bạn chọn đối tượng tương ứng với tài khoản.
Có nhiều cách để làm được điều này (nhiều công thức cũng như cách tổ chức). File kèm theo là 1 cách. Các công thức đều nằm trong 3 name động:
dmObjectCode: Mã các TK trong DM, các loại khác để Other
dmObColumn: Xác định cột đối tượng với 1000 dòng
dmObject: Cắt bớt cột đối tượng, bỏ những dòng trắng.

Làm sao để chức năng Data Validation có thể sử dụng list danh sách như của bạn nhỉ?
Mình sử dụng Data Validation chỉ được tronh 1 sheet, tức là list và data cùng nằm trong 1 sheet

buithinhvan77
29-08-12, 07:39 PM
Làm sao để chức năng Data Validation có thể sử dụng list danh sách như của bạn nhỉ?
Mình sử dụng Data Validation chỉ được tronh 1 sheet, tức là list và data cùng nằm trong 1 sheet
Bạn tạo thêm name là được!