Sự kiện DoubleClick

Liên hệ QC

Hoàng Trọng Nghĩa

Chuyên gia GPE
Thành viên BQT
Moderator
Tham gia
17/8/08
Bài viết
8,662
Được thích
16,720
Giới tính
Nam
Tôi có 1 Listbox trong UserForm, Nhằm tiết kiệm diện tích của Form tôi dùng sự kiện DoubleClick vào Listbox để co giản chiều cao của Listbox. Tôi có 3 điều kiện sau:

1) Nếu danh sách rỗng:

attachment.php


2) Nếu danh sách có 1 giá trị:

attachment.php


3) Danh sách nhiều hơn 1:

attachment.php


Trong 3 đk đó, chỉ duy nhất là trường hợp 2, sau khi show và bấm thoát msgbox, nó rất khó khăn để bấm thoát Form hoặc click vào các button khác. Cho hỏi lý do và cách khắc phục. Nhân tiện cũng nói luôn là nếu click phải chuột trước thì mới "bấm ăn" các nút khác trong Form trong trường hợp này!
 

File đính kèm

Lần chỉnh sửa cuối:
Bạn sửa lại Code như sau xem sao, mình text rồi thấy OK
Mã:
Private Sub ListDS_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
   On Error Resume Next: Dim i, j As Long
   If Sheet1.Range("A2").Value = "" Then MsgBox "Danh sach chua cap nhat!", vbInformation: CmdThoat.SetFocus: Exit Sub
   
   i = 21.8: j = ListDS.ListCount
   Select Case j
   Case 1: MsgBox "Danh sach chi co 1 loai!", vbInformation: CmdThoat.SetFocus: Exit Sub
   Case Is > 1
      If ListDS.Height > 21.8 Then
        ListDS.Height = i
      Else
        ListDS.Height = IIf(Me.Height - 25 < j * i, Me.Height - 25, j * i + 5)
      End If
   End Select
End Sub
 
Upvote 0
Bạn sửa lại Code như sau xem sao, mình text rồi thấy OK


Cám ơn bạn, nhờ bạn mình làm được rồi! Mình làm cho nó gọn lại thêm một chút nữa, không biết có ai cải tiến được nữa không. Nhưng mình thấy hình như là khi nhiều mặt hàng, mặt hàng cuối cùng không được hiển thị trên Listbox? Tại sao nhỉ?
PHP:
Private Sub ListDS_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
On Error Resume Next: Dim i, j As Long
  If Sheet1.Range("A2").Value = "" Then MsgBox "Danh sach chua cap nhat!", vbInformation: Exit Sub
  i = 21.8: j = ListDS.ListCount
  Select Case j
    Case 1: MsgBox "Danh sach chi co 1 loai!", vbInformation: Exit Sub
    Case Is > 1
    ListDS.Height = IIf(ListDS.Height > 22, i, IIf(Me.Height - 25 < j * i, Me.Height - 25, j * i))
  End Select
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Cám ơn bạn, nhờ bạn mình làm được rồi! Mình làm cho nó gọn lại thêm một chút nữa, không biết có ai cải tiến được nữa không. Nhưng mình thấy hình như là khi nhiều mặt hàng, mặt hàng cuối cùng không được hiển thị trên Listbox? Tại sao nhỉ?
PHP:
Private Sub ListDS_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
On Error Resume Next: Dim i, j As Long
  If Sheet1.Range("A2").Value = "" Then MsgBox "Danh sach chua cap nhat!", vbInformation: Exit Sub
  i = 21.8: j = ListDS.ListCount
  Select Case j
    Case 1: MsgBox "Danh sach chi co 1 loai!", vbInformation: Exit Sub
    Case Is > 1
    ListDS.Height = IIf(ListDS.Height > 22, i, IIf(Me.Height - 25 < j * i, Me.Height - 25, j * i))
  End Select
End Sub
Sao không đặt name cho các thông báo, cần gì đến cell F1 nhỉ
Xem file tôi làm lại (thế có vẽ hoành tráng hơn)
--------------------
Ah... Mà cần gì nhiều thông báo đến thế nhỉ ---> Nếu danh sách chưa cập nhật hoặc chỉ có 1 loại, cùng lắm khi ta Double click vào thì nó chẳng làm gì cả ---> Thế có phải đơn giản hơn không? ---> Xài chương trình, ghét nhất là các thông báo cứ xuất hiện đấy
 

File đính kèm

Upvote 0
Nếu là tôi thì tôi sẽ làm thế này (bỏ hết các thông báo)
PHP:
Private Sub UserForm_Initialize()
  With Sheet1.Range(Sheet1.[A2], Sheet1.[A6500].End(xlUp))
    ListDS.List() = UniqueList(.Cells)
  End With
End Sub
PHP:
Private Sub ListDS_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
  Dim MaxH As Double
  MaxH = IIf(20 * ListDS.ListCount > 170, 170, 20 * ListDS.ListCount)
  If ListDS.ListCount > 1 Then
    ListDS.Height = IIf(ListDS.Height > 20, 20, MaxH)
  End If
End Sub
(Có hàm UniqueList)
Cell A1 tôi gõ vào công thức sau:
PHP:
=IF(COUNTA($A$2:$A$65536)=0,"(CHỜ NHẬP DANH SÁCH)","DANH SÁCH")
Thế là tận dụng được cell A1 để làm value cho ListBox trong trường hợp danh sách chưa nhập
Nhìn vào ListBox, nếu thấy xuất hiện ScrollBar thì biết ListBox có hơn 1 dòng rồi còn gì (cần quái gì thông báo tùm lum cho nó rối)
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Thầy ơi thật là tuyệt vời, cả 2 File đều hay cả. Tuy nhiên, đối với File "doubleclick" sau khi co giản thì khi thu nhỏ bấm mũi tên xuống nó không cho ra giá trị cuối cùng (đối với danh sách nhiều). Còn File thứ hai, sau khi co giản, nó chỉ có thể cho mũi tên chỉ lên hoạt động, mũi tên chỉ xuống lại bị liệt, nguyên nhân là gì Thầy có biết không?
 
Upvote 0
Thầy ơi thật là tuyệt vời, cả 2 File đều hay cả. Tuy nhiên, đối với File "doubleclick" sau khi co giản thì khi thu nhỏ bấm mũi tên xuống nó không cho ra giá trị cuối cùng (đối với danh sách nhiều). Còn File thứ hai, sau khi co giản, nó chỉ có thể cho mũi tên chỉ lên hoạt động, mũi tên chỉ xuống lại bị liệt, nguyên nhân là gì Thầy có biết không?
Chẳng hiểu tại sao lại vậy, nhưng vào ListBox Properties, chỉnh mục SpecialEffect = 0 thì giải quyết được vấn đề ---> Lạ thật
(chỉnh BackColor thành màu sáng cho dể nhìn)
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom