Giúp về sử dụng MouseWheel để scroll cho ComboBox trong UserForm. (1 người xem)

Liên hệ QC

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

skullrock

Thành viên chính thức
Tham gia
5/12/08
Bài viết
70
Được thích
1
Mình có file test đính kèm, các bạn chỉ dùm đoạn code để có thể sử dụng mousewheel với. Có search google về mấy code mà áp vào bị lỗi, sửa hoài không ra, còn gà về vba.
Mong giúp đỡ, thanks !!!
 

File đính kèm

Upvote 0
có vấn đề này nữa, cả 2 file ScrollwheelForm và wheelForm mình tải về đều có chung vấn đề là: Scroll được, nhưng dữ liệu trong combobox của mình rất dài, mà chỉ scroll được từ từ, từ trên xuống, mình kéo xuống giữa giữa thì scroll nhảy lên lại từ đầu, không scroll đc tại vị trí mình đã kéo xuống.
Mình có ý tưởng như thế này:
- Click dữ liệu do combobox xổ xuống thì chưa chọn liền, phải double click thì mới chọn, click thì chỉ dừng lại ở đó thôi, khi đó scroll thì scroll từ vị trí mình đã click, ko phải nhảy lên trên rồi scroll.
- Hoặc ko cần dùng double click, nhưng mình kéo combobox tới đâu, thì khi đưa chuột vào scroll thì cho scroll ngay vị trí đó.
Mong các bạn và các thầy góp ý, giúp đỡ.
Cám ơn.
 
Upvote 0
có vấn đề này nữa, cả 2 file ScrollwheelForm và wheelForm mình tải về đều có chung vấn đề là: Scroll được, nhưng dữ liệu trong combobox của mình rất dài, mà chỉ scroll được từ từ, từ trên xuống, mình kéo xuống giữa giữa thì scroll nhảy lên lại từ đầu, không scroll đc tại vị trí mình đã kéo xuống.
Mình có ý tưởng như thế này:
- Click dữ liệu do combobox xổ xuống thì chưa chọn liền, phải double click thì mới chọn, click thì chỉ dừng lại ở đó thôi, khi đó scroll thì scroll từ vị trí mình đã click, ko phải nhảy lên trên rồi scroll.
- Hoặc ko cần dùng double click, nhưng mình kéo combobox tới đâu, thì khi đưa chuột vào scroll thì cho scroll ngay vị trí đó.
Mong các bạn và các thầy góp ý, giúp đỡ.
Cám ơn.

Mục đích của bạn dùng Scroll là để làm gì?
Bạn nói dữ liệu của bạn dài quá, vậy scroll có mà lòi con mắt!
Bạn định dò tìm dữ liệu trong ComboBox chăng? Nếu thế thì chả dùng scroll để làm cái gì cho mệt, dùng kiểu tra từ điển cho khỏe: gõ từ khóa, list tự động thu lại vừa đủ cho ta chọn
 
Upvote 0
em làm bên dây cáp điện, đang lập bảng thông số kỹ thuật của các loại cáp, em đã hoàn thành bảng dữ liệu gồm 12.000 dòng, do số dòng và cột rất nhiều, nhìn vào khó, nên em lập ra 1 form, khi tra mã sản phẩm thì sẽ hiển thị các thông số trên các textbox, tương đối ổn rồi, chỉ đang muốn hiệu chỉnh thêm cái comboBox cho nó scroll. Vì số lượng nhiều, nên khi kéo xuống nhẹ là qua rất nhiều dữ liệu, nên em muốn khi kéo tới gần mã cáp mình muốn tra, lúc đó sẽ dùng scroll để kéo cho chậm lại.
Vì là mã sản phẩm không có qui luật cụ thể và rất nhiều nên em nghĩ không thể nhớ để có thể dùng kiểu tra tự điển.
Anh chỉ em thêm về câu cuối anh nói, gõ từ khóa, list tự động thu lại vừa đủ cho ta chọn, em chưa biết làm cái này.
Mong góp ý chỉ bảo dùm em.
Cám ơn !!!
 
Upvote 0
em làm bên dây cáp điện, đang lập bảng thông số kỹ thuật của các loại cáp, em đã hoàn thành bảng dữ liệu gồm 12.000 dòng, do số dòng và cột rất nhiều, nhìn vào khó, nên em lập ra 1 form, khi tra mã sản phẩm thì sẽ hiển thị các thông số trên các textbox, tương đối ổn rồi, chỉ đang muốn hiệu chỉnh thêm cái comboBox cho nó scroll. Vì số lượng nhiều, nên khi kéo xuống nhẹ là qua rất nhiều dữ liệu, nên em muốn khi kéo tới gần mã cáp mình muốn tra, lúc đó sẽ dùng scroll để kéo cho chậm lại.
Vì là mã sản phẩm không có qui luật cụ thể và rất nhiều nên em nghĩ không thể nhớ để có thể dùng kiểu tra tự điển.
Anh chỉ em thêm về câu cuối anh nói, gõ từ khóa, list tự động thu lại vừa đủ cho ta chọn, em chưa biết làm cái này.
Mong góp ý chỉ bảo dùm em.
Cám ơn !!!
Bạn cứ cho lên đây 1 file chừng độ 1000 dòng dữ liệu rồi tôi làm cho (dữ liệu thật nhé)
 
Upvote 0
anh cho em xin cái mail, vì file này thuộc công ty nên em ko dám share lên trực tiếp ở đây.
 
Upvote 0
anh cho em xin cái mail, vì file này thuộc công ty nên em ko dám share lên trực tiếp ở đây.

Ý tôi nói DỮ LIỆU THẬT ở đây là thật về cấu trúc, còn nội dung thế nào mà chẳng được
Bạn thật thà ghê! Dữ liệu của cty nên không dám share, đồng ý! Nhưng ai bắt bạn đưa lên đây thật 100%... Bạn có thể xóa hết dữ liệu rồi giả lập cái gì mà chẳng được (miễn cấu trúc dữ liệu giống thật là được rồi)
 
Upvote 0
anh NDU ơi, đã gửi mail cho anh và gửi link file vào box forum của anh rồi, mong anh xem giúp dùm.
Cám ơn anh.
 
Upvote 0
anh NDU ơi, đã gửi mail cho anh và gửi link file vào box forum của anh rồi, mong anh xem giúp dùm.
Cám ơn anh.

Tôi chẳng bao giờ khoái cái vụ gửi mail riêng rồi giúp riêng một ai (bởi vậy chẳng mấy khi tôi nghiên cứu những file trong mail riêng)
Nếu bạn thấy cần thiết, cứ việc gửi file thẳng lên diễn đàn đi, tôi không làm được sẽ có người khác làm giúp
(tôi có phải là thánh đâu mà cái gì cũng biết)
 
Upvote 0
- Vì số lượng dữ liệu nhiều, nên khi kéo ComboBox xuống nhẹ là qua rất nhiều dữ liệu, nên em muốn khi kéo tới gần mã cáp mình muốn tra, lúc đó sẽ dùng scroll để kéo cho chậm lại.
- Tiện thể giúp code dùm em cái label Tên nhóm cáp trên form, giá trị xuất cho label là dòng chữ màu đỏ tên nhóm cáp trong bảng dữ liệu.
Mong góp ý giúp đỡ.
Cám ơn !!!
 

File đính kèm

Upvote 0
mình có một góp ý nhỏ vậy

set properties của combobox1 là
style là 0-fmStyleDropDownCombo
của bạn hiện đang là
1-fmStyleDropDownList
và thêm đoạn code này vào

Private Sub ComboBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Me.ComboBox1.DropDown
End Sub

như vậy khi bạn gõ mã gần với mã bạn cần tìm thì nó sẻ dò tới gần đó

p/s bạn sử dụng cái đoạn code scoll mà ko sử sự dụng các bẩy lỗi trong các đoạn code của bạn, nguy hiểm qua. khi có lỗi xảy ra. nó treo luôn scoll của excel.

nên sử dụng bẩy lỗi ở nhưng nơi có thể xảy ra lỗi.
 
Lần chỉnh sửa cuối:
Upvote 0
- Vì số lượng dữ liệu nhiều, nên khi kéo ComboBox xuống nhẹ là qua rất nhiều dữ liệu, nên em muốn khi kéo tới gần mã cáp mình muốn tra, lúc đó sẽ dùng scroll để kéo cho chậm lại.
- Tiện thể giúp code dùm em cái label Tên nhóm cáp trên form, giá trị xuất cho label là dòng chữ màu đỏ tên nhóm cáp trong bảng dữ liệu.
Mong góp ý giúp đỡ.
Cám ơn !!!

Thực ra khi sửa code của người khác tôi chỉ thay hook của người khác bằng subclassing nhưng code phục vụ thông điệp của người khác tôi vẫn để nguyên. Bây giờ nhìn kỹ thì thấy nó không đáp ứng được nhu cầu của bạn.

Nếu bạn chỉ muốn được việc thì ...

Trong code của WindowProc (Module1) có đoạn như sau, chỗ đỏ đỏ là tôi mới thêm vào.
Chỗ xanh xanh bạn nên xóa đi

Mã:
If uMsg = WM_MOUSEWHEEL And Not obj Is Nothing Then
        mousedata = wParam \ 65536
        With obj
            [COLOR=#ff0000]TopIndex = .TopIndex[/COLOR]
            If mousedata > 0 Then
                .TopIndex = TopIndex - 1
               [COLOR=#0000ff] '  TopIndex = .TopIndex[/COLOR]
            Else
                .TopIndex = TopIndex + 1
                [COLOR=#0000ff]'  TopIndex = .TopIndex[/COLOR]
            End If
            Exit Function
        End With
    End If

Xóa cả dòng "If uMsg = WM_MOUSEWHEEL Or uMsg = WM_VSCROLL Then Debug.Print CStr(uMsg)"

Nếu bạn muốn hiểu "tại sao" thì hỏi, tôi sẽ giải thích.

Label bạn tự làm, hoặc người khác giúp bạn. Tôi chỉ làm phần mà những người khác có thể không có hứng giúp bạn.
 
Lần chỉnh sửa cuối:
Upvote 0
Thực ra khi sửa code của người khác tôi chỉ thay hook của người khác bằng subclassing nhưng code phục vụ thông điệp của người khác tôi vẫn để nguyên. Bây giờ nhìn kỹ thì thấy nó không đáp ứng được nhu cầu của bạn.

Nếu bạn chỉ muốn được việc thì ...

Trong code của WindowProc (Module1) có đoạn như sau, chỗ đỏ đỏ là tôi mới thêm vào.
Chỗ xanh xanh bạn nên xóa đi

Mã:
If uMsg = WM_MOUSEWHEEL And Not obj Is Nothing Then
        mousedata = wParam \ 65536
        With obj
            [COLOR=#ff0000]TopIndex = .TopIndex[/COLOR]
            If mousedata > 0 Then
                .TopIndex = TopIndex - 1
               [COLOR=#0000ff]'  TopIndex = .TopIndex[/COLOR]
            Else
                .TopIndex = TopIndex + 1
                [COLOR=#0000ff]'  TopIndex = .TopIndex[/COLOR]
            End If
            Exit Function
        End With
    End If

Xóa cả dòng "If uMsg = WM_MOUSEWHEEL Or uMsg = WM_VSCROLL Then Debug.Print CStr(uMsg)"

Nếu bạn muốn hiểu "tại sao" thì hỏi, tôi sẽ giải thích.

Label bạn tự làm, hoặc người khác giúp bạn. Tôi chỉ làm phần mà những người khác có thể không có hứng giúp bạn.

Vâng, cám ơn anh nhìu. Em mới làm quen với code VB nên có ý tưởng mà không bik cách viết code, em sẽ cố gắng nghiên cứu thêm.
Cám ơn mọi người.
 
Upvote 0
Web KT

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

Back
Top Bottom