- Sử lý 2 sự kiện trong Workbook

Liên hệ QC

dmtdmtbb

Biệt danh: xDelx
Tham gia
24/5/07
Bài viết
306
Được thích
438
- Trong Workbook có 2 sự kiện (Workbook_SheetChange và Workbook_SheetBeforeRightClick )
- Làm sao để 2 sự kiện này cùng chạy mà không báo lỗi.
- Bác nào sử lý hộ dùm cái này -0-/. -0-/. -0-/. , Thx


ĐMT
 

File đính kèm

dmtdmtbb đã viết:
- Trong Workbook có 2 sự kiện (Workbook_SheetChange và Workbook_SheetBeforeRightClick )
- Làm sao để 2 sự kiện này cùng chạy mà không báo lỗi.
- Bác nào sử lý hộ dùm cái này -0-/. -0-/. -0-/. , Thx


ĐMT
Vấn đề không phải là MS Excel không cho xử lý 2 sự kiện trên cùng lúc mà là do bạn dùng sai các thuộc tính của các đối tượng ListBox (mình sẽ nói ở phần dưới).
Mã:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
     Sh_Vatu_Change Sh, Target
End Sub
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
    If Sh.Name <> "VatTu" Then Exit Sub
    dm.Show vbModal
    Cancel = True
End Sub
Sự kiện Workbook_SheetBeforeRightClick bạn chỉ cho chạy khi nhấn chuột phải trên sheet VatTu. Như vậy thì bạn không nên viết vào trong Workbook mà chỉ cần viết code trong Worksheet VatTu là được. Làm như vậy chương trình sẽ chạy nhanh hơn đấy.
Trong VBA, nhấn đúp chuột vào sheet VatTu roìi thêm đoạn code sau:
Mã:
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    dm.Show vbModal
    Cancel = True
End Sub

Xử lý lỗi:
Dựa vào sự kiện khởi tạo form thấy bạn tạo ra ListBox có 03 cột, vùng dữ liệu được lấy từ Name "DMVL_MA". Nhưng name "DMVL_MA" bạn lại chỉ gồm 01 cột (cột A) nên trong sự kiện TB_Change sẽ báo lỗi dòng lệnh sau:
Mã:
If InStr(LCase(Trim(LB.List(I, 1))), cValue) <> 0 Then
'.....
Bạn chỉ cần thay đổi name "DMVL_MA" gồm 03 cột là được thôi.
Name: DMVL_MA
Refers to: =DMVL!$A$2:$C$499
Chú ý:
Private Sub UserForm_Initialize()
Chon.Default = True
Thoat.Cancel = True
With LB
.ColumnCount = 3
.BoundColumn = 1
.ColumnWidths = "40,140,50"
.RowSource = "DMVL_MA"
TB.text = ActiveCell.Value
End With
TB_Change
End Sub
Bạn chỉ cần viết là:
Mã:
Private Sub UserForm_Initialize()
    Chon.Default = True
    Thoat.Cancel = True
    With LB
        .ColumnCount = 3
        .BoundColumn = 1
        .ColumnWidths = "40,140,50"
        .RowSource = "DMVL_MA"
    End With
    TB.Text = ActiveCell.Value
End Sub

P/S: Nói chung với File của bạn chỉ cần thay đổi name DMVL_MA như mình đã nói ở trên là OK.
 
Upvote 0
- Cám ơn bác nhiều, sự cố đã được khắc phục --=0)*&^)--=0
 
Upvote 0
Web KT

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

Back
Top Bottom