Đăng ký học Excel và VBA cùng GPE tháng 11 - TPHCM

Đăng ký học Excel và phân tích số liệu cùng GPE tháng 12 - TPHCM

Mua sách "VBA trong Excel - Cải thiện và tăng tốc" tái bản

ComBoBox trong Excel

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 handung107, 22 Tháng sáu 2006.

  1. handung107

    handung107 Administrator Staff Member

    Lê Văn Duyệt​


    Muốn tạo combo box trong Excel (chứ không phải trong VBE) thì bạn làm như sau:
    Đưa con trỏ đến thanh tiêu đề của màn hình Excel (như hình sau)
    [​IMG]
    Sau đó bạn chọn mục Visual basic
    [​IMG]
    Và tới đây bạn click vào Control Toolbox (hình cái búa và kèm?)
    Chú ý khi bạn thiết kế bạn nên để ở chế độ design mode hình cây thước Eke.
     
  2. handung107

    handung107 Administrator Staff Member

    Các bạn nhìn lên hình trên, bạn cũng thấy có thể vào View / Toolbars /Control Toolbox, bạn cũng được một thanh công cụ để tạo ComboBox. ComboBox này thuộc lọai ActiveX Control.
    Bạn cũng có thể tạo ComboBox bằng thanh Menu View/ Toolbars/ Form.
     
  3. handung107

    handung107 Administrator Staff Member

    Bạn muốn có 1 ComboBox sử dụng chung để lựa chọn 3 DS ?

    Chúng ta đã biết để tạo các DS lựa chọn, có thể dùng Data / Validation hay ComboBox. Nhưng chúng ta vẫn có thể kết hợp nhiều DS lựa chọn cho cùng một ComboBox hay Validation. Điều này rất cần thiết cho các bạn nào muốn File thiết kế của chúng ta tiết kiệm khỏi phải Insert các Sheet nhiều quá.

    TD : Bạn có thể thiết kế Sổ chi tiết thanh toán chung cho cả Khách hàng, NCC, thanh toán tạm ứng và cả tiền vay nữa. Chúng ta chỉ cần một Cell để làm vùng Criteria và tại Cell này, chúng ta sẽ đặt DS để lựa chọn.
    Ta sẽ đặt CSDL tại Sheet DS. Cột A ta có DS những Mã KH Nợ, cột B ta có DS nợ các Mã NCC, cột C ta có DS các Mã NV nhận tạm ứng, cột D ta có DS các Mã nguồn Vay ngắn hạn. DS của tôi bắt đầu từ A2:D100

    1/ Thiết kế ComboBox và các Option để chọn lựa :

    Bạn vào View / Toolbars /Forms. Chọn nút Option, bạn lần lượt vẽ cho tôi 4 Option và đặt tên là :
    Option 1 : DS KH Nợ
    Option 2 : DS Nợ NCC
    Option 3 : DS NV nhận tạm ứng
    Option 4 : DS Vay ngắn hạn
    Vào Format Control, tại thẻ Control bạn cho Link Cell tại G2 chẳng hạn, bạn có thể Link tại đâu tuỳ thích, và nếu bạn muốn đẹp, hãy Format Cell này có Font chữ màu trắng
    Tại Cell E1 bạn đặt công thức :
    =ADDRESS(2,$G$2)&":"&ADDRESS(100,$G$2)
    Bạn vào Insert Name đặt tên cho ô E1 này là MyRange. Tại hộp Reference, bạn nhập công thức sau :
    =Indirect(DS!E1)

    Sau đó, chúng ta lại dùng thanh công cụ Form, chọn nút ComboBox, vẽ 1 ComboBox và vào Menu Format Control, tại thẻ Control, chúng ta nhập vào hộp Input Range là MyRange.
    Thế là bây giờ, bạn chỉ cần lựa các Option, DS trong ComboBox sẽ thể hiện đúng DS các bạn cần để các bạn lựa chọn
    2/ Dùng Data Validation :
    Nếu bạn sử dụng Data Validation, bạn không cần ComboBox, nhưng vẫn dùng các Option như trên để chọn lựa. Bạn đặt Validation vào Cell bất kỳ. Tại hộp Validation, bạn chọn List tại hộp Allow, và tại Source, bạn nhập : =MyRange. Bạn cũng sẽ đạt được kết quả như trên
    Chúc các bạn thành công
     
  4. handung107

    handung107 Administrator Staff Member

    Chọn nhiều danh sách trên cùng 1 ComboBox (Dùng VBA

    Adam_tran​


    Chọn nhiều danh sách trên cùng 1 ComboBox (Dùng VBA)

    Có một cách cũng đơn giản (nhưng phải dùng VBA) để ComboBox của chúng ta có thể chọn nhiều hơn 1 danh sách bằng cách viết mã vào thủ tục GotFocus, Click , Worksheet_Change v...v.
    Đối với control ComboBox trên thanh Toolbar Control Toolbox, ta thay đổi thuộc tính ListFillRange, còn ComboBox trên Form ta thay đổi thuộc tính RowSource.
    Private Sub ComboBox1_GotFocus()
    If Dieukien1 Then ComboBox1.ListFillRange = Range1
    ElseIf Dieukien2 Then ComboBox1.ListFillRange = Range2
    ElseIf Dieukien3 Then ComboBox1.ListFillRange = Range3
    ... v...v
    end if
    End Sub
     
  5. handung107

    handung107 Administrator Staff Member

    Sự khác nhau giữa ComboBox tạo bằng Menu Form và Menu Control ToolBox

    Adam tran​


    Cả 2 object trên đều có chức năng tương tự nhau, do đó bạn tìm hiểu 1 chút để sử dụng phù hợp cho mình. Cái khác nhau thì nhiều, từ "nguồn", các thuộc tính, các Method đều khác nhau. Bạn phải học VB nhiều, chuyên sâu cỡ bác hai2hai hay Tuân mới hiểu. Tôi chỉ hiểu nôm na thế này:
    - ComboBox trên thanh công cụ Form bản chất nó là 1 Graphic Object, nó chỉ có thêm 1 vài thuộc tính (nằm trong Tab Format - Control). Nó không có các method riêng cũng như nhiều thuộc tính "chuẩn" của một Control. "Nguồn" của nó có lẽ chính là file Excel.exe
    - ComboBox trên thanh Cotrol Tools Box là 1 addtional control thuộc bộ MS Form 2.0 control (File nguồn FM20.DLL). Tùy nơi sử dụng (sử dụng trực tiếp dạng Embed trên worksheet hay sử dụng trên Form VBA) mà nó có một số thuộc tính và Method khác nhau.

    Paulsteigel​


    Về cơ bản Combo Box trên Excel được phân làm 2 nhóm sau:
    1. Combo box nằm trong bộ điều khiển của Excel:
    Đây là bộ điều khiển viết riêng của Excel và có thể đặt trực tiếp vào các trang tính của excel. Các điều khiển này có thể làm việc trực tiếp với các đối tượng của trang tính.
    Hãy tưởng tượng thế này: Trang tính excel như một form và chúng ta bổ sung các điều khiển trực tiếp vào nó như khi thiết kế form trong VBA. Chỉ có điều khác, sau khi kết thúc thiết kế, ta phải đưa Trang tính về chế độ chạy bằng cách bật công tắc trên thanh công cụ Form Control hoặc bật chế độ Protect Sheet. (Khác với Form trong VBA - ta cần bấm F5 đúng không)
    Các đối tượng này nằm trên thanh công cụ Form control.
    Sự kiện liên quan đến loại đối tượng này sẽ gọi trực tiếp đến một thủ tục nằm trong Module của Workbook hoặc trong module của worksheet, tuỳ theo ta gán cho nó thủ tục nào. Và lưu ý là thủ tục của các đối tượng này không giống như thủ tục sự kiện của các điều khiển.
    2. Combo box trong bộ thư viện MsForm Control 2.0
    Cái này chính là các điều khiển như ta nhìn thấy trên thanh công cụ khi thiết kế form trên VBA. Excel cho phép chúng ta nhúng các điều khiển này vào trang tính qua thủ tục embed.
    Để đưa các đối tượng này vào sheet ta chỉ cần chọn Thanh công cụ Control Toolbox thôi.
    Sau khi kéo thả một đối tượng vào Sheet, ta có thể thấy được đoạn mã sau trên thanh công thức của bảng tính.
    =EMBED("Forms.ComboBox.1","")
    Với các đối tượng này, chúng ta có thể viết mã sự kiện trực tiếp cho nó giống như một điều khiển thông thường của Form trong VBA. Bạn chỉ cần nhấn kép một đối tượng điều khiển này là có thể bật màn hình soạn thảo VBA thôi.
    Sau khi kéo thả xong, các điều khiển này sẽ sẵn sàng để thực hiện mà không cần khoá như trong phần1.

    Đào Việt Cường​


    Vấn đề đã được đưa ra đây thì em xin phép góp ý thêm thế này.
    Nếu xem xét ở góc độ thiết kế, hai điều khiển này có sự khác nhau tương đối:
    - Một là (em chỉ làm rõ ý của bác Pauls): Drop down trên Forms toolbar chỉ có thể được vẽ (thiết kế) trên Sheet - chúng ta không làm việc với nói trên VBA Design. Ngược lại khi làm việc với điều khiển này, bạn không phải bật công tắc Design Mode để vào thiết kế giống ComboBox
    - Hai là tập hợp các thuộc tính của chúng khác nhau: nói cho rõ hơn thì Drop Down không có thuộc tính (Properties). Điều mà có thể bạn quan tâm nhiều nhất đến điều khiển này là thẻ Control trong bảng Format Control.
    - Ba là thủ tục sự kiện: Như bác pauls đã nói, thủ tục của các Drop Down không giống như thủ tục sự kiện của các điều khiển. Hầu như bạn không thể làm được gì ngoài việc phải assign hay chỉnh sửa vĩ lệnh macro cho Drop Down. Với Combobox, bạn có thể lựa chọn các sự kiện và xây dựng chúng như các đối tượng khác.
     
    Lần chỉnh sửa cuối: 22 Tháng sáu 2006
  6. handung107

    handung107 Administrator Staff Member

    Tác động đến các combobox trong worksheets

    OverAC​


    Em có Một số các combox được tạo ra trên worksheet (chứ không phải trên form).
    Và em muốn dùng VBA để thay đổi một số properties của combox này nhưng không biết phải làm thế nào mong các bác giúp đở
     
  7. handung107

    handung107 Administrator Staff Member

    Đào Việt Cường​


    Việc điều khiển các control thuộc về vấn đề kỹ thuật. Tôi xin phép các cao thủ xin góp ý như thế này:
    Truy xuất đến thuộc tính của đối tượng nào đó phụ thuộc vào các khai báo biến/thủ tục. Hơn nữa phạm vi và tầm ảnh hưởng của các biến/thủ tục phụ thuộc vào từ khoá khai báo (Public, Private, Dim...)
    Bạn vẫn có thể truy xuất đến các thuộc tính của điều khiển từ một module chuẩn (standard module) chứ không bắt buộc phải từ "module của sheet" (module chứac các sự kiện - nói nôm na là vậy) có chứa điều khiển đó. Cú pháp:
    [Workbook.][Worksheet.]<Control>.<Property>
    Bạn lưu ý là nếu bạn đang ở một module khác với "module của sheet" thì cách truy cập này bạn có thể không được hỗ trợ Ctrl + PaceBar.
    Theo tôi, để dễ đọc và dễ quản lý, bạn lên khai báo một điều khiển với kiểu là kiểu của điều khiển được bạn vẽ trên sheet sau đó gán điều khiển trên sheet vào điều khiển mà bạn đã khai báo:
    Dim <myControl> as <ControlType>
    Set <myControl>=[Workbook.][Worksheet.]<Control>
    Sau đó làm việc với <myControl> này bình thường.
     
  8. thhch

    thhch Thành viên mới

    E không làm thế nào để đặt các danh sách trên một sheet khác,cái combox luôn nhận name của myrange trên sheet đặt nó, anh help em với
     
  9. PhanTuHuong

    PhanTuHuong Excel & AutoCad & VBA

    Bạn thử vào và tải file ví dụ của tôi gửi lên về:

    http://www.giaiphapexcel.com/forum/showthread.php?t=94

    Công thức ô F4=INDEX(Sheet1!A3:A8,C3,1)

    Còn trong Format Control, khai báo trong Input range:
    Sheet1!$A$3:$A$8

    Ví dụ dữ liệu gốc nằm tại Sheet1

    Chúc bạn thành công!
     
  10. thhch

    thhch Thành viên mới

    E muốn các option va combox nằm một sheet và dữ liệu nằm ở sheet khác, e tải file lên cho các anh xem thử, các a hưỡng dẫn dùm
     

    Các file đính kèm:

  11. Đào Việt Cường

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

    Dear thhch,
    ------------
    Bạn chỉ cần chỉnh sửa lại một chút công thức tại ô H7 trong Sheet2 như thế này là ổn:
    ="Sheet2!"&ADDRESS(1;Sheet2!H4)&":"&(ADDRESS(3;Sheet2!H4))
    Bạn chú ý các địa chỉ tham chiếu mặc định sẽ được sử dụng là Sheet hiện hành. Nếu bạn muốn chỉ ra tường minh thì phải điền đẩy đủ thông tin cho tham chiếu theo dạng sau:
    [Workbook!][Worksheet!]Address
     
  12. thhch

    thhch Thành viên mới

    ok rồi thanks
     
  13. Davidsy

    Davidsy Thành viên mới

    Trên form, tôi đặt một ComboBox với thuộc tính là 2 colomne. Bây giờ tôi muốn dùng VB để AddItem vào combo này, tuy nhiên tôi chỉ làm được có 1 cột à ...
    Có cách nào addItem vào combo cho 02 cột không các bác ... em 'mò' hoài mà chưa biết!
    Cảm ơn các bác nhé ...
     
  14. Mr Okebab

    Mr Okebab Ngon Ngất Ngây

    Tại Linked Cell mình đặt công thức : A1 hay Sheet1!A1 nhằm lấy giá trị của Combobox vào ô A1 của Sheet1 (hay Sheet hiện hành).

    Bình thường vẫn không sao. Nhưng thỉnh thoảng Excel bị "hai lần chín", thế là nó lại chạy sang ô A1 của sheet khác hoặc của File khác (mặc dù tên Sheet hoàn toàn khác).

    Thế là mình đành cho nó Linked đến ô AW1 chẳng hạn, sau đó tại ô A1=AW1 để nếu có chạy sang sheet khác thì cũng không ảnh hưởng đến dữ liệu.

    Không biết tại sao nhỉ ?????
    P/S : Mình đã dặt cả địa chỉ tương đối và tuyệt đối nhưng vẫn bị.
     
  15. nvson

    nvson Geotechnics

    Bạn tham khảo code sau:
    Mã:
    Private Sub UserForm_Initialize()
    '
        ComboBox1.ColumnCount = 2
        '
        ComboBox1.AddItem "Lua chon 1, Cot so 1"
        ComboBox1.List(0, 1) = "Lua chon 1, Cot so 2"
        '
        ComboBox1.AddItem "Lua chon 2, Cot so 1"
        ComboBox1.List(1, 1) = "Lua chon 2, Cot so 2"
    '
    End Sub
    
     
  16. Mr Okebab

    Mr Okebab Ngon Ngất Ngây

    Bác NVSon thiên vị thế, sao không trả lời cho mình luôn.
    híc híc híc . . . . .
     
  17. nvson

    nvson Geotechnics

    Chào MrHieu!
    Thực tình thì tôi cũng chưa gặp "lỗi" trên bao giờ nên cũng chưa thể trả lời chính xác cho bạn được.
    Có lẽ là do Excel bị 2x9????
    Để chính xác thì anh upload file lên diễn đàn để mọi người cùng khắc phục giúp cho!
     
  18. Mr Okebab

    Mr Okebab Ngon Ngất Ngây

    Up file, nhưng có khi chạy thì nó không bị gì, nhưng thỉnh thoảng (khoảng 0,001%) thì nó lại bị. Thế mới khổ chứ. Mọi người chạy thấy không sao thì mình lại bị chửi bây giừ. hì hì
    Thân!
     
  19. vanthutb

    vanthutb Thành viên mới

    Chào bạn Handung107.Bạn có thể chỉ cho tôi cách mở cái hộp Reference được không? Tôi mới hoc excel ma.
     
  20. Mr Okebab

    Mr Okebab Ngon Ngất Ngây

    Cảm ơn cậu nhé, Cậu viết từ tháng 1 mà nay tháng 10 tớ mới ngộ ra (đủ để vợ tớ snh được em bé--=0--=0--=0)

    Cho hỏi thêm : Để
    ComboBox1.List(1, 1) = "Lua chon 1, Cot so 2"
    ComboBox1.List(2, 1) = "Lua chon 2, Cot so 2"

    Thì phải làm sao ????

    Thật đúng là . . . tứ chi phát triển!!!

    Thân!
     

Chia sẻ trang này