Code fmStyleDropDownCombo Và fmStyleDropDownList Thay đổi thuộc tính ComboBox. (1 người xem)

  • Thread starter Thread starter khamha
  • Ngày gửi Ngày gửi
Liên hệ QC

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

khamha

Không có việc gì khó...
Tham gia
4/6/10
Bài viết
662
Được thích
846
Nghề nghiệp
CNVC Laos
Nhờ các bạn tạo cho đoạn Code ( hai nút bấm) để thay đổi thuộc tính của các ComboBox trong UserForm.
1, Nút thứ nhất sẽ thay đổi thuộc tính của các ComboBox = fmStyleDropDownList
2, Nút thứ hai sẽ thay đổi thuộc tính của các ComboBox = fmStyleDropDownCombo
3, Các ComboBox cần thay đổi thuộc tính là:
3,1, Ctr02 – Ctr 06
3,2, Ctr14 – Ctr 15
3,3, Ctr26
3,4, Ctr29
3,5, Ctr32 – Ctr 35 Và
3,6, Ctr44 ,46 ,48 ,50 ,52 ,54 ,56 ,58 ,60 ,62 ,64 ,66
* Ghi chú: Các ComboBox khác ko tính ( nếu có )
Các bạn xem File đính kèm Và giúp mình nhé,Thank
 
Lần chỉnh sửa cuối:
Bạn Khâm Hà à, tôi thấy bạn hỏi khá nhiều về việc xử lý hàng loạt trên form, xử lý hàng loạt textbox, commandbutton, combobox, label.

Tại sao bạn không đặt tên chúng theo những nhóm khác nhau để dễ xử lý? Thí dụ như:

Các combobox đặt tên là Cbb01 đến Cbb50, nếu cần phân nhóm DropdownList và DrpdownCombo thì phân theo tên CbbList01 - CbbList25 và CbbCombo26 - CbbCombo50. Hoặc phân theo nhóm từ 1 đến 25 cần thay đổi thuộc tính, còn từ 26 đến 50 thì không?

Tương tự các textbox đặt tên là txt01 đến txt100 và phân nhóm ra nếu cần thiết

Các commandbutton đặt tên là cmb01 đến cmb20 và nếu cần thì đặt tên theo nhóm?

Từ đó, bạn chỉ cần hỏi 1 lần, bạn sẽ biết cách áp dụng cho tất cả các loại control.
 
Upvote 0
Tôi giả sử bạn đã đặt tên lại, các combobox cần thay đổi thuộc tính là các combobox có tên từ Cbb1 đến Cbb20, Các Cbb21 trở về sau không cần thay đổi.

Vậy ta viết 1 vòng lặp ngắn như sau:

PHP:
For i = 1 To 20
    Me.Controls("Cbb" & Trim(i)).Style = fmStyleDropDownCombo
Next
 
Upvote 0
Tôi giả sử bạn đã đặt tên lại, các combobox cần thay đổi thuộc tính là các combobox có tên từ Cbb1 đến Cbb20, Các Cbb21 trở về sau không cần thay đổi.

Vậy ta viết 1 vòng lặp ngắn như sau:

Mã:
For i = 1 To 20
    Me.Controls("Cbb" & [B][COLOR=#ff0000]Trim(i)[/COLOR][/B]).Style = fmStyleDropDownCombo
Next

Trim(i) nghĩa là sao vậy sư phụ?
 
Upvote 0
Vụ Trim(i) là tại vì có mấy lần mình viết code thấy vậy. Thỉnh thoảng For i = 1 to 10 nhưng khi nối i vào chuỗi "Cbb" bị biến thành "Cbb 1" hoặc "Cbb1 ", không "trym" không được.
 
Upvote 0
Vụ Trim(i) là tại vì có mấy lần mình viết code thấy vậy. Thỉnh thoảng For i = 1 to 10 nhưng khi nối i vào chuỗi "Cbb" bị biến thành "Cbb 1" hoặc "Cbb1 ", không "trym" không được.

Không bao giờ em viết mà gặp trường hợp này như Sư phụ nói! Không "chim" cũng đâu có bị "hở" ra đâu nè!
 
Upvote 0
Mình bị khi nối chuỗi thành tên sheet (Th1, Th2 chẳng hạn), bị lỗi "hỏng có sheet nào giống dzậy". Kiểm tra thì bị dư khoảng trắng. Sau đó cứ trym cho chắc.
 
Upvote 0
Trong trường hợp nó ko thích “Chim” thì ta phải dùng cái gì?
Như hình bên dưới:
Nếu chỉ để code trong khung mầu đỏ thì OK ,Nhưng nếu thêm đoạn:

For i = 2 To 6
Me.Controls("Ctr" & Trim(i)).Style = fmStyleDropDownList
Next

Thì báo lỗi.

 
Lần chỉnh sửa cuối:
Upvote 0
Trong trường hợp nó ko thích “Chim” thì ta phải dùng cái gì?
Như hình bên dưới:
Nếu chỉ để code trong khung mầu đỏ thì OK ,Nhưng nếu thêm đoạn:

For i = 2 To 6
Me.Controls("Ctr" & Trim(i)).Style = fmStyleDropDownList
Next

Thì báo lỗi.

Vì trong khung màu đỏ Ctr của anh có 2 số đuôi như Ctr32, nhưng như ở trên là Ctr2, trong lúc đó tên anh đặt là Ctr02, đúng không?
 
Upvote 0
Viehoai ơi ,ko ổn rồi ,được thằng này thì lại mất thằng kia.
Mình đã thay từ Ctr01 - Ctr09 thành Ctr1 - Ctr9 thì cái lỗi ở trên được sửa ,Nhưng nó lại bị lỗi đoạn Code sau:

 
Upvote 0
Viehoai ơi ,ko ổn rồi ,được thằng này thì lại mất thằng kia.
Mình đã thay từ Ctr01 - Ctr09 thành Ctr1 - Ctr9 thì cái lỗi ở trên được sửa ,Nhưng nó lại bị lỗi đoạn Code sau:

Lỗi đúng rồi anh, anh vừa đổi tên vừa thay định dạng thì lại lỗi tiếp
Anh sử dụng code như trên (code ở bài #8 anh thêm Format(i,"00") vào), còn tên các control thì vẫn là Ctro1, Ctr02, vv
Chúc anh thành công
 
Lần chỉnh sửa cuối:
Upvote 0
Viehoai ơi ,ko ổn rồi ,được thằng này thì lại mất thằng kia.
Mình đã thay từ Ctr01 - Ctr09 thành Ctr1 - Ctr9 thì cái lỗi ở trên được sửa ,Nhưng nó lại bị lỗi đoạn Code sau:


Phải thống nhất với nhau rằng, nếu số được đánh từ một Ctrl nào đó, nếu tổng số là hàng nào thì đánh theo hàng đó.

Tôi ví dụ:

Nếu tôi có 30 controls thì tôi sẽ đặt tên là Ctrl + định dạng 00 (Ctrl01 to Ctrl30)

Nếu tôi có 100 controls thì tôi sẽ đặt tên là Ctrl + định dạng 000 (Ctrl001 to Ctrl100)

Như thế tôi đã tự tạo một quy luật chung để sau này dùng vòng lặp thì tôi sẽ sử dụng định dạng cho Ctrl sau này (Format(xxx, "000")) và hàm Right(xxx,y) để tiện truy cập đến các ctrl.
 
Lần chỉnh sửa cuối:
Upvote 0
Sao bác Khamha không dùng thuộc tính Tag của các combo. Thiết lập các combo cần thay đổi thuộc tính bằng cách đặt Tag cho nó...
PHP:
Private Sub ChangeStyle()
    Dim Ctr As Control
    For Each Ctr In Me.Controls
        If TypeOf Ctr Is ComboBox Then
            Select Case Ctr.Tag
            Case 1:
                Ctr.Style = fmStyleDropDownList
            Case 2:
                Ctr.Style = fmStyleDropDownCombo
            Case Else
                '/// viet code
            End Select
        End If
    Next
End Sub
Bác không cần phải đặt lại tên mà chỉ cần đặt tag theo nhóm....

Vứn đề là tác giả muốn thay đổi thuộc tính của 1 nhóm combo từ style này qua style kia, nhóm còn lại không thay đổi style.

Có thể sử dụng tag để làm việc này, nhưng nếu không đổi tên, dùng vòng lặp sẽ phải duyệt qua tất cả các controls đủ loại, hoặc ít hơn, tất cả các combo. Nếu đổi tên, vòng lặp chỉ duyệt qua đúng số lượng combo cần chuyển đổi style.
Thực ra em thấy đặt tên bất kỳ rồi dùng cách lựa chọn (giữ phím CTRL + Click chuột) rồi gõ vào thuộc tính TAG nhanh hơn đổi tên khá nhiều.
Còn về việc phải duyệt qua các điều khiển trên form, em thấy cũng không quá ảnh hưởng đến tốc độ.
Cách này thì ít bị sai sót (vì nếu đặt tên, chỉ sai một ký tự đã có thể gây lỗi).
Thường trong các bài toán thực tế em hay chọn cách ít gây lỗi do sự cẩu thả của mình nhất! HIIH
 
Lần chỉnh sửa cuối:
Upvote 0
Sao bác Khamha không dùng thuộc tính Tag của các combo. Thiết lập các combo cần thay đổi thuộc tính bằng cách đặt Tag cho nó...

Bác không cần phải đặt lại tên mà chỉ cần đặt tag theo nhóm....
Vứn đề là tác giả muốn thay đổi thuộc tính của 1 nhóm combo từ style này qua style kia, nhóm còn lại không thay đổi style.

Có thể sử dụng tag để làm việc này, nhưng nếu không đổi tên, dùng vòng lặp sẽ phải duyệt qua tất cả các controls đủ loại, hoặc ít hơn, tất cả các combo. Nếu đổi tên, vòng lặp chỉ duyệt 1 số lần đúng bằng số lượng combo cần chuyển đổi style.
 
Upvote 0
Thực ra em thấy đặt tên bất kỳ rồi dùng cách lựa chọn (giữ phím CTRL + Click chuột) rồi gõ vào thuộc tính TAG nhanh hơn đổi tên khá nhiều.
Còn về việc phải duyệt qua các điều khiển trên form, em thấy cũng không quá ảnh hưởng đến tốc độ.
Cách này thì ít bị sai sót (vì nếu đặt tên, chỉ sai một ký tự đã có thể gây lỗi).
Thường trong các bài toán thực tế em hay chọn cách ít gây lỗi do sự cẩu thả của mình nhất! HIIH

Tự nhiên edit bài để trả lời, té ra trả lời trước khi bị hỏi ...

Đặt tên controls 1 cách khoa học còn nhằm mục đích quản lý controls sau này, đâu phải chỉ mỗi chuyện đăt thuộc tính.

Thí dụ tạo ra 30 cái textbox, Excel đặt tên tự động là textbox1 đến textbox30. Nhưng trong quá trình thiết kế form, đâu có lường trước là bao nhiêu cái, chưa chắc cái tạo trước cái tạo sau nằm đúng thứ tự theo vị trí, tạo rồi kéo tới kéo lui, dời qua dời lại cho vừa mắt. Rồi tạo 5 textbox xong quay ra tạo 5 combobox, tạo 2 commandbutton, rồi sắp xếp lại, ...
Cuối cùng sực nhớ ra và tạo thêm 2 textbox, ... Hai textbox tạo sau chưa chắc là 31 và 32, có khi 92 và 93 không chừng.

Rồi khi đang test code bị báo lỗi ở combobox 25, chả biết nó nằm ở phương trời nào ...
 
Upvote 0
Tất nhiên trong lập trình thì việc quản lý đối tượng là điều quan trọng - em hoàn toàn ủng hộ ý kiến của bác.
(Chẳng hạn cách đặt tên nên phản ánh bản chất của điều khiển - chẳng hạn cmdAdd = Nút thêm...)
Tuy nhiên đôi khi có một số tình huống thì nên áp dụng cách giải quyết hiệu quả.
(Có một bài trước đây em viết về cách sử dụng Class Instance để hiển thị báo cáo trong Access chẳng hạn). Lúc đó việc đặt tên điều khiển lại rất quan trọng.
Còn với nhu cầu của bác Khamha thì có nhiều cách để giải quyết, em chỉ có ý định chia sẻ một tí thôi mà!
 
Upvote 0

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

Back
Top Bottom