Hỏi về ComboBox

Thảo luận trong 'Ứng dụng Excel' bắt đầu bởi adam_tran, 30 Tháng mười hai 2005.

7,393 lượt xem

  1. adam_tran

    adam_tran Steel Partner

    Bài viết:
    1,373
    Đã được thích:
    32
    Nơi ở:
    Goooogle
    Thuộc tính ColumnCount của ComoBox cho phép hiển thị 2 cột khi RowSource có hơn 2 cột. Vật khi dùng Method AddItem, làm sao Add cả 2 cột này.
    Thí dụ tôi muốn duyệt qua danh sách vật tư gồm mã và tên, tôi chỉ Add vào một số đủ điều kiện thôi. Nếu Add mã không thỉ dễ, nhưng tôi muốn Add cả tên kèm theo ở cột thứ 2.

    Tương tự khi tôi muốn đề cập đến đối tượng nhóm của các item (items) trong 1 combobox thì cú pháp như thế nào? Tôi thữ code sau nhưng nó báo lỗi:

    Dim Item
    For each Item in ComboBox.Items
    ''''''''''''''''''''''''''''
    Next
     
    #1
  2. HongViet

    HongViet Thành viên thân thiết

    Bài viết:
    286
    Đã được thích:
    10
    Nơi ở:
    Đà nẵng
    Giới thiệu cho các bạn biết với!

    Bạn có quyền đưa kèm files mà, Bạn có thể đưa lện đây cho bọn này tham khảo được không? Xin cảm ơn trước!
     
    #2
  3. Đào Việt Cường

    Đào Việt Cường Moderator

    Bài viết:
    400
    Đã được thích:
    2
    Giới tính:
    Nam
    Nơi ở:
    Khánh Hòa
    Dear chàng adam,
    -----------------
    Mỗi khi gặp khó khăn như thế này, em thường hỏi bác Office Assistant. Với câu hỏi của bác thì "bác ấy" trả lời như thế này (không biết có vừa ý bác không):

    Còn cái này:
    Theo em hiểu thì bác muốn truy cập đến một mục nào đó trong danh sách (gọi là Item cũng được). Tuy vậy ComboBox không có thuộc tính này (Items). Muốn truy vấn đến một hạng mục trong danh sách, ta dùng thuộc tính ListIndex(<index>)
    Chúc bác thành công!
    :hacker:
     
    Last edited: 3 Tháng một 2006
    #3
  4. adam_tran

    adam_tran Steel Partner

    Bài viết:
    1,373
    Đã được thích:
    32
    Nơi ở:
    Goooogle
    Chưa thử nhưng đây đúng là cái tôi cần đây. Cám ơn bạn nhiều!
     
    #4
  5. khuenguyen.tran

    khuenguyen.tran Thành viên sơ cấp

    Bài viết:
    40
    Đã được thích:
    0
    Nơi ở:
    HCM
    Mình đã thử đọan Code của bạn Đào Việt Cường về cách add một mảng gồm 2 cột vào ListBox hay ComboBox, nhưng bị báo lỗi, Lỗi báo do khai báo mảng MyArray(i,0) = i
    Bạn giúp lại mình nhé, hay bạn gửi cho mình File hướng dẫn vể khuenguyen.tran@gmail.com
    Cám ơn bạn nhiều
     
    #5
  6. Đào Việt Cường

    Đào Việt Cường Moderator

    Bài viết:
    400
    Đã được thích:
    2
    Giới tính:
    Nam
    Nơi ở:
    Khánh Hòa
    Dear khuenguyen.tran,
    ---------------------
    Trước khi đưa đoạn mã chương trình, mình luôn kiểm tra rất kỹ. Bạn kiểm tra lại xem có copy đủ hết chưa.
    Khả năng bạn đã copy thiếu dòng:
    Dim MyArray(6, 3)
    Thôi để mình đưa lên đây, các bạn cùng xem nhé!
     
    Last edited: 3 Tháng tư 2006
    #6
  7. handung107

    handung107 Thành viên thân thiết

    Bài viết:
    576
    Đã được thích:
    13
    Nơi ở:
    VN
    À, thực sự, nếu áp dụng đọan Code của Cường vào một Form có một ComboBox, và dùng thủ tục Private Sub UserForm1_Initialize() thì sẽ không Add được các Item có nhiều cột vào List Box hay ComboBox. Chị chỉ thực hiện được qua một CommandButton thôi, giống như File em đưa lên, dù thiết kế trên Form hay trên Worksheet cũng vậy.
    Cường thử xem, nếu không cần CommandButton mà chỉ cần khi Load Form lên là các Item tự cập nhật vào ComboBox có cách nào không ?
     
    #7
  8. hai2hai

    hai2hai VNUNI Makes a difference

    Bài viết:
    2,012
    Đã được thích:
    128
    Nơi ở:
    Hà nội
    Thêm 1 chú ý nhỏ: :)

    Đây là ComboBox, ListBox nằm trong bộ thư viện MS Form 2.0 (fm20.dll) của bộ ms office. Không phải các Controls khác. Dĩ nhiên là Excel thì làm với công cụ này rồi (Limit của FM20's ComboBox, ListBox là hình như chỉ support 20 columns thôi - ko nhớ lắm vì lâu quá rồi ko dùng đến món này)

    Cách thức add items này ngoài việc dùng mảng như Cường thì hình như (cũng ko nhờ nốt vì chỉ còn tý thông tin nằm trong đầu) là đầu tiên thì add item (col 0), sau đó thì dùng thuộc tính List(...ko nhớ...) hay là item(...) gì đó để update các columns còn lại - hơi phiền vì phải dùng đến 2 lệnh trong vòng lặp. Tuy nhiên, nếu dùng trong Excel thì làm như Cường (dùng mảng) là ổn rồi.

    Chị chỉ cần viết 1 thủ tục kiểu như (Dựa theo cách lấy dữ liệu từ mảng)

    Public Function LoadDataToComBo(cboName As Object, arrDataSource As Variant) As Boolean
    '//*********************************************************************
    '// Purpose: Load 1 mang vao ComboBox hoac Listbox cua MS Form 2
    '// Parameters:
    '// 1. cboName: ComboBox hoac ListBox can load du lieu
    '// 2. arrDataSource: Mang n chieu - nguon du lieu can load len combobox hay listbox
    '// Return:
    '// - True If load successfull, False if failed.
    '// Samples:
    '// Dim Dim myArray(6, 3)
    '// Fill myArray data here...
    '// iRet = LoadDataToComBo(ComboBox1, myArray)
    '// Written by: VNUNI Development team
    '// Histories....
    '// ...
    '//*********************************************************************
    On Error Goto Proc_Error
    Dim ....
    '// Asumes function failed.
    LoadDataToComBo = False
    '// Identify number of columns
    cboName.ColumnCount = Ubound(arrDataSource,...) --> Làm thế nào để lấy chiều của mảng, tương ứng với số cột

    '// Loading data to controls
    cboName.Column() = MyArray
    '// Continue your code here....

    Done:
    -----LoadDataToComBo = True
    -----Exit Function

    Proc_Error:
    '// Raise error description here....
    '//...
    -----....
    End Function

    Trong sự kiện Form_Load hay Gì gì đó_Load :) (Form đó có cái Combo, listbox của FM20.dll nhé) thì Call cái hàm như mô tả trong phần samples ở trên

    Tóm lại là viết kiểu như vậy, còn code cụ thể thì lâu lắm rồi ko viết. Đoạn trên chỉ là viết chay thôi (ko viết trong môi trường lập trình)
     
    Last edited: 21 Tháng hai 2006
    #8
  9. handung107

    handung107 Thành viên thân thiết

    Bài viết:
    576
    Đã được thích:
    13
    Nơi ở:
    VN
    Chị chỉ muốn nhờ các em xem lại một tí xíu này thôi. Như File ví dụ của Cường là ComboBox được đặt trên Worksheet và dùng một Button để thi hành thủ tục
    Nếu thiết kế trên một UserForm, có một ComboBox và cũng dùng Button để thi hành thủ tục sau khi load Form lên thì cũng không có gì để nói cả. Nhưng chị lại muốn khi Load Form lên bằng thủ tục :
    Private Sub UserForm1_Initialize()
    Code của Cường
    End Sub
    thì ComboBox sẽ tự cập nhật các Item trong mảng vào lại không được.
     
    #9
  10. Đào Việt Cường

    Đào Việt Cường Moderator

    Bài viết:
    400
    Đã được thích:
    2
    Giới tính:
    Nam
    Nơi ở:
    Khánh Hòa
    Dear HanDung107
    -----------------
    Chị ơi, em áp dụng trên User form có thấy sao đâu. Em không biết hiện tượng "và dùng thủ tục Private Sub UserForm1_Initialize() thì sẽ không Add được các Item có nhiều cột vào List Box hay ComboBox" là như thế nào ạ?
    Em gửi file đính kèm chị xem xem có đúng như ý chị muốn không! Em vẫn sử dụng đoạn code đó, chỉ sửa một chút là bổ sung tham số Combo Box thôi.
     
    Last edited: 3 Tháng tư 2006
    #10

Chia sẻ trang này