Hỗ trợ viết code ComboBox tùy chọn (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

tuanhuycntt

Thành viên chính thức
Tham gia
5/7/15
Bài viết
65
Được thích
5
Em muốn tạo 1 ComboBox tùy chọn 1 danh sách không có trên bảng tính . Em nghĩ là phải thiết kết từ code VBA và gán Marco vào ComboBox nhưng chưa tìm được giải thuật cụ thể.
Các bác cho em xin ý tưởng với ạ.
 
Em muốn tạo 1 ComboBox tùy chọn 1 danh sách không có trên bảng tính . Em nghĩ là phải thiết kết từ code VBA và gán Marco vào ComboBox nhưng chưa tìm được giải thuật cụ thể.
Các bác cho em xin ý tưởng với ạ.
Muốn giúp phải có file mẫu mới được bạn nhé.
 
Upvote 0
Em muốn tạo 1 ComboBox tùy chọn 1 danh sách không có trên bảng tính . Em nghĩ là phải thiết kết từ code VBA và gán Marco vào ComboBox nhưng chưa tìm được giải thuật cụ thể.
Các bác cho em xin ý tưởng với ạ.
Góp ý cho bạn:
Muốn làm cái gì thì cũng nên đính kèm File với 1 sheet theo dõi (với tiêu đề đầy đủ và 1 ít dữ liệu), dữ liệu có thể là giả định, 1 sheet danh sách cần lấy vào ComboBox.
Chứ nêu vấn đề khơi khơi thì chẳng có thành viên nào giúp đươc.
 
Upvote 0
Vậy danh sách ấy có.. ở đâu?
Danh sách đó và em tự nhập trong công thức.

VD như là các danh sách đó nằm trong 1 mảng

PHP:
Arr = Array("a", "b", "c", "d")

Khi ấn vào ComboBox tự hiển thị các giá trị "a", "b", "c", "d" để lựa chọn

@giaiphap
@be09

E đang cần 1 chức năng cho ComboBox như vậy bác ạ. VD như trong file Attach bác xem giúp em xem cách làm như thế nào cho nó đúng ạ
 

File đính kèm

Upvote 0
Em insert ComboBox ở dạng Form Controls sau khi gán Array vào thì nó báo lỗi
Còn insert ở dạng ActiveX Controls thì câu lệnh đã thực hiện được rồi ạ

Anh/Chị có thể giải thích giúp em về 2 dạng đó được không ạ. Khi nào thì dùng dạng nào khi nào dùng dạng kia

PHP:
Private Sub ComboBox1_Change()
    ComboBox1.List = Array("a", "b", "c", "d")
End Sub

Và giờ e muốn lấy giá trị của ComboBox đó để liên kết sử dụng cho công thức khác thì làm như thế nào ạ.

VD như bài trên là sau khi chọn loại hàng xong thì các range ("A6:E23") ở bên dưới sẽ tự động lọc in ra kèm theo đó là khung của ô tự động co lại
 
Lần chỉnh sửa cuối:
Upvote 0
mình làm dropbox, nhưng có 100 sản phảm thì tìm rất mất thời gian. có cách nào để mình gõ chữ cái đầu nó hiện ra các dòng có liên quan ko vậy mọi người
 
Upvote 0
Em insert ComboBox ở dạng Form Controls sau khi gán Array vào thì nó báo lỗi
Còn insert ở dạng ActiveX Controls thì câu lệnh đã thực hiện được rồi ạ

Anh/Chị có thể giải thích giúp em về 2 dạng đó được không ạ. Khi nào thì dùng dạng nào khi nào dùng dạng kia

PHP:
Private Sub ComboBox1_Change()
    ComboBox1.List = Array("a", "b", "c", "d")
End Sub

Và giờ e muốn lấy giá trị của ComboBox đó để liên kết sử dụng cho công thức khác thì làm như thế nào ạ.

VD như bài trên là sau khi chọn loại hàng xong thì các range ("A6:E23") ở bên dưới sẽ tự động lọc in ra kèm theo đó là khung của ô tự động co lại
Đối với object thuộc Form Controls bạn không làm vậy được! Cụ thể với ComboBox trong file của bạn, ta phải làm thế này:
1> Tạo 1 module với code:
Mã:
Sub CreateCboList()
  Dim drp As DropDown
  Set drp = Sheet1.DropDowns("Drop Down 1")
  drp.List = Array("a", "b", "c", "d")
End Sub
Hoặc ngắn gọn:
Mã:
Sub CreateCboList()
  Sheet1.DropDowns("Drop Down 1").List = Array("a", "b", "c", "d")
End Sub
Trong đó cái tên "Drop Down 1" là tên mà bạn nhìn thấy trong hộp Name box (khi click chọn vào ComboBox)

Capture.JPG

2> Tiếp theo chạy sub trên rồi ra ngoài bảng tính, kiểm tra combobox sẽ thấy list đã được thêm vào
----------------------
Trong 2 cách viết code, tôi thích cách ở trên hơn, vì khi bạn khai báo drp as DropDown xong, lúc gõ drp và dấu chấm.... ngay sau dấu chấm bạn sẽ nhìn thấy tooltip xổ xuống gợi ý các thuộc tính và phương thức. Như vậy sẽ đở mất công thuộc lòng

Untitled.jpg
 
Upvote 0
Đối với object thuộc Form Controls bạn không làm vậy được! Cụ thể với ComboBox trong file của bạn, ta phải làm thế này:
1> Tạo 1 module với code:
Mã:
Sub CreateCboList()
  Dim drp As DropDown
  Set drp = Sheet1.DropDowns("Drop Down 1")
  drp.List = Array("a", "b", "c", "d")
End Sub
Hoặc ngắn gọn:
Mã:
Sub CreateCboList()
  Sheet1.DropDowns("Drop Down 1").List = Array("a", "b", "c", "d")
End Sub
Trong đó cái tên "Drop Down 1" là tên mà bạn nhìn thấy trong hộp Name box (khi click chọn vào ComboBox)

View attachment 181499

2> Tiếp theo chạy sub trên rồi ra ngoài bảng tính, kiểm tra combobox sẽ thấy list đã được thêm vào
----------------------
Trong 2 cách viết code, tôi thích cách ở trên hơn, vì khi bạn khai báo drp as DropDown xong, lúc gõ drp và dấu chấm.... ngay sau dấu chấm bạn sẽ nhìn thấy tooltip xổ xuống gợi ý các thuộc tính và phương thức. Như vậy sẽ đở mất công thuộc lòng

View attachment 181500
Bác quá siêu. E quá phục bác luôn :)

bác cho e hỏi giờ muốn lấy giá trị trong mảng đó và kiểm tra điều kiện và lọc với mảng bên dưới để in danh sách thì phải khai báo kiểu gì để lấy được ra ạ. Em chưa kiểu rõ lắm
 
Upvote 0
Bác quá siêu. E quá phục bác luôn :)

bác cho e hỏi giờ muốn lấy giá trị trong mảng đó và kiểm tra điều kiện và lọc với mảng bên dưới để in danh sách thì phải khai báo kiểu gì để lấy được ra ạ. Em chưa kiểu rõ lắm
Làm như sau:
1> Cho toàn bộ code dưới đây vào 1 module:
Mã:
Public drp As DropDown
Private Sub Auto_Open()
  Set drp = Sheet1.DropDowns("Drop Down 1")
  CreateCboList
End Sub
Private Sub CreateCboList()
  drp.List = Array("*", "a", "b", "c", "d")
End Sub
Sub CboFilter()
  If drp Is Nothing Then Auto_Open
  Dim sFilter As String, rng As Range
  Set rng = Sheet1.Range("A5", Sheet1.Range("E60000").End(xlUp))
  sFilter = drp.List(drp.Value)
  If sFilter = "*" Then
    rng.AutoFilter 3
  Else
    rng.AutoFilter 3, sFilter
  End If
End Sub
2> Ra ngoài bảng tính, click phải chuột vào ComboBox, chọn Assign Macro, chọn macro name "CboFilter" rồi bấm OK
3> Tiếp theo, đóng vào lưu file
4> Mở lại file (đương nhiên phải Enable Macro) và... trải nghiệm
 
Upvote 0
Mã:
 Public drp As DropDown
Khai báo cái này có phải là khai báo biến này dùng chung trong toàn Marco đó phải không ạ?

Mã:
If sFilter = "*" Then
   rng.AutoFilter 3
  Else
   rng.AutoFilter 3, sFilter
  End If
Em chưa hiểu đoạn code này lắm ạ. AutoFiter 3 tức là chức năng Unique Record Ony phải không anh? Em chưa hiểu chức năng đó
 
Upvote 0
Mã:
 Public drp As DropDown
Khai báo cái này có phải là khai báo biến này dùng chung trong toàn Marco đó phải không ạ?
Đúng là như vậy! Vì các sub điều có dùng đến biến drp nên khai báo chung 1 lần luôn
Mã:
If sFilter = "*" Then
   rng.AutoFilter 3
  Else
   rng.AutoFilter 3, sFilter
  End If
Em chưa hiểu đoạn code này lắm ạ. AutoFiter 3 tức là chức năng Unique Record Ony phải không anh? Em chưa hiểu chức năng đó
AutoFilter 3 nghĩa là ShowAll dữ liệu tại cột 3 ấy mà
 
Upvote 0
mình làm dropbox, nhưng có 100 sản phảm thì tìm rất mất thời gian. có cách nào để mình gõ chữ cái đầu nó hiện ra các dòng có liên quan ko vậy mọi người
Theo tôi hiểu là bạn muốn tìm 1 loại vật tư (ví dụ: xi măng có nhiều loại và nhiều giá) để chọn áp giá và nhập liệu cho nhanh.
Nếu đúng vậy thì nên dùng UserForm thì sẽ hiệu quả hơn
 
Upvote 0
Theo tôi hiểu là bạn muốn tìm 1 loại vật tư (ví dụ: xi măng có nhiều loại và nhiều giá) để chọn áp giá và nhập liệu cho nhanh.
Nếu đúng vậy thì nên dùng UserForm thì sẽ hiệu quả hơn
ý của bác nói có phải giống như trong video này hướng dẫn không ạ?
 
Upvote 0
PHP:
Private Sub CreateCboList()
  drp.List = Array("*", "a", "b", "c", "d")
End Sub
Bác NDU cho em hỏi chút là với trường hợp các biến ở trong mảng khá nhiều và không muốn viết nó ra 1 vùng dữ liệu trong bảng tính thì kết với giữa việc nhập biến với vòng lặp for để thêm giá trị trong biến được không ạ?

VD: Array gồm các giá trị: *, A1, A2, ..... A20
 
Upvote 0
PHP:
Sub Array()

Dim Arr1(21)

Dim i  As Integer
   Arr(1)="*"
    For i = 1 To 20

        Arr(i+1) = "A" & i

    Next i
End Sub
Bác xem giúp em. Em code ntn liệu có tối ưu không ạ.
 
Upvote 0
Theo tôi hiểu là bạn muốn tìm 1 loại vật tư (ví dụ: xi măng có nhiều loại và nhiều giá) để chọn áp giá và nhập liệu cho nhanh.
Nếu đúng vậy thì nên dùng UserForm thì sẽ hiệu quả hơn
thay vì mình muốn tìm xi măng mình phải kéo từ A -> X. bây giờ mình nhập X thì nó sổ ra tòan bộ những sản phẩm có từ X
 
Upvote 0
Mình nghĩ là cái này đúng là cái mình cần. Cám ơn bạn. Nếu nội dung cần tìm mình để ở sheet khác thì mình viết code như thế nào
Nội dung cần tìm ở sheet khác? Vậy khi bạn đứng tại sheet này và gõ thì làm cách nào bạn nhìn thấy cái sheet khác ấy có thay đổi?
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom