Mừng Sinh Nhật GPE 11: sáng 25/6 Hà Nội; 1/7 Huế/Đà Nẵng; Trưa 2/7 TPHCM

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

Thảo luận trong 'Cấu trúc dữ liệu Excel và việc Xử lý dữ liệu' bắt đầu bởi PhanTuHuong, 16 Tháng sáu 2006.

  1. PhanTuHuong

    PhanTuHuong Excel & AutoCad & VBA

    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.

    [​IMG]

    - 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
     
    Lần chỉnh sửa cuối: 9 Tháng bảy 2006
  2. PhanTuHuong

    PhanTuHuong Excel & AutoCad & VBA

    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.
     
  3. PhanTuHuong

    PhanTuHuong Excel & AutoCad & VBA

    File minh họa kèm theo
     

    Các file đính kèm:

  4. adam_tran

    adam_tran Thành viên danh dự

    Ứng dụng Validation kết hợp - Chọn nhiều danh sách trên 1 ô

    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.
     

    Các file đính kèm:

  5. adam_tran

    adam_tran Thành viên danh dự

    Validation - Không nhập trùng 2 giá trị trên 1 cột/vùng

    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))
     
  6. Đào Việt Cường

    Đào Việt Cường Cu Tí sành điệu

    Khi nào thì dùng Validation hay Combo Box?

    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 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!
     
    Lần chỉnh sửa cuối: 12 Tháng bảy 2006
  7. Tuấn Giang

    Tuấn Giang Thành viên chính thức

    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,
     
  8. Nguyễn Duy Tuân

    Nguyễn Duy Tuân Nghị Hách

    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?

    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
     
    Lần chỉnh sửa cuối: 17 Tháng tư 2007
  9. Mr Okebab

    Mr Okebab Ngon Ngất Ngây

    Đây là file VD như anh Tuân đã trình bày. (Chỉ một phần thôi)

    Validation+Combobox


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

    pxthanhcda Thành viên mới

    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.
     
  11. Mr Okebab

    Mr Okebab Ngon Ngất Ngây

    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!
     
    Chỉnh sửa lần cuối bởi điều hành viên: 4 Tháng sáu 2007
  12. pxthanhcda

    pxthanhcda Thành viên mới

    Cảm ơn bạn Mr Okebabđã chỉ giúp.Thế mà bấy lâu nây minh kô bít:''"
     
  13. Quangphuong

    Quangphuong Thành viên mới

    chào bạn! không biết làm sao bây giờ máy tôi cứ nhấn enter con trỏ lại chạy chéo

    đsfsfsd
    bạn giúp tôi với nhé, tôi đang rất cần
     
  14. kimlan

    kimlan Thành viên chính thức

    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è.
     
    Lần chỉnh sửa cuối: 31 Tháng bảy 2009
  15. anhtuan1066

    anhtuan1066 Thành viên gạo cội

    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
     
  16. anktdn

    anktdn Thành viên chính thức

    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?
     
  17. anhtuan1066

    anhtuan1066 Thành viên gạo cội

    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
     
  18. thietkevt

    thietkevt Thành viên mới

    Hỏi về độ rộng Column

    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)
     
    Lần chỉnh sửa cuối: 25 Tháng tư 2008
  19. tedaynui

    tedaynui (*_*)

    Để 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
     
  20. thietkevt

    thietkevt Thành viên mới

    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!
     

Chia sẻ trang này